3. CONFIDENTIAL
01 Presentacion
Maximiliano Britez
@mapsi88
maximiliano.britez@globallogic.com
● Bostero desde la cuna .-
● Web developer .-
● Bartender .-
● Estudiante de ingeniería .-
● Demás cosas que a nadie le interesa .-
4. Representational State Transfer
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.
Estos principios resumen como los recursos
son definidos y consumidos.
5. 03 Principios
Client-Server
Clientes y servidores independientes.
Stateless
Comunicaciones sin estado.
Cacheable
Respuestas “cacheables” por parte del cliente.
Layered System
Existencia de capas intermedias de servidores
para mejorar escalabilidad, rendimiento y seguridad.
Uniform Interface
Interfaz uniforme entre cliente y servidor, evolución
y desarrollo independiente.
CONFIDENTIAL
6. Utilizan servicios para brindar los resultados de la aplicación.
CONFIDENTIAL
04 SOA / ROA
Service Oriented Architecture
● SOAP
● WSDL
● UDDI
7. CONFIDENTIAL
04 SOA / ROA (Cont…)
Resource Oriented Architecture
Basado en recursos, cada recurso es accesible por medio de una interfaz común.
● REST
8. CONFIDENTIAL
05 Web Services
Inconvenientes
Requieren 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 aplicaciones
orientadas a AJAX.
10. 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 Methods
Acción HTTP Method SQL
Create POST INSERT
Read GET SELECT
Update PUT UPDATE
Delete DELETE DELETE
11. CONFIDENTIAL
REST API - Compartí tu app, take a REST
HTTP Status Codes
Basado en los STATUS CODES de HTTP
Ademá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)
12. REST API - Compartí tu app, take a REST
HTTP Status Codes (Cont…)
SUCCESS (2XX)
El Request fue recibido, entendido, aceptado, procesado satisfactoriamente.
200 OK
Respuesta estándar para request procesados
exitosamente.
201 Created
Request procesado exitosamente y creó un nuevo
resource.
202 Accepted
Request aceptado, pero su proceso no está completo.
204 No Content
Request procesado exitosamente, pero respuesta sin
contenido.
CONFIDENTIAL
13. 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 Request
Hay una mala sintaxis en el request.
401 Unauthorized
No estamos autorizados para acceder al recurso
(autenticación es requerida en estos casos).
403 Forbidden
No contamos con permisos para acceder al recurso. En este caso
autenticarse no hará diferencia.
404 Not Found
El recurso solicitado no existe.
405 Method Not Allowed
El cliente no puede realizar la acción solicitada sobre el recurso.
CONFIDENTIAL
14. 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 Error
Es un mensaje genérico a algún error
inesperado.
501 Not Implemented
El método no es reconocido por la API.
503 Service Unavailable
Servidor sobrecargado, o esta apagado por
mantenimiento.
CONFIDENTIAL
15. CONFIDENTIAL
06 Internet Media Types
El 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
16. 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.
CONFIDENTIAL
Custom Media Types
18. REST API - Compartí tu app, take a REST
Niveles REST
1 - SWAMP OF POX
Utilizamos 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
19. REST API - Compartí tu app, take a REST
Niveles REST
2 - Resources
Orientamos 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
20. CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST
3 - HTTP Verbs
Basta 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]
21. REST API - Compartí tu app, take a REST
Niveles REST
4 - Hypermedia Links
Utilizamos 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>
CONFIDENTIAL
<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>
22. CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST
Si cumplimos estos niveles...
RESTFUL 100% COMPLIANT
23. ● Cliente solo debe conocer:
● root URI de la API
● definición de los media types
CONFIDENTIAL
REST API - Compartí tu app, take a REST
Niveles REST
Conclusiones
El resto solo es HTTP y links...
24. CONFIDENTIAL
08 REST en JAVA
Frameworks
● 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 3
http://www.springsource.org/spring-framework