Entornos de desarrollo

1º DAM/DAW - Curso 2026-2027

User Tools

Site Tools


apuntes:backend_frontend

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:backend_frontend [2026/09/29 09:51] – [CRUD Completo Backend] Santiago Faciapuntes:backend_frontend [2026/10/28 22:52] (current) – [Backend: API] Santiago Faci
Line 2: Line 2:
  
 <figure> <figure>
-{{ frontendbackend.jpg }}+{{ frontendbackend.jpg?450 }}
 <caption>Frontend vs Backend (Fuente: https://ecdisis.com/que-es-frontend-y-backend/)</caption> <caption>Frontend vs Backend (Fuente: https://ecdisis.com/que-es-frontend-y-backend/)</caption>
 </figure> </figure>
Line 116: Line 116:
  
 app.get('/cities', (req, res) => { app.get('/cities', (req, res) => {
-    res.json(cities);+    return res.json(cities);
 }); });
  
 app.get('/cities/:city', (req, res) => { app.get('/cities/:city', (req, res) => {
     const city = req.params.city;     const city = req.params.city;
-    res.json(cities[city]);+    return res.json(cities[city]);
 }); });
  
Line 292: Line 292:
  
 app.get('/cities', (req, res) => { app.get('/cities', (req, res) => {
-    res.status(200).json(cities);+    return res.status(200).json(cities);
 }); });
  
 app.get('/cities/:city', (req, res) => { app.get('/cities/:city', (req, res) => {
     const city = req.params.city;     const city = req.params.city;
-    res.status(200).json(cities[city]);+    return res.status(200).json(cities[city]);
 }); });
  
Line 310: Line 310:
     };     };
  
-    res.status(201).json(cities[name]);+    return res.status(201).json(cities[name]);
 }); });
  
Line 323: Line 323:
     delete cities[name];     delete cities[name];
  
-    res.status(204).end();+    return res.status(204).end();
 }); });
  
Line 336: Line 336:
     };     };
  
-    res.status(200).json(cities[name]);+    return res.status(200).json(cities[name]);
 }); });
  
Line 356: Line 356:
 . . . . . .
 if (cities[name] === undefined) { if (cities[name] === undefined) {
-    res.status(404).json({+    return res.status(404).json({
         error: 'No se ha podido encontrar la ciudad'         error: 'No se ha podido encontrar la ciudad'
     });     });
Line 373: Line 373:
 const population = req.body.population; const population = req.body.population;
 if (typeof population !== 'number' || population <= 0) { if (typeof population !== 'number' || population <= 0) {
-    res.status(400).json({+    return res.status(400).json({
         error: 'population debe ser un número mayor que cero'         error: 'population debe ser un número mayor que cero'
     });     });
Line 419: Line 419:
  
 app.get('/cities', (req, res) => { app.get('/cities', (req, res) => {
-    res.json(cities);+    return res.json(cities);
 }); });
  
 app.get('/cities/:city', (req, res) => { app.get('/cities/:city', (req, res) => {
     const city = req.params.city;     const city = req.params.city;
-    res.json(cities[city]);+    return res.json(cities[city]);
 }); });
  
Line 437: Line 437:
     };     };
  
-    res.status(201).end();+    return res.status(201).end();
 }); });
  
Line 620: Line 620:
     const data = await findAllCities();     const data = await findAllCities();
  
-    res.status(200).json(data);+    return res.status(200).json(data);
 }); });
  
Line 627: Line 627:
     const data = await findCity(req.params.city);     const data = await findCity(req.params.city);
  
-    res.status(200).json(data);+    return res.status(200).json(data);
 }); });
  
Line 634: Line 634:
     await registerCity(req.body.name, req.body.population, req.body.altitude);     await registerCity(req.body.name, req.body.population, req.body.altitude);
  
-    res.status(201).json({});+    return res.status(201).json({});
 }); });
  
Line 641: Line 641:
     await modifyCity(req.params.city, req.body.population, req.body.altitude);     await modifyCity(req.params.city, req.body.population, req.body.altitude);
  
-    res.status(204).json({});+    return res.status(204).json({});
 }); });
  
Line 648: Line 648:
     await removeCity(req.params.city);     await removeCity(req.params.city);
  
-    res.status(204).json({})+    return res.status(204).json({})
 }); });
  
Line 1005: Line 1005:
       - El campo sala solamente podrá ser un valor entre 1 y 9 (que son las salas que tiene el cine)       - El campo sala solamente podrá ser un valor entre 1 y 9 (que son las salas que tiene el cine)
   - Prepara una colección Postman que permita probar todas las operaciones desarrolladas en tu API de peliculas. No olvides preparar requests para todos los casos posibles   - Prepara una colección Postman que permita probar todas las operaciones desarrolladas en tu API de peliculas. No olvides preparar requests para todos los casos posibles
 +  - ¿Qué ocurre cuando, al registrar una película, se envian campos que no existen? ¿Se debería fallar? ¿Qué debería ocurrir con esa información de más que se envía? 
 +  - ¿Te has fijado en el patrón que sigue los códigos de error que has implementado en las operaciones del backend desarrollado? ¿Siguen alguna lógica? (Pista: https://datos.codeandcoke.com/apuntes:http) 
 +  - Imagina que algo falla, de forma inesperada, cuando se está ejecutando el código del backend. ¿Qué error se debería devolver? (Pista: https://datos.codeandcoke.com/apuntes:http) 
 +  - ¿Qué debería hacer el backend si alguien está invocando las operaciones de forma abusiva? (Pista: https://datos.codeandcoke.com/apuntes:http) 
 +  - Añade lo necesario para que también se puedan realizar operaciones similares pero con actores (de los que se almacene nombre, apellidos, pais de origen y si alguna vez ganaron un Oscar) 
 +  - ¿Cómo podríamos hacer que peliculas y actores estuvieran relacionadas? La idea sería saber qué actores han actuado en una determinada película, por ejemplo
 ====== Proyectos de ejemplo ====== ====== Proyectos de ejemplo ======
  
apuntes/backend_frontend.1790675464.txt.gz · Last modified: by Santiago Faci