Servicios REST - PucelaTechDay

Post on 03-Jul-2015

2.195 views 2 download

Transcript of Servicios REST - PucelaTechDay

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)

Gracias!

@asiermarques

asier@simettric.com