28
CONFIDENTIAL ©2013 GlobalLogic Inc. REST API Compartí tu aplicación. Take a REST

Charla REST API

Embed Size (px)

DESCRIPTION

Compartí tu aplicación. Take a REST

Citation preview

Page 1: Charla REST API

CONFIDENTIAL©2013 GlobalLogic Inc.

REST APICompartí tu aplicación. Take a REST

Page 2: Charla REST API

©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

Page 3: Charla REST API

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 .-

Page 4: Charla REST API

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.

Page 5: Charla REST API

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.

Page 6: Charla REST API

CONFIDENTIAL

04 SOA / ROAService Oriented Architecture

● SOAP

● WSDL

● UDDI

Utilizan servicios para brindar los resultados de la aplicación.

Page 7: Charla REST API

CONFIDENTIAL

04 SOA / ROA (Cont…)

Resource Oriented ArchitectureBasado en recursos, cada recurso es accesible por medio de una interfaz común.

● REST

Page 8: Charla REST API

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.

Page 9: Charla REST API

CONFIDENTIAL

06 Diseño REST

HTTP Methods

HTTP Status Codes

Internet Media Types

Page 10: Charla REST API

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.

Page 11: Charla REST API

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)

Page 12: Charla REST API

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.

Page 13: Charla REST API

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.

Page 14: Charla REST API

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.

Page 15: Charla REST API

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

Page 16: Charla REST API

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

Page 17: Charla REST API

CONFIDENTIAL

07 Niveles REST

RESTFUL 100% COMPLIANT

1. “The Swamp of POX.”

2. Resources

3. HTTP Verbs

4. Hypermedia Controls (HATEOAS)

Page 18: Charla REST API

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

Page 19: Charla REST API

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

Page 20: Charla REST API

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]

Page 21: Charla REST API

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>

Page 22: Charla REST API

CONFIDENTIAL

REST API - Compartí tu app, take a REST

Niveles RESTSi cumplimos estos niveles...

RESTFUL 100% COMPLIANT

Page 23: Charla REST API

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

Page 24: Charla REST API

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

Page 25: Charla REST API

CONFIDENTIAL

09 Extras

HTTPS

Basic Authentication

OAuth2

SEGURIDAD

Page 26: Charla REST API

CONFIDENTIAL

¿Preguntas?

Page 27: Charla REST API

©2013 GlobalLogic Inc. CONFIDENTIAL

Page 28: Charla REST API

CONFIDENTIAL©2013 GlobalLogic Inc.

Thank You