Este documento describe los principios fundamentales de REST y las mejores prácticas para diseñar APIs HTTP. Explica los tres niveles de madurez REST (URI, HTTP, hipermedia), los métodos HTTP, códigos de estado, formatos de contenido, autenticación, versionado, errores y documentación de APIs. También cubre temas como hipermedia, formatos como HAL, operaciones asíncronas, disponibilidad de formatos, etiquetas HTTP y servicios backend como servicio.
7. ¿Por qué hacer APIs HTTP?
Evitar la dependencia del cliente con el backend.
Utilizar un protocolo maduro, probado y muy
usado.
Mejorar la integración con servicios o
aplicaciones de terceros.
22. Códigos de estado HTTP
No reinventar la rueda
RFC 2616 – Sección 10
Información
Éxito
Redirección, proxy o caché
Error de cliente
Error de servidor
→
→
→
→
→
1XX
2XX
3XX
4XX
5XX
23. Tipo de contenido, media types HTTP
Request
GET /recurso
Accept: application/json
Response
GET /recurso
Status Code 200
Content Type: application/json
28. Hypermedia y HATEOAS
Nos permite desacoplar al máximo el cliente del
servidor.
Nos da flexibilidad ante cambios futuros en
nuestra API.
Nos permite automatizar peticiones sin tener que
conocer de antemano la API.
Utilizamos media type propios.
Accept: application/vnd.{tu servicio} +json
35. Seguridad
Autenticación HTTP: Basic, Digest
Sistema propio basado en tokens
OAuth
Gateways: Layer7, apigee enterprise, 3scale...
+ HTTPs (no es opcional)
37. Disponibilidad de formatos
Request
GET /recurso
Accept: application/xml
Response (formato disponible)
GET /recurso
Content Type: application/xml
200
Response (formato no disponible)
GET /recurso
406 Not acceptable
38. Uso de Etiquetas HTTP
Request
Request
PUT /recurso
If-Match: “XXXX”
PUT /recurso
If-Match: “XXXX”
Response
Response
PUT /recurso
200
Etag: “YYYY”
PUT /recurso
412 Precondition Failed
Etag: “YYYY”
39. Descripción de errores
Request
Request
POST /users
POST /users
Response
Response
POST /users
201 Created
POST /users
400 Conflict
Content
{
“_errors”: [{
“email”: “email is in use”
}]
}
42. BAAS, Backend as a Service
Disponemos de una API de servidor totalmente
funcional en minutos.
Sin problemáticas de infraestructura,
administración de servidores..
Integración con servicios de terceros out of the
box, en algunos casos.
Personalización del código de la API mediante
Javascript y Eventos.