← Volver a los artículos
APIs e integración

REST API: más que una palabra de moda. Es el lenguaje que hablan tus aplicaciones.

Una guía accesible para principiantes sobre REST API: qué es, por qué es importante, los 6 principios fundamentales y un ejemplo práctico completo con peticiones y respuestas HTTP reales.

REST API: más que una palabra de moda. Es el lenguaje que hablan tus aplicaciones.
Artículo destacado ↗

REST API: más que una palabra de moda. Es el lenguaje que hablan tus aplicaciones.

A menudo escuchas a desarrolladores o ves en ofertas de trabajo frases como «integración vía REST API» o «escritura de servicios RESTful». Pero ¿qué significa realmente este término? Si no eres un especialista técnico o estás comenzando tu camino en la informática, puede parecer magia compleja.

En realidad, REST API es un concepto fundamental que permite a diferentes programas comunicarse entre sí a través de Internet. Analicemos qué es, por qué es necesario y sobre qué reglas se construye.

¿Qué es una REST API? Una analogía simple

Imagina un restaurante.

  • Tú (el cliente) eres una aplicación (por ejemplo, el frontend de tu sitio web o una app móvil).
  • La cocina es otra aplicación (tu servidor o un servicio de terceros) donde se almacenan datos y lógica.
  • El camarero es la REST API.

No entras a la cocina para hacer un pedido o verificar si un plato está disponible. Hablas con el camarero. El camarero toma tu pedido (la petición), lo lleva a la cocina y luego te trae el plato preparado (la respuesta).

REST API (Representational State Transfer Application Programming Interface) es un conjunto de reglas y convenciones que permiten a una aplicación solicitar datos o acciones a otra aplicación a través de Internet. La palabra clave aquí es «State Transfer» (transferencia de estado). Esencialmente, el cliente solicita al servidor una «representación» (por ejemplo, en formato JSON) de algún recurso (un usuario, un producto, un pedido).

¿Por qué es necesario? 3 razones clave

  1. Separación de responsabilidades. El frontend (lo que ve el usuario) y el backend (lógica y base de datos) pueden desarrollarse y escalarse de forma independiente. Puedes crear una app para iOS, Android y un sitio web, y todos se comunicarán con el mismo backend a través de la misma API.
  2. Integración con servicios externos. ¿Quieres añadir pagos vía Stripe, enviar notificaciones vía Telegram u obtener datos meteorológicos? No construyes tu propio procesamiento de pagos o estación meteorológica; usas una API lista de un servicio de terceros.
  3. Universalidad. REST se apoya en los estándares HTTP, comprendidos por todos los dispositivos y lenguajes de programación. Esto lo convierte en la «lingua franca» ideal para la web.

6 principios de una RESTful API (Las reglas para nuestro «camarero»)

Para que una API sea considerada RESTful, debe seguir varios principios clave:

  1. Interfaz uniforme. Este es el principio más importante. Todas las peticiones a la API deben estar estandarizadas.
  2. Sin estado. Cada petición del cliente al servidor debe contener toda la información necesaria para comprender y procesar la petición. El servidor no debe recordar nada sobre peticiones anteriores del mismo cliente. Las sesiones y la autorización a menudo se implementan usando tokens (por ejemplo, JWT) que se envían con cada petición.
  3. Cacheabilidad. Las respuestas del servidor deben indicar explícitamente si pueden ser cacheadas y por cuánto tiempo. Esto mejora drásticamente el rendimiento al reducir la carga en el servidor.
  4. Arquitectura cliente-servidor. Una clara separación de responsabilidades: el cliente es responsable de la interfaz de usuario y el servidor de almacenar datos y la lógica de negocio. Esto les permite evolucionar de forma independiente.
  5. Sistema en capas. Puede haber múltiples capas entre el cliente y el servidor (balanceadores de carga, proxies, gateways). El cliente normalmente no puede saber si está conectado directamente al servidor final o a un intermediario.
  6. Code on Demand (Opcional). El servidor puede extender o personalizar temporalmente la funcionalidad de un cliente transfiriendo código ejecutable (por ejemplo, JavaScript). Este principio se usa con menos frecuencia.

Un ejemplo en vivo: gestionar una lista de libros

Supongamos que tenemos una API para una biblioteca. Nuestro recurso es Book.

  • Obtener la lista de todos los libros:
  • Obtener el libro con ID=1:
  • Crear un nuevo libro:
  • Actualizar el libro con ID=2:
  • Eliminar el libro con ID=1:

