REST API 
Compartí tu aplicación. Take a REST 
©2013 GlobalLogic Inc. CONFIDENTIAL
AGENDA 
01 Presentación 
02 ¿Qué es REST? 
03 Principios 
04 SOA / ROA 
05 Web Services 
06 Diseño REST 
07 Niveles REST 
08 REST en Java 
09 Extras 
©2013 GlobalLogic Inc. CONFIDENTIAL
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 .-
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.
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
Utilizan servicios para brindar los resultados de la aplicación. 
CONFIDENTIAL 
04 SOA / ROA 
Service Oriented Architecture 
● SOAP 
● WSDL 
● UDDI
CONFIDENTIAL 
04 SOA / ROA (Cont…) 
Resource Oriented Architecture 
Basado en recursos, cada recurso es accesible por medio de una interfaz común. 
● REST
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.
CONFIDENTIAL 
06 Diseño REST 
HTTP Methods 
HTTP Status Codes 
Internet Media 
Types
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
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)
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
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
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
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
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
1. “The Swamp of POX.” 
2. Resources 
3. HTTP Verbs 
4. Hypermedia Controls (HATEOAS) 
CONFIDENTIAL 
07 Niveles REST 
RESTFUL 100% COMPLIANT
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
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
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]
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>
CONFIDENTIAL 
REST API - Compartí tu app, take a REST 
Niveles REST 
Si cumplimos estos niveles... 
RESTFUL 100% COMPLIANT
● 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...
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
SEGURIDAD 
CONFIDENTIAL 
09 Extras 
HTTPS 
Basic Authentication 
OAuth2
¿Preguntas? 
CONFIDENTIAL
©2013 GlobalLogic Inc. CONFIDENTIAL
Thank You 
©2013 GlobalLogic Inc. CONFIDENTIAL

Charla REST API

  • 1.
    REST API Compartítu aplicación. Take a REST ©2013 GlobalLogic Inc. CONFIDENTIAL
  • 2.
    AGENDA 01 Presentación 02 ¿Qué es REST? 03 Principios 04 SOA / ROA 05 Web Services 06 Diseño REST 07 Niveles REST 08 REST en Java 09 Extras ©2013 GlobalLogic Inc. CONFIDENTIAL
  • 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 parabrindar 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 WebServices 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.
  • 9.
    CONFIDENTIAL 06 DiseñoREST HTTP Methods HTTP Status Codes Internet Media Types
  • 10.
    Los métodos HTTPsuelen 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 InternetMedia 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 MediaTypes (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
  • 17.
    1. “The Swampof POX.” 2. Resources 3. HTTP Verbs 4. Hypermedia Controls (HATEOAS) CONFIDENTIAL 07 Niveles REST RESTFUL 100% COMPLIANT
  • 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 solodebe 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 RESTen 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
  • 25.
    SEGURIDAD CONFIDENTIAL 09Extras HTTPS Basic Authentication OAuth2
  • 26.
  • 27.
  • 28.
    Thank You ©2013GlobalLogic Inc. CONFIDENTIAL