Representational State Transfer (REST) es un estilo arquitectónico de software que proporciona pautas sobre cómo debería funcionar una API. Fue creado como una guía para gestionar la comunicación en una red compleja como Internet. REST es un conjunto de principios y restricciones que, cuando se siguen, permiten la creación de servicios web escalables, eficientes y mantenibles.
Las API RESTful, o API REST, son APIs que siguen el estilo arquitectónico REST para el diseño y la interacción con servicios web. Además de utilizar las APIs para comunicar y compartir datos entre dos o más software o aplicaciones, las APIs RESTful contribuyen a la eficiencia, escalabilidad y flexibilidad de las aplicaciones web, desempeñando un papel importante en el desarrollo web. Otros beneficios de las APIs RESTful en el ámbito del desarrollo web son la ausencia de estado, la compatibilidad y la interoperabilidad, la integración simplificada, la mejora de la seguridad y la simplicidad.
Dos conceptos principales que son fundamentales para entender cómo funcionan las APIs RESTful son: Puntos finales y Recursos
-
RECURSOS: Los recursos son cualquier información que puede ser identificada, nombrada y manipulada. Son las abstracciones clave que se exponen a través de la API.
-
PUNTO DE ACCESO: Un punto de acceso es el punto de acceso o la URL específica (Localizador de Recursos Uniforme) o URI que representa un recurso o una colección de recursos a través de los cuales los clientes pueden interactuar con la API.
Principios Clave de la Arquitectura RESTful
Los principales principios de la arquitectura RESTful, también conocidos como restricciones REST, definen colectivamente la arquitectura RESTful y guían el diseño de servicios web que se adhieren a estas restricciones. Los principios incluyen:
-
INDEPENDENCIA DE ESTADO: Cada solicitud de un cliente a un servidor debe contener toda la información necesaria para comprender y procesar la solicitud. La independencia de estado mejora la escalabilidad y simplifica la implementación del servidor.
-
INTERFAZ UNIFORME: Subrestricciones como la identificación de recursos por URL, manipulación de recursos por representación, mensaje autoexplicativo e interacción de clientes con aplicaciones únicamente a través de hipermedia comúnmente conocido como HATEOAS (Hypermedia como Motor del Estado de la Aplicación) permiten una interfaz uniforme y consistente.
-
ARQUITECTURA CLIENTE-SERVIDOR: Los sistemas RESTful siguen una estructura donde el cliente y el servidor son entidades separadas que se comunican a través de una red. El cliente es responsable de la interfaz de usuario y la experiencia del usuario, mientras que el servidor es responsable de procesar solicitudes, gestionar recursos y mantener la lógica empresarial de la aplicación. Esta separación de responsabilidades mejora la escalabilidad y la flexibilidad.
-
SISTEMA DE CAPAS: Hay múltiples capas, cada una con su funcionalidad específica en la arquitectura REST. Cada capa interactúa con la capa adyacente para promover la modularidad y la escalabilidad.
-
CÓDIGO BAJO DEMANDA: Este principio proporciona una forma para que las aplicaciones cliente carguen y ejecuten el código proporcionado por el servidor, mejorando las capacidades del cliente. Aunque “Código bajo demanda” puede proporcionar flexibilidad, no siempre es adecuado para todos los escenarios debido a consideraciones de seguridad y al potencial aumento del acoplamiento entre el cliente y el servidor. La decisión de utilizar “Código bajo demanda” depende de los requisitos y restricciones específicos de la aplicación en desarrollo.
-
CACHEABILIDAD: La cacheabilidad mejora el rendimiento al permitir que los clientes reutilicen representaciones previamente obtenidas, reduciendo la necesidad de solicitudes repetidas al servidor.
Endpoints en APIs RESTful
Los Endpoints definen la funcionalidad o acciones realizadas en recursos, como recuperar una lista de elementos, crear un nuevo elemento, actualizar un elemento existente o eliminar un elemento. Las APIs RESTful a menudo tienen múltiples puntos finales para realizar diferentes operaciones en el mismo recurso o para trabajar con diferentes recursos.
Los endpoints juegan un papel importante en el diseño de APIs al servir como puntos de acceso a través de los cuales los clientes interactúan con la API. Algunos de los endpoints importantes en el diseño de API son:
-
Exposición de recursos: Los endpoints definen los recursos o colección de recursos expuestos por la API, y cada endpoint define un recurso específico o un conjunto de recursos, dejando claro con qué recurso o conjunto de recursos puede interactuar un cliente.
-
Definición de operación: Los endpoints especifican la acción que los clientes pueden realizar en los recursos. Métodos HTTP como GET, POST, PUT y DELETE se utilizan para definir la acción.
-
Modularidad y Escalabilidad: Los puntos finales promueven la modularidad al resumir funcionalidades específicas relacionadas con un recurso específico o un conjunto de recursos. La modularidad mejora la mantenibilidad de la API y permite un desarrollo escalable.
-
Diseño Claro e Intuitivo: Al elegir convenciones de nomenclatura significativas y consistentes para los puntos finales, los desarrolladores pueden entender fácilmente el propósito y la funcionalidad de cada punto final, lo que contribuye a la claridad y al diseño intuitivo de la API.
Existen diferentes tipos de puntos finales categorizados según su funcionalidad y los tipos de operaciones que admiten. Algunos de los diferentes tipos son:
-
Puntos finales de Lectura y Recuperación: utilizados para recuperar recursos del servidor mediante el método HTTP GET.
-
Puntos finales de Creación o POST: utilizados para crear nuevos recursos en el servidor mediante el método HTTP POST
-
Eliminar Puntos de Acceso: se utilizan para eliminar un recurso en el servidor utilizando el método DELETE de HTTP
-
Actualizar o Puntos de Acceso PUT: se utilizan para actualizar recursos existentes en el servidor utilizando el método PUT de HTTP.
-
Buscar o Consultar Puntos de Acceso: Permite a los clientes recuperar un subconjunto de recursos basado en criterios especificados utilizando el método GET de HTTP.
-
Listar Puntos de Acceso: Obtiene una colección o lista de recursos utilizando el método GET de HTTP.
Recursos en APIs RESTful
Los recursos son abstracciones clave que representan cualquier información que pueda ser identificada, nombrada y manipulada. Ejemplos de recursos incluyen perfiles de usuarios, artículos y cualquier otra entidad de datos con la que las aplicaciones trabajen. Los recursos pueden ser identificados por un URI (Identificador de Recursos Uniforme) distintivo. Por lo general, están en formatos JSON o XML, y cada recurso puede ser creado, recuperado, actualizado y eliminado utilizando métodos estándar de HTTP.
La base para construir una arquitectura RESTful es identificar sus recursos. Algunas de las principales pautas para identificar recursos en el diseño de API incluyen:
-
Usar Sustantivos para los Nombres de Recursos: en lugar de usar verbos como “obtener” o “recuperar” en el nombre del recurso, usar sustantivos como “usuarios” o “productos”.
-
Convenciones de Nombres de Recursos: Seguir una convención de nombres consistente para los recursos. Deben usarse nombres que sean fáciles de entender y recordar.
-
Usar Sustantivos en Plural para Colecciones de Recursos: Por ejemplo, ‘/users’ es una colección de recursos de usuario y ‘/products’ es una colección de recursos de productos.
-
Documentación: Las APIs deben estar claramente documentadas para permitir que los usuarios comprendan los recursos disponibles y cómo interactuar con ellos.
Relación entre Recursos y Puntos Finales
La relación entre recursos y puntos finales es fundamental para el diseño y la funcionalidad de una API RESTful. Algunas de las relaciones entre ellos son:
-
Puntos Finales como Puntos de Acceso: Un punto final es el URI o URL específico que corresponde a un recurso o a una colección de recursos. Proporciona un punto de acceso concreto a través del cual los clientes pueden interactuar con el recurso.
-
El Punto Final Identifica un Recurso: El punto final identifica un recurso o conjunto de recursos. Por ejemplo, si tienes un recurso que representa usuarios, el punto final podría ser ‘/users.’
-
Los métodos HTTP definen operaciones: Los puntos finales están asociados con métodos HTTP específicos (GET, POST, PUT, DELETE, etc.), los cuales definen las operaciones que se pueden realizar en el recurso correspondiente.
-
Representación del recurso: El punto final intercambia representaciones del recurso con el servidor cuando el cliente interactúa con él. Estas representaciones pueden estar en diferentes formatos como JSON o XML y contienen el estado o la información sobre el recurso. La representación es la carga útil de la solicitud o respuesta HTTP.
-
Interfaz uniforme: La relación entre recursos y puntos finales cumple con las restricciones de la interfaz uniforme de REST. La combinación de recursos y puntos finales crea una estructura de API consistente y predecible.
-
HATEOAS (Hypermedia as the Engine of Application State): Implica incluir enlaces de hipertexto en las representaciones de recursos, lo que permite a los clientes navegar dinámicamente por la API.
Conclusión
La interacción entre recursos y puntos finales es fundamental en el diseño de API RESTful para desarrollar una arquitectura unificada y eficiente. Los recursos, que representan entidades conceptuales, definen las entidades esenciales del sistema, como usuarios o productos. Los puntos finales, representados por URIs, sirven como puertas de enlace para que los clientes interactúen con estos recursos a través de métodos HTTP especificados. Siguiendo los principios RESTful, esta relación simbiótica garantiza una interfaz uniforme, una comunicación auto-descriptiva y una navegación dinámica a través de enlaces de hipertexto (HATEOAS). La alineación cuidadosa de recursos y puntos finales es más que un detalle técnico; es un concepto de diseño que impulsa la claridad, escalabilidad y adaptabilidad de la API, lo que resulta en una experiencia fluida e intuitiva tanto para desarrolladores como para usuarios.
Source:
https://inioluwa2003.hashnode.dev/demystifying-restful-apis-a-deep-dive-into-endpoints-and-resources