servicios rest - pucelatechday
TRANSCRIPT
REST
Asier Marqués@asiermarques
linkedin.com/in/asier
Director en Simettric
Director técnico en 4visionshq.com
#elcomite
#bilbostack
#pucelatechday
HTTP - RFC 2616
Request
Response
Request
GET /usuarios
Accept: text/html, application/json
Response
GET /usuarios
Status Code: 200
Content Type: application/json
Request
GET /usuarios
Accept: application/lechazo+xml
Response
GET /usuarios
Status Code: 415, unsupported media type
REST
Representational State Transfer
HTTP
Año 2000
Las reglas de oro
No guardar estado en el backend
Backend y cliente están desacoplados
Buen nombre de URIs
Uso correcto de HTTP
Richardson Madurity Model
Nivel 1 – Uso correcto de las URIs
Nivel 2 – Uso correcto de HTTP
Nivel 3 – Hypermedia
Nivel 1
Recursos y URIs
Cada información con la que queramos trabajar es un recurso.
Usamos URLs, un tipo de URI que identifica y localiza un recurso
Recursos
Un listado de usuarios → /usuarios
Un usuario → /usuarios/{id}
Nombrar recursos
Usamos nombres, no verbos
Utilizamos una estructura jerárquica
Evitamos añadir:
– Nombres de formatos
– Extensiones
– Filtros, órdenes paginaciones
Incorrecto
Perfil de usuario → /getUser/{id}
Edición de usuario → /users/{id}/edit
Paginación de listado → /users/page/{page}
Relaciones → /invoices/user/{id}
Correcto
Perfil de usuario → /users/{id}
Edición de usuario → /users/{id}
Paginación de listado → /users?page={page}
Relaciones → /user/{id}/invoices
Formatos
Incorrecto
GET /user/{id}.xml
Accept: text/html
Correcto
GET /user/{id}
Accept: application/xml
Contenidos parciales
GET /usuario/{id}?campos=id,nombre,email
Status Code: 206
Nivel 2
Métodos HTTP
● Leer → GET● Crear → POST● Editar → PUT● Editar parcialmente → PATCH● Eliminar → DELETE
Códigos de estado HTTP
No reinventar la ruedaRFC 2616 – Sección 10
Tipos– Información → 1XX
– Éxito → 2XX
– Redirección, proxy o caché → 3XX
– Error de cliente → 4XX
– Error de servidor → 5XX
Tipo de contenido HTTP
Accept
Content Type
Validación ETag HTTP
Etag
if-none-match
if-match
Nivel 3 - Hypermedia
Hypermedia
Enlazamos recursos.
Añadimos información adicional al recurso para indicar cómo se relaciona con otros.
Utilizamos formatos propios.
GET /pedido/{id}
<pedido>
<id>666</id>
<estado>Procesado</estado>
<links>
<link rel=”factura”>
http://lechazo.org/api/pedido/666/factura
</link>
</links>
</pedido>
GET /pedido/{id}
Request
Accept: application/custom+xml, application/xml
Response
Content Type: application/custom+xml
JSON HAL
JSON Hypertext Application Languagehttp://tools.ietf.org/html/draft-kelly-json-hal-00
{
“id”: 666
“_links”: {
“factura”: { “href”: “http://lechazo.org/api/pedido/666/factura” }
}
}
Versiones
En la URI: → /api/v1/recurso
Como parámetro http → /api/recurso?v=1.0
Como header http → v=1 /api/recurso
Seguridad
Autenticación HTTP (:S)
Sistema propio basado en tokens
OAuth2
Gateways: Layer7, apigee enterprise, 3scale...
+ HTTPs (no es opcional)