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

  1. 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).
  2. 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:

mkdir api-server
cd api-server
npm init -y
npm install 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

  1. Importación y Configuración de Express:

    const express = require('express');
    const app = express();
    const port = 3000;
    
  2. Middleware para Parsear JSON:

    app.use(express.json());
    

    Esto permite que el servidor entienda y procese datos JSON en el cuerpo de las peticiones.

  3. 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.

  4. 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.

  5. 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.

  6. 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

  1. Ejercicio:

    • Añade una nueva ruta GET a /resources/:id que devuelva un recurso específico basado en el ID proporcionado en la URL.
  2. 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

  1. 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());.
  2. 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.

© Copyright 2024. Todos los derechos reservados