¿Qué es una API REST?

Definición de API REST

Una API REST es una API que cumple los principios de diseño del estilo arquitectónico REST. En esencia, REST se basa en la idea de los recursos, que pueden ser cualquier fragmento de información, como un usuario, un producto, un documento o una colección de elementos. 

Una API REST proporciona una forma de que una aplicación cliente acceda a estos recursos y los manipule mediante un conjunto predefinido de operaciones sin reconocimiento de estado.

¿Cómo funciona una API REST?

1. El cliente envía una solicitud

Una aplicación cliente (como una aplicación móvil, un navegador web u otro servidor) inicia una solicitud a la API para realizar una acción. Esta solicitud se envía a una URL específica e incluye un método HTTP, encabezados con metadatos y, a veces, un cuerpo de solicitud con datos.

2. El servidor procesa la solicitud

El servidor recibe y valida la solicitud, y confirma que el cliente está autenticado y autorizado para realizar la acción solicitada. A continuación, procesa la solicitud, lo que podría implicar recuperar datos de una base de datos, crear un nuevo recurso o actualizar uno que ya exista.

3. El servidor envía una respuesta

Tras procesar la solicitud, el servidor envía una respuesta al cliente. Esta respuesta incluye un código de estado HTTP que indica el resultado (por ejemplo, 200 OK si la solicitud se ha realizado correctamente, 404 No encontrado si el recurso no existe o 401 No autorizado si hay problemas de seguridad), junto con los datos solicitados en el cuerpo de la respuesta.

4. Transferencia de datos

Los datos que se transfieren entre el cliente y el servidor son una "representación" del estado del recurso. JSON (JavaScript Object Notation) es el formato más común para estos datos porque es ligero, legible por humanos y fácil de analizar para los lenguajes de programación.

Arquitectura y componentes de la API REST

La potencia y la escalabilidad de REST provienen de un conjunto de restricciones arquitectónicas que guían su diseño. Un sistema que se ajusta a estas restricciones se considera "RESTful".

Diagrama del modelo de la API REST

Recursos

Un recurso es un concepto fundamental en REST. Es un objeto con un tipo, datos asociados, relaciones con otros recursos y un conjunto de métodos que operan en él. Por ejemplo, en una API de comercio electrónico, un "producto" o un "cliente" serían recursos.

URIs (identificadores uniformes de recursos)

Cada recurso se identifica de forma única mediante un URI. Una API bien diseñada utiliza URIs limpios, descriptivos y coherentes para identificar sus recursos. Por ejemplo, /users podría identificar una colección de usuarios y /users/123 identificaría a un usuario concreto con el ID 123.

Manifestaciones

Un cliente no interactúa directamente con el recurso, sino con una representación de ese recurso. El formato de representación más común es JSON, pero también se pueden usar otros como XML o HTML. Esto proporciona una forma flexible de representar el estado de un recurso.

Sin reconocimiento del estado

Cada solicitud que un cliente envía al servidor debe contener toda la información que el servidor necesita para entender y procesar la solicitud. El servidor no almacena ningún contexto de cliente ni estado de sesión entre solicitudes. Esta restricción hace que las APIs REST sean muy escalables, ya que cualquier servidor puede gestionar cualquier solicitud.

Arquitectura cliente-servidor

El cliente y el servidor están separados, y la API actúa como interfaz entre ellos. Esta separación de responsabilidades permite que la aplicación del lado del cliente y la aplicación del lado del servidor evolucionen de forma independiente.

Interfaz uniforme

REST requiere una interfaz uniforme y coherente entre el cliente y el servidor. Esto se consigue mediante el uso de métodos HTTP estándar, URIs para la identificación de recursos e hipermedia como motor del estado de la aplicación (HATEOAS).

Almacenabilidad en caché

Las respuestas del servidor deben definirse como almacenables en caché o no almacenables en caché. Cuando una respuesta se puede almacenar en caché, un cliente o un intermediario pueden reutilizarla para solicitudes idénticas posteriores, lo que puede mejorar significativamente el rendimiento y reducir la carga del servidor.

Sistema por capas

Un cliente conectado a una API REST no suele poder saber si está conectado directamente al servidor final o a un intermediario. Se pueden introducir servidores intermediarios, como pasarelas de APIs o balanceadores de carga, en la arquitectura para mejorar la escalabilidad, la seguridad y el rendimiento.

Prácticas recomendadas para APIs REST

Los URIs deben representar recursos, por lo que deben usar sustantivos (plural para colecciones, singular o un ID para un elemento específico), no verbos. Por ejemplo, usa /users para representar a todos los usuarios, no /getAllUsers.

