Servicios REST - PucelaTechDay
-
Upload
asier-marques -
Category
Documents
-
view
2.195 -
download
2
Transcript of Servicios REST - PucelaTechDay
![Page 1: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/1.jpg)
REST
Asier Marqués@asiermarques
![Page 2: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/2.jpg)
linkedin.com/in/asier
Director en Simettric
Director técnico en 4visionshq.com
#elcomite
#bilbostack
#pucelatechday
![Page 3: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/3.jpg)
HTTP - RFC 2616
Request
Response
![Page 4: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/4.jpg)
Request
GET /usuarios
Accept: text/html, application/json
![Page 5: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/5.jpg)
Response
GET /usuarios
Status Code: 200
Content Type: application/json
![Page 6: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/6.jpg)
Request
GET /usuarios
Accept: application/lechazo+xml
![Page 7: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/7.jpg)
Response
GET /usuarios
Status Code: 415, unsupported media type
![Page 8: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/8.jpg)
REST
Representational State Transfer
HTTP
Año 2000
![Page 9: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/10.jpg)
Richardson Madurity Model
Nivel 1 – Uso correcto de las URIs
Nivel 2 – Uso correcto de HTTP
Nivel 3 – Hypermedia
![Page 11: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/11.jpg)
Nivel 1
![Page 12: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/12.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/13.jpg)
Recursos
Un listado de usuarios → /usuarios
Un usuario → /usuarios/{id}
![Page 14: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/14.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/15.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/16.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/17.jpg)
Formatos
Incorrecto
GET /user/{id}.xml
Accept: text/html
Correcto
GET /user/{id}
Accept: application/xml
![Page 18: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/18.jpg)
Contenidos parciales
GET /usuario/{id}?campos=id,nombre,email
Status Code: 206
![Page 19: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/19.jpg)
Nivel 2
![Page 20: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/20.jpg)
Métodos HTTP
● Leer → GET● Crear → POST● Editar → PUT● Editar parcialmente → PATCH● Eliminar → DELETE
![Page 21: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/21.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/22.jpg)
Tipo de contenido HTTP
Accept
Content Type
![Page 23: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/23.jpg)
Validación ETag HTTP
Etag
if-none-match
if-match
![Page 24: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/24.jpg)
Nivel 3 - Hypermedia
![Page 25: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/25.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/26.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/27.jpg)
GET /pedido/{id}
Request
Accept: application/custom+xml, application/xml
Response
Content Type: application/custom+xml
![Page 28: Servicios REST - PucelaTechDay](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/28.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/29.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5595a2cf1a28ab1b748b460a/html5/thumbnails/30.jpg)
Seguridad
Autenticación HTTP (:S)
Sistema propio basado en tokens
OAuth2
Gateways: Layer7, apigee enterprise, 3scale...
+ HTTPs (no es opcional)