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 rueda
RFC 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 Language
http://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)
Gracias!




@asiermarques
asier@simettric.com

Servicios REST - PucelaTechDay