¿Qué es una API de REST?

Una API de REST, o interfaz de programación de aplicaciones de transferencia de estado representacional, es un estilo de arquitectura que se considera el estándar para diseñar y crear las aplicaciones en red que impulsan la Web. Proporciona un conjunto de reglas y restricciones que, cuando se siguen, generan servicios web simples, escalables y fáciles de integrar.

Definición de la API de REST

Una API de REST es una API que se ajusta a los principios de diseño del estilo arquitectónico REST. En esencia, REST se basa en 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 de REST proporciona una forma para que una aplicación cliente acceda a estos recursos y los manipule con un conjunto predefinido de operaciones sin estado.

¿Cómo funcionan las APIs de REST?

1. El cliente envía la solicitud

Una aplicación cliente (como una app para dispositivos móviles, un navegador web o un servidor diferente) inicia una solicitud a la API para realizar una acción. Esta solicitud se envía a una URL específica y contiene 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, lo que confirma que el cliente está autenticado y autorizado para realizar la acción solicitada. Luego, procesa la solicitud, que podría implicar recuperar información de una base de datos, crear un nuevo recurso o actualizar uno existente.

3. El servidor envía una respuesta

Después de 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 para éxito, 404 No encontrado si el recurso no existe, 401 No autorizado para problemas de seguridad), junto con los datos solicitados en el cuerpo de la respuesta.

4. Transferencia de datos

Los datos transferidos entre el cliente y el servidor son una "representación" del estado del recurso. El formato JSON (notación de objeto de JavaScript) es el 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 de 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 cumple con estas restricciones se considera "RESTful".

Diagrama del modelo de la API de REST

Recursos

Los recursos son un concepto básico en REST. Son objetos 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 un recurso.

URI (identificadores de recursos uniformes)

Cada recurso se identifica de forma única con un URI. Una API bien diseñada usa 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 específico con el ID 123.

Representaciones

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

Sin estado

Cada solicitud de un cliente al servidor debe contener toda la información que el servidor necesita para comprender y procesar la solicitud. El servidor no almacena ningún contexto de cliente o estado de sesión entre solicitudes. Esta restricción hace que las APIs de REST sean altamente escalables, ya que cualquier servidor puede manejar 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 las aplicaciones del cliente y del servidor evolucionen de forma independiente.

Interfaz uniforme

REST requiere una interfaz coherente y uniforme entre el cliente y el servidor. Esto se logra a través del 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).

Capacidad de almacenamiento 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 intermediario puede reutilizarla para solicitudes idénticas posteriores, lo que puede mejorar significativamente el rendimiento y reducir la carga del servidor.

Sistema en capas

Un cliente conectado a una API de REST no puede saber normalmente si está conectado directo al servidor final o a un intermediario en el camino. Se pueden introducir servidores intermediarios, como puertas de enlace de API o balanceadores de cargas, en la arquitectura para mejorar la escalabilidad, la seguridad y el rendimiento.

Prácticas recomendadas de la API de 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 la recuperación, POST para la creación, PUT para las actualizaciones y DELETE para la eliminación. Esto crea una interfaz predecible y coherente.

Un principio clave de REST es que una respuesta debe incluir vínculos a otras acciones o recursos relacionados. Esto permite que el cliente navegue por la API de forma dinámica sin tener que codificar patrones de URI de forma rígida.

Cuando necesites hacer cambios rotundos en una API, introduce una nueva versión. La práctica más común es incluir el número de versión en el URI, como /api/v2/users. Esto permite que los clientes existentes sigan usando la versión anterior, mientras que los clientes nuevos pueden adoptar la nueva.

Cuando una solicitud falla, proporciona un mensaje de error claro y útil en el cuerpo de la respuesta junto con el código de estado HTTP adecuado (por ejemplo, 400 Solicitud incorrecta, 500 Error interno del servidor). Esto ayuda al desarrollador del cliente a entender qué salió mal.

Protege tu API implementando una autenticación sólida (por ejemplo, OAuth 2.0, claves de API) para verificar la identidad del cliente y la autorización para garantizar que el cliente solo tenga acceso a los recursos que se le permite ver. Siempre usa TLS/SSL para encriptar el tráfico.

Para los extremos que pueden devolver una gran cantidad de elementos, implementa la paginación para devolver los datos en fragmentos administrables. Además, proporciona parámetros de búsqueda para permitir que los clientes filtren y ordenen los resultados, lo que reduce la cantidad de datos transferidos.

Beneficios de usar APIs de REST

Simplicidad y legibilidad

Las APIs de REST usan métodos HTTP estándar y URIs legibles por humanos, lo que las hace relativamente fáciles de aprender, usar y depurar para los desarrolladores. La naturaleza autodescriptiva de la interfaz simplifica los esfuerzos de integración.

Escalabilidad

La naturaleza sin estado de REST es un factor clave para la escalabilidad. Como el servidor no necesita mantener sesiones de clientes, es fácil distribuir solicitudes en varios servidores, y se pueden agregar servidores nuevos para manejar una mayor carga sin complejidad.

Flexibilidad

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

Separación del cliente y el servidor

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

Independiente del lenguaje

Dado que REST es un estilo arquitectónico basado en HTTP estándar, se puede implementar en cualquier lenguaje de programación y cualquier cliente capaz de hacer solicitudes HTTP puede consumirlo. Esto proporciona la máxima interoperabilidad entre diversas pilas tecnológicas.

Ejemplos de la API de REST

Ejemplo de API pública

Un caso de uso común es una app de clima para dispositivos móviles que recupera el clima actual de una ubicación específica desde una API pública de clima.

La aplicación cliente realiza una solicitud HTTP GET al extremo de la 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 extremo 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 simple.

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

Resuelve tus desafíos más difíciles con Google Cloud

Los clientes nuevos obtienen $300 en créditos gratuitos que pueden usar en Google Cloud.

Recursos adicionales

Da el siguiente paso

Comienza a desarrollar en Google Cloud con el crédito gratis de $300 y los más de 20 productos del nivel Siempre gratuito.

Google Cloud