Download - Charla REST API
CONFIDENTIAL©2013 GlobalLogic Inc.
REST APICompartí tu aplicación. Take a REST
©2013 GlobalLogic Inc. CONFIDENTIAL
AGENDA01 Presentación02 ¿Qué es REST?03 Principios04 SOA / ROA05 Web Services06 Diseño REST07 Niveles REST 08 REST en Java09 Extras
CONFIDENTIAL
01 Presentacion
Maximiliano [email protected]@globallogic.com
● Bostero desde la cuna .-
● Web developer .-
● Bartender .-
● Estudiante de ingeniería .-
● Demás cosas que a nadie le interesa .-
CONFIDENTIAL
02 ¿Que es REST?
● El término se originó en el año 2000, en una tesis doctoral sobre la web escrita por Roy Fielding, uno de los principales autores de la especificación del protocolo HTTP.
● REST se refiere estrictamente a una colección de principios y técnicas para el diseño de arquitecturas en red.
Representational State Transfer
Estos principios resumen como los recursos son definidos y consumidos.
CONFIDENTIAL
03 PrincipiosClient-ServerClientes y servidores independientes.
StatelessComunicaciones sin estado.
CacheableRespuestas “cacheables” por parte del cliente.
Layered SystemExistencia de capas intermedias de servidores para mejorar escalabilidad, rendimiento y seguridad.
Uniform InterfaceInterfaz uniforme entre cliente y servidor, evolución y desarrollo independiente.
CONFIDENTIAL
04 SOA / ROAService Oriented Architecture
● SOAP
● WSDL
● UDDI
Utilizan servicios para brindar los resultados de la aplicación.
CONFIDENTIAL
04 SOA / ROA (Cont…)
Resource Oriented ArchitectureBasado en recursos, cada recurso es accesible por medio de una interfaz común.
● REST
CONFIDENTIAL
05 Web ServicesInconvenientesRequieren de un contrato (WSDL) para lograr la comunicación
Requieren crear un cliente específico
Generan un gran overhead de datos(gran cantidad de metadata)
Implementación compleja con aplicacionesorientadas a AJAX.
CONFIDENTIAL
06 Diseño REST
HTTP Methods
HTTP Status Codes
Internet Media Types
CONFIDENTIAL
REST API - Compartí tu app, take a REST
HTTP Methods
Acción HTTP Method SQL
Create POST INSERT
Read GET SELECT
Update PUT UPDATE
Delete DELETE DELETE
Los métodos HTTP suelen ser comparados con las operaciones asociadas a la tecnología de base de datos, operaciones CRUD.
CONFIDENTIAL
REST API - Compartí tu app, take a REST
HTTP Status Codes
Basado en los STATUS CODES de HTTPAdemás de la representación o no, se envía por medio de los HEADERS el status
de la respuesta.
INFO (1XX)
SUCCESS (2XX)
REDIRECTION (3XX)
CLIENT ERROR (4XX)
SERVER ERROR (5XX)
CONFIDENTIAL
REST API - Compartí tu app, take a REST
HTTP Status Codes (Cont…)SUCCESS (2XX)El Request fue recibido, entendido, aceptado, procesado satisfactoriamente.
200 OKRespuesta estándar para request procesados exitosamente.
201 CreatedRequest procesado exitosamente y creó un nuevo resource.
202 AcceptedRequest aceptado, pero su proceso no está completo.
204 No ContentRequest procesado exitosamente, pero respuesta sin contenido.
CONFIDENTIAL
REST API - Compartí tu app, take a REST
HTTP Status Codes (Cont…)ERROR (4XX)El Request fue recibido, pero hubo un error por parte del cliente.
400 Bad RequestHay una mala sintaxis en el request.
401 UnauthorizedNo estamos autorizados para acceder al recurso(autenticación es requerida en estos casos).
403 ForbiddenNo contamos con permisos para acceder al recurso. En este caso autenticarse no hará diferencia.
404 Not FoundEl recurso solicitado no existe.
405 Method Not AllowedEl cliente no puede realizar la acción solicitada sobre el recurso.
CONFIDENTIAL
REST API - Compartí tu app, take a REST
HTTP Status Codes (Cont…)SERVER ERROR (5XX)El Request es válido, pero el servidor es incapaz de resolver la petición.
500 Internal Server ErrorEs un mensaje genérico a algún error inesperado.
501 Not ImplementedEl método no es reconocido por la API.
503 Service Unavailable Servidor sobrecargado, o esta apagado por mantenimiento.
CONFIDENTIAL
06 Internet Media TypesEl intercambio de datos se realiza a través de Internet Media Types o
Content-types.● Es un identificador de dos partes el cual indica el tipo de contenido que viajará en el BODY.
● Este se encuentra definido en el HEADER:
● Request: Accept y Content-type
● Response: Content-type
Ejemplos:● application/json
● application/xml
● image/jpeg
● text/plain
● video/mpeg
● video/mp4
CONFIDENTIAL
06 Internet Media Types (Cont …)
● Sirven como contratos, para que el cliente sepa que es lo que necesita enviar y que es lo que el resource esta esperando.
● Al describir que esperamos applicacion/xml o application/json. No sabemos realmente a que hacemos referencia, si a una orden, si a un drink, o lo que sea que necesite.
● Al usar application/vnd.starbucks.com.drink+xml o application/vnd.starbucks.com.drink+json, identificamos como debe ser el Content-Type del request.
Custom Media Types
CONFIDENTIAL
07 Niveles REST
RESTFUL 100% COMPLIANT
1. “The Swamp of POX.”
2. Resources
3. HTTP Verbs
4. Hypermedia Controls (HATEOAS)
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST1 - SWAMP OF POXUtilizamos HTTP como protocolo de comunicación.
http://starbucks.com/createDrink
http://starbucks.com/updateDrink?drinkId=34
http://starbucks.com/deleteDrink?drinkId=34
http://starbucks.com/getDrink?drinkId=34
http://starbucks.com/listDrinks
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST2 - ResourcesOrientamos el diseño a recursos en vez de acciones
http://starbucks.com/drinks/create
http://starbucks.com/drinks/update?drinkId=34
http://starbucks.com/drinks/delete?drinkId=34
http://starbucks.com/drinks/get?drinkId=34
http://starbucks.com/drinks/list
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST3 - HTTP VerbsBasta del POST para todos!
http://starbucks.com/drinks [POST]
http://starbucks.com/drinks/34 [PUT]
http://starbucks.com/drinks/34 [DELETE]
http://starbucks.com/drinks/34 [GET]
http://starbucks.com/drinks [GET]
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST4 - Hypermedia LinksUtilizamos el principio de HATEOAS (Hypertext As The Engine Of Application State) y la aplicación de media types...
Response Header:Content-type: application/vmd.starbucks.com.drink+xml
Response Body:<Drink>
<id>5</id><key>Caffe Latte</key<price>5.48</price><link rel="self" uri="http://starbucks.com/drinks/5" /><link rel="order" uri="http://starbucks.com/orders"
method="POST" type="application/vnd.starbucks.order+xml/>
</Drink>
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles RESTSi cumplimos estos niveles...
RESTFUL 100% COMPLIANT
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles RESTConclusiones
El resto solo es HTTP y links...
● Cliente solo debe conocer:● root URI de la API● definición de los media types
CONFIDENTIAL
08 REST en JAVAFrameworks
● JAX-RS (JSR 311) ○ Resteasy (http://wiki.jboss.org/wiki/RESTeasy)○ Jersey (http://jersey.java.net/)○ Apache CXF (http://cxf.apache.org/)
● RESTlet http://www.restlet.org
● SPRING MVC 3http://www.springsource.org/spring-framework
CONFIDENTIAL
09 Extras
HTTPS
Basic Authentication
OAuth2
SEGURIDAD
CONFIDENTIAL
¿Preguntas?
©2013 GlobalLogic Inc. CONFIDENTIAL