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
merge authored Feb 02, 2026 by imunnic's avatar imunnic
Show whitespace changes
Inline Side-by-side
Showing with 21 additions and 17 deletions
+21 -17
  • Modulo-4.md Modulo-4.md +21 -17
  • No files found.
Modulo-4.md
View page @ 1d1312b2
...@@ -52,8 +52,13 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i ...@@ -52,8 +52,13 @@ 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
Los métodos HTTP son las herramientas que se disponen desde la API para poder realizar el CRUD(Create, Read, Update, Delete) en la base de datos desde un *frontal web*. Dependiendo de cómo se haya creado la API, estos métodos estarán permitidos o no, requerirán autenticación o no o incluso podrán no existir. Cada uno de estos métodos se puede realizar sobre una ruta concreta o **endpoint** como `http://localhost:8080/panacea/rest/recursos`.
Los más comunes son:
| 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 |
...@@ -64,19 +69,17 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i ...@@ -64,19 +69,17 @@ Las API REST intercambian datos en **formato JSON**, fácilmente mapeables a **i
## 4. Qué es JSON ## 4. Qué es JSON
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**. Es el formato por defecto en el que las **API REST** devuelven los objetos de la **base de datos**.
```typescript ```typescript
interface RecursoDTO { interface RecursoDTO {
id: string; id: string;
unidad: string; uco: string;
tipoRecurso: 'HUMANO' | 'MATERIAL';
} }
const recurso: RecursoDTO = { const recurso: RecursoDTO = {
id: '1hd72h3kw8fhs7dh34', id: '1hd72h3kw8fhs7dh34',
unidad: 'JMAPER', uco: 'JMAPER'
tipoRecurso: 'HUMANO',
}; };
const json: string = JSON.stringify(recurso); const json: string = JSON.stringify(recurso);
...@@ -87,7 +90,7 @@ const obj: RecursoDTO = JSON.parse(json); ...@@ -87,7 +90,7 @@ const obj: RecursoDTO = JSON.parse(json);
## 5. Peticiones HTTP con `fetch` ## 5. Peticiones HTTP con `fetch`
`fetch` devuelve una `Promise<Response>`. En TypeScript se tipa explícitamente la respuesta esperada. El método `fetch` es la forma de solicitar datos a una **API REST** desde el *frontal web*. El método devuelve una `Promise<Response>`. En TypeScript se tipa explícitamente la respuesta esperada. Esta `Promise` es un *promesa* de que en algún momento, tenga o no tenga éxito, va a llegar una respuesta.
```typescript ```typescript
async function obtenerRecursos(): Promise<RecursoDTO[]> { async function obtenerRecursos(): Promise<RecursoDTO[]> {
...@@ -101,7 +104,7 @@ async function obtenerRecursos(): Promise<RecursoDTO[]> { ...@@ -101,7 +104,7 @@ async function obtenerRecursos(): Promise<RecursoDTO[]> {
} }
obtenerRecursos() obtenerRecursos()
.then((recursos: RecursoDTO[]) => { .then((recursos) => {
console.log('Recursos disponibles:', recursos); console.log('Recursos disponibles:', recursos);
}) })
.catch((error: Error) => { .catch((error: Error) => {
...@@ -135,6 +138,7 @@ cargarRecursos(); ...@@ -135,6 +138,7 @@ cargarRecursos();
```typescript ```typescript
async function agregarRecurso(nuevo: RecursoDTO): Promise<RecursoDTO> { async function agregarRecurso(nuevo: RecursoDTO): Promise<RecursoDTO> {
//En el caso de la API, el método POST no se permite sobre recursos, debe hacerse sobre recursosHumanos o recursosMateriales
const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos', { const respuesta = await fetch('http://localhost:8080/panacea/rest/recursos', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
...@@ -150,7 +154,7 @@ async function agregarRecurso(nuevo: RecursoDTO): Promise<RecursoDTO> { ...@@ -150,7 +154,7 @@ async function agregarRecurso(nuevo: RecursoDTO): Promise<RecursoDTO> {
agregarRecurso({ agregarRecurso({
id: '17d263hf84j6sh3h9sjd', id: '17d263hf84j6sh3h9sjd',
unidad: 'JMAPER', uco: 'JMAPER',
tipoRecurso: 'HUMANO', tipoRecurso: 'HUMANO',
}).then((resultado: RecursoDTO) => { }).then((resultado: RecursoDTO) => {
console.log('Recurso agregado:', resultado); console.log('Recurso agregado:', resultado);
...@@ -188,7 +192,7 @@ async function eliminarRecurso(id: string): Promise<void> { ...@@ -188,7 +192,7 @@ async function eliminarRecurso(id: string): Promise<void> {
## 9. CORS (Cross-Origin Resource Sharing) ## 9. CORS (Cross-Origin Resource Sharing)
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 para no tener problemas. Esto quiere decir que si, por ejemplo, el puerto desde el que se realizan las peticiones del *frontal web* (véase 5000, como es por defecto el de LiveServer), no se podrá tener acceso a la **API REST** y por tanto tampoco a los datos.
```plaintext ```plaintext
Access-Control-Allow-Origin: http://localhost:4200 Access-Control-Allow-Origin: http://localhost:4200
...@@ -217,7 +221,7 @@ btn.addEventListener('click', async (): Promise<void> => { ...@@ -217,7 +221,7 @@ btn.addEventListener('click', async (): Promise<void> => {
recursos.forEach((r: RecursoDTO) => { recursos.forEach((r: RecursoDTO) => {
const li = document.createElement('li'); const li = document.createElement('li');
li.textContent = `${r.tipoRecurso}: ${r.unidad}`; li.textContent = `${r.tipoRecurso}: ${r.uco}`;
lista.appendChild(li); lista.appendChild(li);
}); });
} catch { } catch {
......
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