Introducción

En este tema, exploraremos las APIs RESTful, que son una de las formas más comunes de comunicación entre microservicios. REST (Representational State Transfer) es un estilo de arquitectura que utiliza HTTP para la comunicación entre sistemas. Las APIs RESTful son conocidas por su simplicidad y escalabilidad, lo que las hace ideales para aplicaciones basadas en microservicios.

Conceptos Clave de REST

Antes de profundizar en las APIs RESTful, es importante entender algunos conceptos clave:

  • Recursos: En REST, todo es un recurso. Un recurso puede ser cualquier cosa que se pueda nombrar, como un usuario, un producto, un pedido, etc.
  • URI (Uniform Resource Identifier): Es la dirección única de un recurso. Por ejemplo, /users/123 podría ser la URI de un usuario con el ID 123.
  • Métodos HTTP: Los métodos HTTP (GET, POST, PUT, DELETE) se utilizan para realizar operaciones sobre los recursos.
  • Representaciones: Los recursos se representan en diferentes formatos, como JSON o XML, que se transfieren entre el cliente y el servidor.

Métodos HTTP

A continuación, se muestra una tabla con los métodos HTTP más comunes y sus usos en una API RESTful:

Método Descripción Ejemplo de URI
GET Recupera una representación de un recurso /users/123
POST Crea un nuevo recurso /users
PUT Actualiza un recurso existente /users/123
DELETE Elimina un recurso /users/123
PATCH Actualiza parcialmente un recurso /users/123

Ejemplo Práctico

Vamos a crear una API RESTful simple para gestionar usuarios. Utilizaremos Node.js y Express para este ejemplo.

Paso 1: Configuración del Proyecto

Primero, crea una nueva carpeta para tu proyecto y navega a ella:

mkdir user-api
cd user-api

Inicializa un nuevo proyecto de Node.js:

npm init -y

Instala Express:

npm install express

Paso 2: Creación del Servidor

Crea un archivo index.js y añade el siguiente código para configurar el servidor:

const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

Paso 3: Definición de Rutas

Añade las rutas para gestionar los usuarios:

let users = [];

app.get('/users', (req, res) => {
  res.json(users);
});

app.post('/users', (req, res) => {
  const user = req.body;
  users.push(user);
  res.status(201).json(user);
});

app.get('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (user) {
    res.json(user);
  } else {
    res.status(404).send('User not found');
  }
});

app.put('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (user) {
    Object.assign(user, req.body);
    res.json(user);
  } else {
    res.status(404).send('User not found');
  }
});

app.delete('/users/:id', (req, res) => {
  users = users.filter(u => u.id !== parseInt(req.params.id));
  res.status(204).send();
});

Paso 4: Prueba de la API

Puedes utilizar herramientas como Postman o cURL para probar tu API. Aquí hay algunos ejemplos de comandos cURL:

  • Obtener todos los usuarios:

    curl -X GET http://localhost:3000/users
    
  • Crear un nuevo usuario:

    curl -X POST -H "Content-Type: application/json" -d '{"id":1,"name":"John Doe"}' http://localhost:3000/users
    
  • Obtener un usuario por ID:

    curl -X GET http://localhost:3000/users/1
    
  • Actualizar un usuario:

    curl -X PUT -H "Content-Type: application/json" -d '{"name":"Jane Doe"}' http://localhost:3000/users/1
    
  • Eliminar un usuario:

    curl -X DELETE http://localhost:3000/users/1
    

Ejercicio Práctico

Ejercicio 1: Añadir Validación

Añade validación para asegurarte de que los datos del usuario son correctos antes de añadirlos a la lista. Por ejemplo, asegúrate de que el campo name no esté vacío.

Solución

Puedes utilizar la biblioteca express-validator para añadir validación. Primero, instálala:

npm install express-validator

Luego, modifica la ruta POST para incluir la validación:

const { body, validationResult } = require('express-validator');

app.post('/users', [
  body('name').notEmpty().withMessage('Name is required')
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }

  const user = req.body;
  users.push(user);
  res.status(201).json(user);
});

Conclusión

En esta sección, hemos aprendido los conceptos básicos de las APIs RESTful y cómo implementarlas utilizando Node.js y Express. Hemos cubierto los métodos HTTP más comunes y cómo utilizarlos para gestionar recursos. Además, hemos visto un ejemplo práctico de una API de gestión de usuarios y cómo añadir validación a nuestras rutas.

En el próximo tema, exploraremos la mensajería asíncrona, que es otra forma importante de comunicación entre microservicios.

© Copyright 2024. Todos los derechos reservados