Usa los verbos HTTP estándar para representar acciones: GET para recuperar, POST para crear, PUT para actualizar y DELETE para eliminar. De esta forma, se crea una interfaz predecible y coherente.

Un principio clave de REST es que una respuesta debe incluir enlaces a otras acciones o recursos relacionados. De esta forma, el cliente puede navegar por la API de forma dinámica sin tener que programar patrones de URI.

Cuando necesites hacer cambios incompatibles con versiones anteriores en una API, introduce una nueva versión. La práctica más habitual es incluir el número de versión en la URI, como /api/v2/users. De esta forma, los clientes que ya usan la versión antigua pueden seguir haciéndolo, mientras que los nuevos clientes pueden adoptar la nueva.

Cuando una solicitud falle, proporciona un mensaje de error claro y útil en el cuerpo de la respuesta junto con el código de estado HTTP (por ejemplo, 400 Solicitud incorrecta o 500 Error de servidor interno). De esta forma, el desarrollador del lado del cliente puede entender qué ha fallado.

Protege tu API implementando una autenticación sólida (por ejemplo, OAuth 2.0 o claves de API) para verificar la identidad y la autorización del cliente. De esta forma, te asegurarás de que solo tenga acceso a los recursos que se le permite ver. Utiliza siempre TLS/SSL para cifrar el tráfico.

En los endpoints que pueden devolver un gran número de elementos, implementa la paginación para devolver los datos en fragmentos manejables. Además, proporciona parámetros de consulta para que los clientes puedan filtrar y ordenar los resultados, lo que reduce la cantidad de datos transferidos.

Ventajas de usar APIs REST

Sencillez y legibilidad

Las APIs REST usan métodos HTTP estándar y URIs legibles por humanos, lo que hace que los desarrolladores puedan aprender a usarlas y depurarlas con relativa facilidad. La naturaleza autodescriptiva de la interfaz simplifica los esfuerzos de integración.

Escalabilidad

La naturaleza sin reconocimiento de estado de REST es un factor clave para la escalabilidad. Como el servidor no tiene que mantener las sesiones de los clientes, es fácil distribuir las peticiones entre varios servidores y se pueden añadir nuevos servidores para gestionar el aumento de la carga sin complicaciones.

Flexibilidad

REST admite una gran variedad de formatos de datos, siendo JSON el más popular por su naturaleza ligera y su amplia compatibilidad. Esta flexibilidad permite que las APIs REST se usen en una amplia variedad de aplicaciones cliente, desde navegadores web hasta dispositivos móviles y sensores de IoT.

Desvinculación del cliente y el servidor

La arquitectura cliente-servidor que impone REST crea una clara separación de responsabilidades. Esto permite a los desarrolladores trabajar en el frontend del lado del cliente y en el backend del lado del servidor de forma independiente, lo que puede acelerar los ciclos de desarrollo.

Independiente del lenguaje

Como REST es un estilo arquitectónico basado en el protocolo HTTP estándar, se puede implementar en cualquier lenguaje de programación y utilizar en cualquier cliente que pueda hacer solicitudes HTTP. Esto proporciona la máxima interoperabilidad entre diferentes pilas tecnológicas.

Ejemplos de API REST

Ejemplo de API pública

Un caso práctico habitual es una aplicación meteorológica para móviles que obtiene el tiempo actual de una ubicación específica a partir de una API meteorológica pública.

La aplicación cliente hace una solicitud HTTP GET al endpoint de API, que incluye la ubicación y una clave de API para la autenticación.

curl

"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"

curl

"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"

El servidor procesa la solicitud, recupera los datos meteorológicos de la ubicación especificada y devuelve una respuesta JSON.

{

 "temperature": 20,

 "unit": "celsius",

 "condition": "Clear",

 "humidity": 55

}

{

 "temperature": 20,

 "unit": "celsius",

 "condition": "Clear",

 "humidity": 55

}

Ejemplo de API interna

En una arquitectura de microservicios, un servicio de "producto" podría necesitar obtener un precio actualizado de un servicio de "inventario" antes de mostrarlo en un sitio de comercio electrónico. 

El servicio de productos hace una solicitud HTTP GET interna al endpoint de la API del servicio de inventario para un ID de producto específico.

curl

"http://inventory-service.internal/api/products/PN-5821/price"

curl

"http://inventory-service.internal/api/products/PN-5821/price"

El servicio de inventario busca el precio actual y devuelve una respuesta JSON sencilla.

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

Soluciona los retos empresariales que se te presenten con Google Cloud

Los nuevos clientes reciben 300 USD en crédito gratis para invertirlos en Google Cloud.

Recursos adicionales

Ve un paso más allá

Empieza a crear en Google Cloud con 300 USD en crédito gratis y más de 20 productos Always Free.

Google Cloud