Charla REST API

Post on 24-Jun-2015

346 views 3 download

description

Compartí tu aplicación. Take a REST

Transcript of 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 Britez@mapsi88maximiliano.britez@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

CONFIDENTIAL©2013 GlobalLogic Inc.

Thank You