Observa cómo el método HTTP y la URL juntos definen qué queremos hacer, mientras que el cuerpo de la petición (para POST/PUT) contiene los detalles.

Ejemplo:

1. GET /articles — Obtener la colección de artículos

Se utiliza para recuperar una lista de todos los artículos con soporte de paginación.

Petición:

GET /v1/articles?page=1&limit=10 Host: api.myblog.com Accept: application/json

Respuesta:

  • Código de estado: 200 OK
  • Cuerpo: Devuelve un array de artículos y metadatos de paginación. Esto sigue el principio HATEOAS.
{ "data": [ { "id": "a1b2c3", "title": "What is RESTful API", "summary": "Simple explanation for everyone", "author": "John Doe", "createdAt": "2023-10-25T10:30:00Z", "_links": { "self": { "href": "/v1/articles/a1b2c3" }, "author": { "href": "/v1/users/john-doe" } } }, { "id": "d4e5f6", "title": "Introduction to Docker", "summary": "Containerization for beginners", "author": "Jane Smith", "createdAt": "2023-10-24T15:45:00Z", "_links": { "self": { "href": "/v1/articles/d4e5f6" }, "author": { "href": "/v1/users/jane-smith" } } } ], "_meta": { "page": 1, "limit": 10, "totalPages": 5, "totalCount": 48 }, "_links": { "self": { "href": "/v1/articles?page=1&limit=10" }, "next": { "href": "/v1/articles?page=2&limit=10" }, "last": { "href": "/v1/articles?page=5&limit=10" } } }

2. GET /articles/{id} — Obtener un solo artículo

Se utiliza para recuperar información completa sobre un artículo específico.

Petición:

GET /v1/articles/a1b2c3 Host: api.myblog.com Accept: application/json

Respuesta:

  • Código de estado: 200 OK
  • Cuerpo: Devuelve la representación completa del recurso.
{ "data": { "id": "a1b2c3", "title": "What is RESTful API", "content": "Full article text... REST API is not just a buzzword...", "summary": "Simple explanation for everyone", "author": "John Doe", "status": "published", "tags": ["api", "rest", "programming"], "createdAt": "2023-10-25T10:30:00Z", "updatedAt": "2023-10-26T09:15:00Z", "_links": { "self": { "href": "/v1/articles/a1b2c3" }, "author": { "href": "/v1/users/john-doe" }, "comments": { "href": "/v1/articles/a1b2c3/comments" } } } }

3. POST /articles — Crear un nuevo artículo

Se utiliza para crear un nuevo recurso. El servidor genera un nuevo ID.

Petición:

  • Importante: El cliente no envía id, createdAt, etc. El servidor gestiona estos campos.
POST /v1/articles Host: api.myblog.com Content-Type: application/json X-API-Key: your-secret-api-key-12345 { "title": "New Article About Microservices", "content": "Text of the new article...", "summary": "Brief description of microservice architecture", "tags": ["microservices", "architecture"], "status": "draft" }

Respuesta:

  • Código de estado: 201 Created
  • Encabezado Location: Apunta a la URL del recurso creado.
  • Cuerpo: Devuelve el recurso creado.
HTTP/1.1 201 Created Location: /v1/articles/g7h8i9 Content-Type: application/json { "data": { "id": "g7h8i9", "title": "New Article About Microservices", "content": "Text of the new article...", "summary": "Brief description of microservice architecture", "author": "CurrentAuthenticatedUser", "status": "draft", "tags": ["microservices", "architecture"], "createdAt": "2023-10-27T14:20:00Z", "updatedAt": "2023-10-27T14:20:00Z", "_links": { "self": { "href": "/v1/articles/g7h8i9" }, "author": { "href": "/v1/users/currentauthenticateduser" } } } }

4. PUT /articles/{id} — Actualización completa del artículo

Se utiliza para el reemplazo completo del recurso. El cliente debe enviar todos los campos.

Petición:

PUT /v1/articles/g7h8i9 Host: api.myblog.com Content-Type: application/json X-API-Key: your-secret-api-key-12345 { "title": "Updated Title About Microservices", "content": "Completely updated article text...", "summary": "New brief description", "tags": ["microservices", "cloud", "docker"], "status": "published" }

