Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • E ECMAscript-Typescript
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 11
    • Issues 11
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • imunnic
  • ECMAscript-Typescript
  • Wiki
  • Modulo 4

Modulo 4 · Changes

Page history
Update Modulo 4 authored Feb 02, 2026 by imunnic's avatar imunnic
Show whitespace changes
Inline Side-by-side
Showing with 33 additions and 28 deletions
+33 -28
  • Modulo-4.md Modulo-4.md +33 -28
  • No files found.
Modulo-4.md
View page @ 512809a6
# Módulo 4 — Uso de Servicios y API REST en TypeScript # Módulo 4 — Uso de Servicios y API REST en TypeScript
**Aplicación práctica: Conexión del sistema de gestión sanitaria con una API REST propia (consulta y actualización de recursos y personal).**
--- ---
## 1. Introducción a la asincronía ## 1. Introducción a la asincronía
TypeScript hereda el modelo **asíncrono y no bloqueante** de JavaScript, pero añade **tipado estático** que permite detectar errores en el manejo de promesas y datos remotos antes de ejecutar la aplicación. TypeScript hereda el modelo **asíncrono y no bloqueante** de JavaScript, pero añade **tipado estático** que permite detectar errores en el manejo de promesas y datos remotos antes de ejecutar la aplicación.
```ts ```typescript
console.log('Iniciando petición...'); console.log('Iniciando petición...');
setTimeout((): void => { setTimeout((): void => {
...@@ -18,21 +16,29 @@ setTimeout((): void => { ...@@ -18,21 +16,29 @@ setTimeout((): void => {
console.log('Fin de la petición'); console.log('Fin de la petición');
``` ```
El flujo principal no se bloquea; la operación asíncrona se gestiona mediante el **Event Loop**. El **Event Loop** es el mecanismo que permite a Javascript (Typescript por herencia) ejecutar codigo en paralelo. Podría decirse que es un organizador de tareas o hilos. El flujo principal no se bloquea; la operación asíncrona se gestiona mediante el **Event Loop**. El **Event Loop** es el mecanismo que permite a Javascript (Typescript por herencia) ejecutar codigo en paralelo. Podría decirse que es un organizador de tareas o hilos.\
Si se quisiera esperar a recibir los datos lo que habría que hacer es: Si se quisiera esperar a recibir los datos lo que habría que hacer es:
```ts
console.log('Iniciando petición...');
async function getDatos(): Promise<void> { ```typescript
console.log('Iniciando petición...'); console.log('Iniciando petición...');
await retraso(); async function retraso(): Promise<string> {
return new Promise((resolve) => {
console.log('Cargando Datos');
setTimeout(() => {
resolve('Datos cargados');
}, 1500);
}
);
}
console.log('Datos recibidos del servidor'); async function ejecutar() {
console.log('Petición enviada'); let respuesta = await retraso();
console.log(respuesta);
console.log('Fin de la petición');
} }
getDatos(); ejecutar();
``` ```
--- ---
...@@ -46,9 +52,8 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i ...@@ -46,9 +52,8 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i
--- ---
## 3. Métodos HTTP más comunes ## 3. Métodos HTTP más comunes
| Método | Acción | Ejemplo en la aplicación | | Método | Acción | Ejemplo en la aplicación |
| ------ | ------------------- | ------------------------ | |--------|--------|--------------------------|
| GET | Obtener información | Consultar recursos | | GET | Obtener información | Consultar recursos |
| POST | Crear un recurso | Añadir personal | | POST | Crear un recurso | Añadir personal |
| PUT | Actualizar completo | Editar recurso | | PUT | Actualizar completo | Editar recurso |
...@@ -61,7 +66,7 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i ...@@ -61,7 +66,7 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i
JSON es el formato estándar de intercambio de datos. En TypeScript, el JSON recibido se transforma en **objetos tipados**. JSON es el formato estándar de intercambio de datos. En TypeScript, el JSON recibido se transforma en **objetos tipados**.
```ts ```typescript
interface RecursoDTO { interface RecursoDTO {
id: string; id: string;
unidad: string; unidad: string;
...@@ -84,7 +89,7 @@ const obj: RecursoDTO = JSON.parse(json); ...@@ -84,7 +89,7 @@ const obj: RecursoDTO = JSON.parse(json);
`fetch` devuelve una `Promise<Response>`. En TypeScript se tipa explícitamente la respuesta esperada. `fetch` devuelve una `Promise<Response>`. En TypeScript se tipa explícitamente la respuesta esperada.
```ts ```typescript
async function obtenerRecursos(): Promise<RecursoDTO[]> { async function obtenerRecursos(): Promise<RecursoDTO[]> {
const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos'); const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos');
...@@ -110,7 +115,7 @@ obtenerRecursos() ...@@ -110,7 +115,7 @@ obtenerRecursos()
`async/await` permite escribir código asíncrono con estructura secuencial, manteniendo el tipado. `async/await` permite escribir código asíncrono con estructura secuencial, manteniendo el tipado.
```ts ```typescript
async function cargarRecursos(): Promise<void> { async function cargarRecursos(): Promise<void> {
try { try {
const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos'); const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos');
...@@ -128,7 +133,7 @@ cargarRecursos(); ...@@ -128,7 +133,7 @@ cargarRecursos();
## 7. Envío de datos (POST) ## 7. Envío de datos (POST)
```ts ```typescript
async function agregarRecurso(nuevo: RecursoDTO): Promise<RecursoDTO> { async function agregarRecurso(nuevo: RecursoDTO): Promise<RecursoDTO> {
const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos', { const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos', {
method: 'POST', method: 'POST',
...@@ -158,7 +163,7 @@ agregarRecurso({ ...@@ -158,7 +163,7 @@ agregarRecurso({
### PATCH (actualización parcial) ### PATCH (actualización parcial)
```ts ```typescript
async function actualizarRecurso(id: string, datos: Partial<RecursoDTO>): Promise<void> { async function actualizarRecurso(id: string, datos: Partial<RecursoDTO>): Promise<void> {
await fetch(`http://localhost:8080/panacea/rest/recursos/${id}`, { await fetch(`http://localhost:8080/panacea/rest/recursos/${id}`, {
method: 'PATCH', method: 'PATCH',
...@@ -170,7 +175,7 @@ async function actualizarRecurso(id: string, datos: Partial<RecursoDTO>): Promis ...@@ -170,7 +175,7 @@ async function actualizarRecurso(id: string, datos: Partial<RecursoDTO>): Promis
### DELETE (eliminación) ### DELETE (eliminación)
```ts ```typescript
async function eliminarRecurso(id: string): Promise<void> { async function eliminarRecurso(id: string): Promise<void> {
await fetch(`http://localhost:8080/panacea/rest/recursos/${id}`, { await fetch(`http://localhost:8080/panacea/rest/recursos/${id}`, {
method: 'DELETE', method: 'DELETE',
...@@ -185,7 +190,7 @@ async function eliminarRecurso(id: string): Promise<void> { ...@@ -185,7 +190,7 @@ async function eliminarRecurso(id: string): Promise<void> {
CORS es un mecanismo de seguridad del navegador. El servidor debe permitir explícitamente el origen del frontend. CORS es un mecanismo de seguridad del navegador. El servidor debe permitir explícitamente el origen del frontend.
``` ```plaintext
Access-Control-Allow-Origin: http://localhost:4200 Access-Control-Allow-Origin: http://localhost:4200
``` ```
...@@ -201,7 +206,7 @@ Access-Control-Allow-Origin: http://localhost:4200 ...@@ -201,7 +206,7 @@ Access-Control-Allow-Origin: http://localhost:4200
<button id="btnCargar">Cargar recursos</button> <button id="btnCargar">Cargar recursos</button>
``` ```
```ts ```typescript
const btn = document.getElementById('btnCargar') as HTMLButtonElement; const btn = document.getElementById('btnCargar') as HTMLButtonElement;
const lista = document.getElementById('lista') as HTMLUListElement; const lista = document.getElementById('lista') as HTMLUListElement;
......
Clone repository

Índice

  • Inicio
  • Modulo 0. Instalaciones inciales
  • Modulo 1. Sitaxis básica
  • Modulo 2. Importaciones en Javascript
  • Modulo 3. Interacción con el BOM y con el DOM
    • Ejercicios
  • Modulo 4. Uso de servicios y API REST