Simplemente REST

Post on 27-Jun-2015

272 views 3 download

description

Internet hoy en día, es un sistema muy grande, distribuido, y con piezas en cada uno de los rincones del mundo. Conectar cada uno de los componentes no es una tarea fácil, ni mucho menos sencilla. En esta charla hablaremos de los beneficios que la arquitectura de diseño REST le trajo a la web, mostrando ejemplos concretos sobre su uso, y casos de éxito. Además, realizaremos una introducción de los conceptos básicos, y mostraremos una serie de pasos y consejos para crear aplicaciones REST, y entender aquellas que se ofrecen a lo largo de la web. Finalmente, dedicaremos un momento a comentar sobre los principales agregados que tiene REST, que hacen de la arquitectura algo mejor y más completo. Hablaremos de autenticación y seguridad, paginado, manejo de errores, y más.

Transcript of Simplemente REST

Simplemente

RESTGabriel Fagúndez de los Reyes

2.500.000.000usuarios

60.000.000.000.000.000.000páginas

9.000.000Facebook apps

¿Habrán imaginado este crecimiento al momento de "inventar" la web?

NO

La evolución de Internet,reveló una necesidad...

Protocolo de comunicación entre clientes y servicios web

CORBA

XML-RPC

SOAP

RESTRepresentational State Transfer

¿Qué es REST?

¿Qué necesidad cubre?

APIInterfaz de programación de aplicaciones

JSONJavaScript Object Notation

Demo_

Aplicando REST en 4 pasos

Elementos de información

Elementos de información

users

Acceso a los elementos de información

Acceso a los elementos de información

/users/:id

Códigos de estado HTTP

[200 OK]

Códigos de estado HTTP

Comunicación sin estado

Comunicación sin estado

/users/gabrielfagundez/repos

Tips :)

GET https://api.github.com?type=users&id=captainkidd

Usa recursos para acceder a los objetos

GET https://api.github.com?type=users&id=captainkidd

GET https://api.github.com/users/captainkidd

GET https://api.github.com/users/captainkidd/edit

URIs únicas, sin acciones

GET https://api.github.com/users/captainkidd/edit

PUT https://api.github.com/users/captainkidd

GET https://api.github.com/users/captainkidd/repos.pdf

GET https://api.github.com/users/captainkidd/repos.pdf

URIs independientes del formato

GET https://api.github.com/users/captainkidd/repos.pdf

GET https://api.github.com/users/captainkidd/repos

Accept: application/pdf

GET https://api.github.com/gists/page/22/per_page/2

GET https://api.github.com/gists/page/22/per_page/2

Operaciones y filtrado con parámetros

GET https://api.github.com/gists/page/22/per_page/2

GET https://api.github.com/gists?page=22&per_page=2

GET https://api.github.com/users/captainkidd/repos

GET https://api.github.com/users/captainkidd/repos

Estructura lógica

No reinventes la rueda, usa HTTP

GET“¿Me das este recurso?”

POST“Tomá, poné esta información en su lugar”

PUT“Tomá información actualizada, sustituí el anterior objeto”

PATCH“Cambiá parte de la información por ésta que te envío”

DELETE“Borralo”

HEAD“Solo dame los cabezales,

quiero saber si mi información está ahí”

Y ante cada consulta, una respuesta

Success

Success

200OK

201Created

Success

200OK

201Created

202Accepted

Success

200OK

204No Content

Success201

Created

202Accepted

200OK

206Partial Content

Success

204No Content

201Created

202Accepted

200OK

Redirection

301Moved Permanently

Redirection

304Not Modified

Redirection

301Moved Permanently

307Temporary Redirect

Redirection

304Not Modified

301Moved Permanently

Client Error

400Bad Request

Client Error

401Unauthorized

Client Error

400Bad Request

402Payment Required

Client Error

401Unauthorized

400Bad Request

404Not Found

Client Error

402Payment Required 401

Unauthorized

400Bad Request

408Request Timeout

Client Error

404Not Found

402Payment Required 401

Unauthorized

400Bad Request

412Precondition Failed

Client Error

408Request Timeout

404Not Found

402Payment Required 401

Unauthorized

400Bad Request

Server Error

500Internal Server Error

Server Error

501Not Implemented

Server Error

500Internal Server Error

503Service Unavailable

Server Error

501Not Implemented

500Internal Server Error

Simple.

Beyond REST...

Headers

Caché

Manejo de errores

Seguridad

HeadersMetadata

Accept: text/plain

CachéPerformance

Proxy - HTTP

Manejo de ErroresErrores para humanos

HTTP/1.1 415 Unsupported Media Type

{

"message": "<...> Must accept 'application/json'.", "documentation_url": "http://developer.github.com/v3"

}

SeguridadAcceso controlado

Basic AuthenticationNombre de usuario y contraseña

curl -X GET https://api.github.com/users/gabrielfagundez -i -H

'Authorization: Basic QNfosnd$eF30fmFppPw12ddD1s=='

OAuth V2

OAuth V2

APP

"La simplicidad es la mayor sofisticación"

Leonardo da Vinci

¿Preguntas?

@gabrielfagundez