Respuesta:

  • Código de estado: 200 OK
  • Cuerpo: Devuelve la representación completa del recurso actualizado.
{ "data": { "id": "g7h8i9", "title": "Updated Title About Microservices", "content": "Completely updated article text...", "summary": "New brief description", "author": "CurrentAuthenticatedUser", "status": "published", "tags": ["microservices", "cloud", "docker"], "createdAt": "2023-10-27T14:20:00Z", "updatedAt": "2023-10-27T16:45:00Z", "_links": { "self": { "href": "/v1/articles/g7h8i9" }, "author": { "href": "/v1/users/currentauthenticateduser" } } } }

5. PATCH /articles/{id} — Actualización parcial del artículo

Se utiliza para actualizar solo campos específicos. Más eficiente que PUT.

Petición:

PATCH /v1/articles/g7h8i9 Host: api.myblog.com Content-Type: application/json X-API-Key: your-secret-api-key-12345 { "status": "published", "tags": ["microservices", "cloud-native", "kubernetes"] }

Respuesta:

  • Código de estado: 200 OK
  • Cuerpo: Devuelve la representación actualizada del recurso.
{ "data": { "id": "g7h8i9", "title": "Updated Title About Microservices", "content": "Completely updated article text...", "summary": "New brief description", "author": "CurrentAuthenticatedUser", "status": "published", "tags": ["microservices", "cloud-native", "kubernetes"], "createdAt": "2023-10-27T14:20:00Z", "updatedAt": "2023-10-27T17:50:00Z", "_links": { "self": { "href": "/v1/articles/g7h8i9" }, "author": { "href": "/v1/users/currentauthenticateduser" } } } }

6. DELETE /articles/{id} — Eliminar un artículo

Se utiliza para eliminar un recurso.

Petición:

DELETE /v1/articles/g7h8i9 Host: api.myblog.com X-API-Key: your-secret-api-key-12345

Respuesta:

  • Código de estado: 204 No Content
  • Cuerpo: Ninguno.
HTTP/1.1 204 No Content

Manejo de errores (siguiendo los principios REST)

Una RESTful API siempre debe devolver códigos de estado HTTP y mensajes de error significativos.

Ejemplo: GET /articles/invalid-id-999

Respuesta:

  • Código de estado: 404 Not Found
  • Cuerpo:
{ "error": { "code": "RESOURCE_NOT_FOUND", "message": "Article with identifier 'invalid-id-999' was not found.", "details": "Please check the identifier and try again." } }

Ejemplo: POST /articles con datos inválidos

Petición:

{ "title": "" }

Respuesta:

  • Código de estado: 422 Unprocessable Entity (o 400 Bad Request)
  • Cuerpo:
{ "error": { "code": "VALIDATION_ERROR", "message": "Request data failed validation.", "details": [ { "field": "title", "error": "Field 'title' cannot be empty." } ] } }

Resumen del cumplimiento de los principios REST:

  1. Interfaz uniforme: Todos los endpoints trabajan con el recurso articles a través de métodos HTTP estándar. Las respuestas tienen un formato consistente (data, _meta, _links).
  2. Sin estado: Cada petición contiene todo el contexto necesario (por ejemplo, API Key).
  3. Cacheabilidad: Las peticiones GET pueden ser cacheadas (implícito por el estado 200), en una API real podrías añadir encabezados Cache-Control.
  4. Arquitectura cliente-servidor: Clara separación: el cliente envía peticiones, el servidor gestiona los datos de los artículos.
  5. Sistema en capas: El cliente no sabe si detrás de api.myblog.com hay un solo servidor o todo un clúster.
  6. Code on Demand (opcional): No se usa en este ejemplo.
  7. HATEOAS: La presencia de _links en las respuestas permite al cliente descubrir dinámicamente las acciones disponibles, lo cual es una característica clave de una REST API madura.

Resumen

REST API no es solo una tecnología; es un estilo arquitectónico que se ha convertido en el estándar de facto para construir servicios web. Su poder radica en su simplicidad, previsibilidad y fiabilidad, construidas sobre el protocolo HTTP refinado durante décadas.

Comprender estos principios es útil no solo para desarrolladores, sino también para gerentes de proyecto, product managers y propietarios de negocios para comunicarse eficazmente con equipos técnicos y entender cómo se construyen los productos digitales modernos.

¿Con qué frecuencia usas REST APIs en tus proyectos? ¿Has encontrado casos de integración interesantes? ¡Compártelos en los comentarios!

Tecnologías y temas

Etiquetas del artículo

No hay artículos que coincidan con estos filtros.

¿Tienes un proyecto o una idea para discutir?

Hablemos ↗