Las APIs RESTful (Interfaz de Programación de Aplicaciones basada en Transferencia de Estado Representacional) son un enfoque arquitectónico para el diseño de servicios web que utiliza los principios y restricciones del estilo de arquitectura REST. REST es un acrónimo que significa Transferencia de Estado Representacional y fue propuesto por Roy Fielding en su tesis de doctorado en 2000.
Los principios clave de las APIs RESTful.
A. Recursos y URI (Identificadores Uniformes de Recursos):
En las APIs RESTful, los Recursos y las URIs (Identificadores Uniformes de Recursos) son conceptos fundamentales.
Recursos:
- Recursos: Un recurso es una entidad o un objeto que se puede acceder o manipular a través de la API. Los recursos pueden ser tangibles (como un artículo en un blog) o abstractos (como un servicio que realiza una operación específica).
- Ejemplo: En una aplicación de gestión de libros, los recursos podrían incluir libros, autores o categorías.
URI (Identificadores Uniformes de Recursos):
- Una URI es una cadena de caracteres que identifica un nombre o un recurso en la web de manera única. En el contexto de las APIs RESTful, las URIs se utilizan para identificar y acceder a recursos específicos.
- Ejemplo: Para el recurso «libro» en la aplicación mencionada, la URI podría ser
/libros/123
, donde «123» es el identificador único del libro.
Relación entre Recursos y URIs:
- Cada recurso en una API RESTful debe tener una URI única que actúe como su identificador.
- La URI de un recurso debe ser descriptiva y reflejar la naturaleza del recurso. Por ejemplo,
/libros
podría representar una colección de libros, mientras que/libros/123
podría representar un libro específico. - Las URIs son clave para la navegación y la manipulación de recursos a través de las operaciones HTTP estándar (GET, POST, PUT, DELETE).
Ejemplo Práctico:
Considera una API RESTful para gestionar una biblioteca. Aquí algunos ejemplos de recursos y URIs:
- Recurso: Libro
- URI para todos los libros:
/libros
- URI para un libro específico:
/libros/123
- Recurso: Autor
- URI para todos los autores:
/autores
- URI para un autor específico:
/autores/456
B. Operaciones CRUD (Crear, Leer, Actualizar, Eliminar):
Las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) son acciones que se realizan sobre los recursos identificados por URIs. Estas operaciones corresponden a las acciones básicas que se pueden realizar en cualquier sistema de gestión de datos. Aquí hay una descripción de cada operación CRUD en el contexto de las APIs RESTful:
Crear (Create) – POST:
- Descripción: Se utiliza para crear un nuevo recurso en el servidor.
- Ejemplo URI:
/libros
- Ejemplo de solicitud:http
POST /libros
Contenido: { "titulo": "Nuevo Libro", "autor": "Autor Desconocido" } - Respuesta:json
{
"id" : 124 ,
"titulo" : "Nuevo Libro" ,
"autor" : "Autor Desconocido"
}
Leer (Read) – GET:
- Descripción: Se utiliza para obtener información sobre un recurso o una colección de recursos.
- Ejemplo URI:
/libros/124
- Ejemplo de solicitud:http
GET /libros/124
- Respuesta:json
{
"id" : 124 ,
"titulo" : "Nuevo Libro" ,
"autor" : "Autor Desconocido"
}
Actualizar (Update) – PUT o PATCH:
- Descripción: Se utiliza para actualizar la información de un recurso existente.
- Ejemplo URI:
/libros/124
- Ejemplo de solicitud:http
PUT /libros/124
Contenido: { "titulo": "Libro Actualizado", "autor": "Nuevo Autor" } - Respuesta:json
{
"id" : 124 ,
"titulo" : "Libro Actualizado" ,
"autor" : "Nuevo Autor"
}
Eliminar (Delete) – DELETE:
- Descripción: Se utiliza para eliminar un recurso existente.
- Ejemplo URI:
/libros/124
- Ejemplo de solicitud:http
DELETE /libros/124
- Respuesta:json
{
"mensaje" : "Libro eliminado exitosamente."
}
Estas operaciones CRUD son mapeadas a los métodos HTTP estándar, lo que facilita la comprensión y la utilización de la API. Al diseñar APIs RESTful, es importante seguir las convenciones y buenas prácticas, como el uso consistente de los métodos HTTP y la elección de URIs descriptivas.
C. Representación de Recursos:
La representación de recursos
en el contexto de las APIs RESTful se refiere a cómo se presenta la
información de un recurso en las solicitudes y respuestas de la API. La
información sobre un recurso se transfiere en un formato estándar, como
JSON o XML, y este formato se especifica mediante los encabezados HTTP,
como Content-Type
y Accept
.
A continuación, se proporciona más información sobre la representación de recursos:
Formatos de Representación:
- Los dos formatos más comunes son JSON (JavaScript Object Notation) y XML (eXtensible Markup Language).
- JSON es ampliamente utilizado debido a su simplicidad y legibilidad, especialmente en el contexto del desarrollo web.
Encabezados HTTP:
- Content-Type: Indica el formato de los datos en el cuerpo de la solicitud o respuesta. Por ejemplo,
Content-Type: application/json
. - Accept: Indica los tipos de medios que el cliente puede entender. Por ejemplo,
Accept: application/json
.
- Content-Type: Indica el formato de los datos en el cuerpo de la solicitud o respuesta. Por ejemplo,
Ejemplo de Solicitud y Respuesta:
- Ejemplo de Solicitud (GET):http
GET /libros/124
Accept: application/json - Ejemplo de Respuesta (JSON):json
{
"id" : 124 ,
"titulo" : "Libro de Ejemplo" ,
"autor" : "Autor Anónimo" ,
"publicado" : "2023-01-22" ,
"generos" : [ "Ficción" , "Aventura" ]
}
- Ejemplo de Solicitud (GET):
Versionado de la Representación:
- A veces, se requiere el versionado para manejar cambios en la estructura de la representación de los recursos a medida que evoluciona la API.
Simplicidad y Legibilidad:
- La representación de recursos debe ser simple y fácil de leer para humanos y máquinas. JSON es preferido en muchos casos debido a su legibilidad y la familiaridad de los desarrolladores con la notación de objetos en JavaScript.
Inclusión de Enlaces (HATEOAS):
- En el espíritu de HATEOAS (Hypermedia As The Engine Of Application State), las respuestas pueden incluir enlaces que permiten a los clientes descubrir y navegar a recursos relacionados.
El diseño cuidadoso de la representación de recursos es esencial para facilitar la interoperabilidad y la comprensión de la API por parte de los desarrolladores y los clientes. El uso de formatos estándar y la consistencia en la estructura de la representación son buenas prácticas en el diseño de APIs RESTful.
D. Estado Stateless (Sin Estado):