Tabla de Contenidos

09. APIs REST y Protocolo HTTP

En la arquitectura por capas, la capa de presentación (Controller) necesita un mecanismo para comunicarse con el exterior. En aplicaciones web y sistemas distribuidos, este intercambio se realiza mediante APIs REST sobre el protocolo HTTP (o HTTPS para comunicaciones cifradas).

1. El protocolo HTTP

La comunicación web sigue el modelo cliente-servidor: el cliente realiza una Petición (Request) y el servidor procesa y devuelve una Respuesta (Response).

Anatomía de una URL / URI

Para localizar un recurso en la red, el cliente utiliza una URL (Uniform Resource Locator), formada por:

2. Servicios REST y Diseño de Endpoints

REST (REpresentational State Transfer) es un estilo de arquitectura para diseñar servicios web centrados en recursos.

Un Endpoint es una URL específica expuesta por el servidor a la que el cliente envía peticiones para interactuar con un recurso.

Buenas prácticas en el diseño de Endpoints

3. Métodos HTTP y transmisión de datos

Cada petición HTTP utiliza un verbo o método que define la intención de la operación:

Método Acción ¿Dónde viajan los datos? Descripción
GET Lectura URL (Query / Path Params) Consulta uno o varios recursos. No debe incluir cuerpo (body).
POST Creación Cuerpo (Request Body) Crea un nuevo recurso. El servidor asigna el ID.
PUT Reemplazo Cuerpo (Request Body) Reemplaza un recurso existente por completo.
PATCH Modificación parcial Cuerpo (Request Body) Actualiza solo los campos especificados del recurso.
DELETE Eliminación URL (Path Param) Elimina el recurso especificado.

4. Formato de Intercambio: JSON

JSON (JavaScript Object Notation) es el formato estándar para enviar y recibir información en APIs REST debido a su ligereza y facilidad de lectura tanto para humanos como para máquinas.

Cuando el controlador recibe o envía datos, la librería del servidor (parser) convierte automáticamente el texto JSON en nuestras clases Java Record (DTOs) y viceversa.

Objeto JSON simple (Mapea con un DTO)

{
    "isbn": "978-84-376-0494-7",
    "title": "Don Quijote",
    "basePrice": 18.50
}

Colección JSON (Mapea con un List)

[
    {
        "isbn": "978-84-376-0494-7",
        "title": "Don Quijote",
        "basePrice": 18.50
    },
    {
        "isbn": "978-84-204-1214-6",
        "title": "Cien años de soledad",
        "basePrice": 21.00
    }
]

5. Códigos de Estado HTTP

El servidor debe incluir siempre un código de estado numérico en la respuesta para indicar el resultado de la operación: