Download - Simplemente REST

Transcript
Page 1: Simplemente REST

Simplemente

RESTGabriel Fagúndez de los Reyes

Page 2: Simplemente REST
Page 3: Simplemente REST

2.500.000.000usuarios

Page 4: Simplemente REST

60.000.000.000.000.000.000páginas

Page 5: Simplemente REST

9.000.000Facebook apps

Page 6: Simplemente REST

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

Page 7: Simplemente REST

NO

Page 8: Simplemente REST

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

Page 9: Simplemente REST

Protocolo de comunicación entre clientes y servicios web

Page 10: Simplemente REST

CORBA

XML-RPC

SOAP

Page 11: Simplemente REST

RESTRepresentational State Transfer

Page 12: Simplemente REST

¿Qué es REST?

Page 13: Simplemente REST

¿Qué necesidad cubre?

Page 14: Simplemente REST

APIInterfaz de programación de aplicaciones

Page 15: Simplemente REST

JSONJavaScript Object Notation

Page 16: Simplemente REST

Demo_

Page 17: Simplemente REST

Aplicando REST en 4 pasos

Page 18: Simplemente REST

Elementos de información

Page 19: Simplemente REST

Elementos de información

users

Page 20: Simplemente REST

Acceso a los elementos de información

Page 21: Simplemente REST

Acceso a los elementos de información

/users/:id

Page 22: Simplemente REST

Códigos de estado HTTP

Page 23: Simplemente REST

[200 OK]

Códigos de estado HTTP

Page 24: Simplemente REST

Comunicación sin estado

Page 25: Simplemente REST

Comunicación sin estado

/users/gabrielfagundez/repos

Page 26: Simplemente REST

Tips :)

Page 28: Simplemente REST

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

Usa recursos para acceder a los objetos

Page 29: Simplemente REST

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

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

Page 31: Simplemente REST

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

URIs únicas, sin acciones

Page 32: Simplemente REST

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

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

Page 33: Simplemente REST

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

Page 34: Simplemente REST

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

URIs independientes del formato

Page 35: Simplemente REST

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

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

Accept: application/pdf

Page 36: Simplemente REST

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

Page 37: Simplemente REST

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

Operaciones y filtrado con parámetros

Page 38: Simplemente REST

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

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

Page 39: Simplemente REST

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

Page 40: Simplemente REST

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

Estructura lógica

Page 41: Simplemente REST

No reinventes la rueda, usa HTTP

Page 42: Simplemente REST

GET“¿Me das este recurso?”

Page 43: Simplemente REST

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

Page 44: Simplemente REST

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

Page 45: Simplemente REST

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

Page 46: Simplemente REST

DELETE“Borralo”

Page 47: Simplemente REST

HEAD“Solo dame los cabezales,

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

Page 48: Simplemente REST

Y ante cada consulta, una respuesta

Page 49: Simplemente REST

Success

Page 50: Simplemente REST

Success

200OK

Page 51: Simplemente REST

201Created

Success

200OK

Page 52: Simplemente REST

201Created

202Accepted

Success

200OK

Page 53: Simplemente REST

204No Content

Success201

Created

202Accepted

200OK

Page 54: Simplemente REST

206Partial Content

Success

204No Content

201Created

202Accepted

200OK

Page 55: Simplemente REST

Redirection

Page 56: Simplemente REST

301Moved Permanently

Redirection

Page 57: Simplemente REST

304Not Modified

Redirection

301Moved Permanently

Page 58: Simplemente REST

307Temporary Redirect

Redirection

304Not Modified

301Moved Permanently

Page 59: Simplemente REST

Client Error

Page 60: Simplemente REST

400Bad Request

Client Error

Page 61: Simplemente REST

401Unauthorized

Client Error

400Bad Request

Page 62: Simplemente REST

402Payment Required

Client Error

401Unauthorized

400Bad Request

Page 63: Simplemente REST

404Not Found

Client Error

402Payment Required 401

Unauthorized

400Bad Request

Page 64: Simplemente REST

408Request Timeout

Client Error

404Not Found

402Payment Required 401

Unauthorized

400Bad Request

Page 65: Simplemente REST

412Precondition Failed

Client Error

408Request Timeout

404Not Found

402Payment Required 401

Unauthorized

400Bad Request

Page 66: Simplemente REST

Server Error

Page 67: Simplemente REST

500Internal Server Error

Server Error

Page 68: Simplemente REST

501Not Implemented

Server Error

500Internal Server Error

Page 69: Simplemente REST

503Service Unavailable

Server Error

501Not Implemented

500Internal Server Error

Page 70: Simplemente REST

Simple.

Page 71: Simplemente REST

Beyond REST...

Page 72: Simplemente REST

Headers

Caché

Manejo de errores

Seguridad

Page 73: Simplemente REST

HeadersMetadata

Page 74: Simplemente REST

Accept: text/plain

Page 75: Simplemente REST

CachéPerformance

Page 76: Simplemente REST

Proxy - HTTP

Page 77: Simplemente REST

Manejo de ErroresErrores para humanos

Page 78: Simplemente REST

HTTP/1.1 415 Unsupported Media Type

{

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

}

Page 79: Simplemente REST

SeguridadAcceso controlado

Page 80: Simplemente REST

Basic AuthenticationNombre de usuario y contraseña

Page 81: Simplemente REST

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

'Authorization: Basic QNfosnd$eF30fmFppPw12ddD1s=='

Page 82: Simplemente REST

OAuth V2

Page 83: Simplemente REST

OAuth V2

Page 84: Simplemente REST

APP

Page 85: Simplemente REST

"La simplicidad es la mayor sofisticación"

Leonardo da Vinci

Page 86: Simplemente REST

¿Preguntas?

@gabrielfagundez