servicios rest - pucelatechday

31
REST Asier Marqués @asiermarques

Upload: asier-marques

Post on 03-Jul-2015

2.195 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Servicios REST - PucelaTechDay

REST

Asier Marqués@asiermarques

Page 2: Servicios REST - PucelaTechDay

linkedin.com/in/asier

Director en Simettric

Director técnico en 4visionshq.com

#elcomite

#bilbostack

#pucelatechday

Page 3: Servicios REST - PucelaTechDay

HTTP - RFC 2616

Request

Response

Page 4: Servicios REST - PucelaTechDay

Request

GET /usuarios

Accept: text/html, application/json

Page 5: Servicios REST - PucelaTechDay

Response

GET /usuarios

Status Code: 200

Content Type: application/json

Page 6: Servicios REST - PucelaTechDay

Request

GET /usuarios

Accept: application/lechazo+xml

Page 7: Servicios REST - PucelaTechDay

Response

GET /usuarios

Status Code: 415, unsupported media type

Page 8: Servicios REST - PucelaTechDay

REST

Representational State Transfer

HTTP

Año 2000

Page 9: Servicios REST - PucelaTechDay

Las reglas de oro

No guardar estado en el backend

Backend y cliente están desacoplados

Buen nombre de URIs

Uso correcto de HTTP

Page 10: Servicios REST - PucelaTechDay

Richardson Madurity Model

Nivel 1 – Uso correcto de las URIs

Nivel 2 – Uso correcto de HTTP

Nivel 3 – Hypermedia

Page 11: Servicios REST - PucelaTechDay

Nivel 1

Page 12: Servicios REST - PucelaTechDay

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

Page 13: Servicios REST - PucelaTechDay

Recursos

Un listado de usuarios → /usuarios

Un usuario → /usuarios/{id}

Page 14: Servicios REST - PucelaTechDay

Nombrar recursos

Usamos nombres, no verbos

Utilizamos una estructura jerárquica

Evitamos añadir:

– Nombres de formatos

– Extensiones

– Filtros, órdenes paginaciones

Page 15: Servicios REST - PucelaTechDay

Incorrecto

Perfil de usuario → /getUser/{id}

Edición de usuario → /users/{id}/edit

Paginación de listado → /users/page/{page}

Relaciones → /invoices/user/{id}

Page 16: Servicios REST - PucelaTechDay

Correcto

Perfil de usuario → /users/{id}

Edición de usuario → /users/{id}

Paginación de listado → /users?page={page}

Relaciones → /user/{id}/invoices

Page 17: Servicios REST - PucelaTechDay

Formatos

Incorrecto

GET /user/{id}.xml

Accept: text/html

Correcto

GET /user/{id}

Accept: application/xml

Page 18: Servicios REST - PucelaTechDay

Contenidos parciales

GET /usuario/{id}?campos=id,nombre,email

Status Code: 206

Page 19: Servicios REST - PucelaTechDay

Nivel 2

Page 20: Servicios REST - PucelaTechDay

Métodos HTTP

● Leer → GET● Crear → POST● Editar → PUT● Editar parcialmente → PATCH● Eliminar → DELETE

Page 21: Servicios REST - PucelaTechDay

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

Page 22: Servicios REST - PucelaTechDay

Tipo de contenido HTTP

Accept

Content Type

Page 23: Servicios REST - PucelaTechDay

Validación ETag HTTP

Etag

if-none-match

if-match

Page 24: Servicios REST - PucelaTechDay

Nivel 3 - Hypermedia

Page 25: Servicios REST - PucelaTechDay

Hypermedia

Enlazamos recursos.

Añadimos información adicional al recurso para indicar cómo se relaciona con otros.

Utilizamos formatos propios.

Page 26: Servicios REST - PucelaTechDay

GET /pedido/{id}

<pedido>

<id>666</id>

<estado>Procesado</estado>

<links>

<link rel=”factura”>

http://lechazo.org/api/pedido/666/factura

</link>

</links>

</pedido>

Page 27: Servicios REST - PucelaTechDay

GET /pedido/{id}

Request

Accept: application/custom+xml, application/xml

Response

Content Type: application/custom+xml

Page 28: Servicios REST - PucelaTechDay

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” }

}

}

Page 29: Servicios REST - PucelaTechDay

Versiones

En la URI: → /api/v1/recurso

Como parámetro http → /api/recurso?v=1.0

Como header http → v=1 /api/recurso

Page 30: Servicios REST - PucelaTechDay

Seguridad

Autenticación HTTP (:S)

Sistema propio basado en tokens

OAuth2

Gateways: Layer7, apigee enterprise, 3scale...

+ HTTPs (no es opcional)

Page 31: Servicios REST - PucelaTechDay

Gracias!

@asiermarques

[email protected]