En este tema, aprenderemos cómo manejar peticiones y respuestas en una API RESTful. Entenderemos los conceptos clave y veremos ejemplos prácticos para implementar estos manejos en un servidor básico.
Conceptos Clave
-
Peticiones HTTP: Las peticiones HTTP son solicitudes enviadas por el cliente al servidor. Contienen:
- Método HTTP: GET, POST, PUT, DELETE, etc.
- URI: La dirección del recurso solicitado.
- Headers: Información adicional sobre la petición.
- Cuerpo: Datos enviados en la petición (principalmente en POST y PUT).
-
Respuestas HTTP: Las respuestas HTTP son las respuestas enviadas por el servidor al cliente. Contienen:
- Código de estado: Indica el resultado de la solicitud (200, 404, 500, etc.).
- Headers: Información adicional sobre la respuesta.
- Cuerpo: Datos enviados en la respuesta.
Ejemplo Práctico
Vamos a implementar un servidor básico utilizando Node.js y Express para manejar peticiones y respuestas.
Configuración del Entorno
Primero, asegúrate de tener Node.js y npm instalados. Luego, crea un nuevo proyecto y añade Express:
Creación del Servidor Básico
Crea un archivo server.js
y añade el siguiente código:
const express = require('express'); const app = express(); const port = 3000; // Middleware para parsear JSON app.use(express.json()); // Ruta GET para obtener todos los recursos app.get('/resources', (req, res) => { res.status(200).json({ message: 'Lista de recursos' }); }); // Ruta POST para crear un nuevo recurso app.post('/resources', (req, res) => { const newResource = req.body; res.status(201).json({ message: 'Recurso creado', data: newResource }); }); // Ruta PUT para actualizar un recurso existente app.put('/resources/:id', (req, res) => { const resourceId = req.params.id; const updatedResource = req.body; res.status(200).json({ message: `Recurso ${resourceId} actualizado`, data: updatedResource }); }); // Ruta DELETE para eliminar un recurso app.delete('/resources/:id', (req, res) => { const resourceId = req.params.id; res.status(200).json({ message: `Recurso ${resourceId} eliminado` }); }); app.listen(port, () => { console.log(`Servidor escuchando en http://localhost:${port}`); });
Explicación del Código
-
Importación y Configuración de Express:
const express = require('express'); const app = express(); const port = 3000;
-
Middleware para Parsear JSON:
app.use(express.json());
Esto permite que el servidor entienda y procese datos JSON en el cuerpo de las peticiones.
-
Manejo de Peticiones GET:
app.get('/resources', (req, res) => { res.status(200).json({ message: 'Lista de recursos' }); });
Esta ruta maneja peticiones GET a
/resources
y responde con un mensaje y un código de estado 200. -
Manejo de Peticiones POST:
app.post('/resources', (req, res) => { const newResource = req.body; res.status(201).json({ message: 'Recurso creado', data: newResource }); });
Esta ruta maneja peticiones POST a
/resources
, crea un nuevo recurso con los datos enviados en el cuerpo de la petición y responde con un mensaje y un código de estado 201. -
Manejo de Peticiones PUT:
app.put('/resources/:id', (req, res) => { const resourceId = req.params.id; const updatedResource = req.body; res.status(200).json({ message: `Recurso ${resourceId} actualizado`, data: updatedResource }); });
Esta ruta maneja peticiones PUT a
/resources/:id
, actualiza el recurso con el ID especificado y responde con un mensaje y un código de estado 200. -
Manejo de Peticiones DELETE:
app.delete('/resources/:id', (req, res) => { const resourceId = req.params.id; res.status(200).json({ message: `Recurso ${resourceId} eliminado` }); });
Esta ruta maneja peticiones DELETE a
/resources/:id
, elimina el recurso con el ID especificado y responde con un mensaje y un código de estado 200.
Ejercicio Práctico
-
Ejercicio:
- Añade una nueva ruta GET a
/resources/:id
que devuelva un recurso específico basado en el ID proporcionado en la URL.
- Añade una nueva ruta GET a
-
Solución:
app.get('/resources/:id', (req, res) => { const resourceId = req.params.id; res.status(200).json({ message: `Recurso ${resourceId} obtenido` }); });
Errores Comunes y Consejos
-
No Parsear JSON:
- Error: El servidor no puede leer los datos JSON enviados en el cuerpo de la petición.
- Solución: Asegúrate de usar
app.use(express.json());
.
-
No Manejar Errores:
- Error: El servidor no responde adecuadamente a errores.
- Solución: Implementa un manejo de errores adecuado para capturar y responder a errores.
Resumen
En esta sección, hemos aprendido cómo manejar peticiones y respuestas en una API RESTful utilizando Node.js y Express. Hemos cubierto los conceptos clave de las peticiones y respuestas HTTP y hemos implementado un servidor básico con rutas para manejar GET, POST, PUT y DELETE. Además, hemos visto un ejercicio práctico para reforzar los conceptos aprendidos.
Curso de REST API: Principios de Diseño y Desarrollo de APIs RESTful
Módulo 1: Introducción a las APIs RESTful
Módulo 2: Diseño de APIs RESTful
- Principios de diseño de APIs RESTful
- Recursos y URIs
- Métodos HTTP
- Códigos de estado HTTP
- Versionado de APIs
- Documentación de APIs
Módulo 3: Desarrollo de APIs RESTful
- Configuración del entorno de desarrollo
- Creación de un servidor básico
- Manejo de peticiones y respuestas
- Autenticación y autorización
- Manejo de errores
- Pruebas y validación
Módulo 4: Buenas Prácticas y Seguridad
- Buenas prácticas en el diseño de APIs
- Seguridad en APIs RESTful
- Rate limiting y throttling
- CORS y políticas de seguridad
Módulo 5: Herramientas y Frameworks
- Postman para pruebas de APIs
- Swagger para documentación
- Frameworks populares para APIs RESTful
- Integración continua y despliegue