Representational State Transfer (REST) es un estilo de arquitectura de un web service cuya API cumple con un conjunto de restricciones. Si bien REST surge en el ámbito académico, creado por Roy Fielding, actualmente se usa ampliamente en la industria. Se basa en URIs y el protocolo HTTP.
Criterios para que una API sea RESTful:
- Arquitectura cliente-servidor: por ejemplo, usando HTTP.
- Sin estado: cada petición está separada y aislada de otras peticiones anteriores o posteriores.
- Cacheable.
- Sistema de capas: existe una jerarquía y abstracción de middlewares.
- Interfaz uniforme: que toda la información necesaria para manipular o usar el recurso se encuentre en el mensaje. Esto requiere que los recursos sean identificables y solicitables, que se pueda manipular recursos mediante sus representaciones, y que haya hypermedia disponible para usar hyperlinks.
Una API es RESTful solo si cumple con estos criterios o restricciones.
URI: identifica un recurso con un nombre en una jerarquía. Conviene usar sustantivos, no verbos. Ej: /users/1234, /player/johndoe.
HTTP
HTTP es el protocolo de comunicación por excelencia para las API REST. Sus métodos se utilizan para manipular recursos. Listado de métodos (o verbos) HTTP disponibles:
GET.DELETE.POST.PUT.HEAD.OPTIONS.PATCH.CONNECT.TRACE.
Códigos de respuesta HTTP:
1xx: informativo.2xx: respuesta exitosa.3xx: redirección.4xx: error en el cliente.5xx: error en el servidor.
Ejemplo:
# La siguiente petición...
GET /ffilms/2 HTTP/1.1
Host: localhost
User-agent Mozilla/4.0
Connection: keep-alive
Authorization: Basic qhWadbQ...
# Provoca la siguiente respuesta
HTTP/1.1 200 OK
Date: Sun, 08 Feb 2000 01:11:12 GMT.
Content-Type: application/json
{...}
Una alternativa a REST es usar gRPC, que es más nuevo y performante, aunque menos utilizado. REST es un estándar masivo y compatible con la mayoría de internet.