restful api - gdg tech talk - novembro de 2014

126
fonte: http://shishkin.files.wordpress.com/2012/02/rest-v2-0.png

Upload: marlon-carvalho

Post on 05-Jul-2015

391 views

Category:

Software


1 download

DESCRIPTION

O desenvolvimento de sistemas monolíticos é passado. No mundo atual, onde os dispositivos móveis estão dominando, não faz mais sentido desenvolver um sistema fechado, que não pode se comunicar e prover dados para dispositivos móveis através de APIs. E, quando o assunto é API, há um monte de confusão. Muitos dizem que sua API é REST. Mas, será que é mesmo? Uma análise superficial em muitas APIs disponibilizadas pela Internet demonstra que não é bem assim. O objetivo desta palestra é demonstrar as ideias por trás do termo RESTful e como elas se aplicam no desenvolvimento de APIs.

TRANSCRIPT

Page 1: RESTful API - GDG Tech Talk - Novembro de 2014

fonte: http://shishkin.files.wordpress.com/2012/02/rest-v2-0.png

Page 2: RESTful API - GDG Tech Talk - Novembro de 2014

@marlonscarvalho

marlon.carvalho.963

+MarlonCarvalho

profile/view?id=113395968

Page 3: RESTful API - GDG Tech Talk - Novembro de 2014

pplicationrogrammingnterface

A

P

I

Page 4: RESTful API - GDG Tech Talk - Novembro de 2014
Page 5: RESTful API - GDG Tech Talk - Novembro de 2014
Page 6: RESTful API - GDG Tech Talk - Novembro de 2014
Page 7: RESTful API - GDG Tech Talk - Novembro de 2014

RMISOAPDCOM

XML-RPC

Page 8: RESTful API - GDG Tech Talk - Novembro de 2014
Page 9: RESTful API - GDG Tech Talk - Novembro de 2014
Page 10: RESTful API - GDG Tech Talk - Novembro de 2014
Page 11: RESTful API - GDG Tech Talk - Novembro de 2014

R E S T

Page 12: RESTful API - GDG Tech Talk - Novembro de 2014
Page 13: RESTful API - GDG Tech Talk - Novembro de 2014
Page 14: RESTful API - GDG Tech Talk - Novembro de 2014

R E

S

T

PRESENTATIONAL

TATE

RANSFER

Page 15: RESTful API - GDG Tech Talk - Novembro de 2014

NÃO É UM PADRÃO

Page 16: RESTful API - GDG Tech Talk - Novembro de 2014

NÃO É UM FRAMEWORK

Page 17: RESTful API - GDG Tech Talk - Novembro de 2014

ESTILO ARQUITETURAL

Page 18: RESTful API - GDG Tech Talk - Novembro de 2014
Page 19: RESTful API - GDG Tech Talk - Novembro de 2014

Por que ser REST?

Page 20: RESTful API - GDG Tech Talk - Novembro de 2014
Page 21: RESTful API - GDG Tech Talk - Novembro de 2014

http://martinfowler.com/articles/richardsonMaturityModel.html

Page 22: RESTful API - GDG Tech Talk - Novembro de 2014

JSON XMLVS

Page 23: RESTful API - GDG Tech Talk - Novembro de 2014

RECURSOSTUDO É UM RECURSO

Page 24: RESTful API - GDG Tech Talk - Novembro de 2014

SOAPOPERAÇÕES MÉTODOS PROCEDURES

Page 25: RESTful API - GDG Tech Talk - Novembro de 2014
Page 26: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/<RECURSOS>

Page 27: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/<RECURSOS>

Page 28: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/<RECURSOS>

Page 29: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/<RECURSOS>

Page 30: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/TIPOS

Page 31: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS

Page 32: RESTful API - GDG Tech Talk - Novembro de 2014

PLURALUSE O PLURAL PARA REFERENCIAR RECURSOS

Page 33: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJASHTTPS://API.BEBUM.COM/CERVEJA

Page 34: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/1234

Page 35: RESTful API - GDG Tech Talk - Novembro de 2014

/CERVEJAS?ID=1234HTTPS://API.BEBUM.COM

Page 36: RESTful API - GDG Tech Talk - Novembro de 2014
Page 37: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/ TIPOS/123/CERVEJAS/123/COMENTARIOS

Page 38: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/TIPOS/1/CERVEJAS

Page 39: RESTful API - GDG Tech Talk - Novembro de 2014

http://martinfowler.com/articles/richardsonMaturityModel.html

Page 40: RESTful API - GDG Tech Talk - Novembro de 2014

HTTP METHODSGET POST PUT DELETE PATCH OPTIONS HEAD

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

Page 41: RESTful API - GDG Tech Talk - Novembro de 2014

/CERVEJAS?ACAO=LISTAR/CERVEJAS/LISTARHTTPS://API.BEBUM.COM

Page 42: RESTful API - GDG Tech Talk - Novembro de 2014

NUNCA USE VERBOS NA URI…OU QUASE NUNCA…

Page 43: RESTful API - GDG Tech Talk - Novembro de 2014
Page 44: RESTful API - GDG Tech Talk - Novembro de 2014

GETHTTPS://API.BEBUM.COM/CERVEJAS

Page 45: RESTful API - GDG Tech Talk - Novembro de 2014

[{ "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" }

}]

Page 46: RESTful API - GDG Tech Talk - Novembro de 2014

POSTHTTPS://API.BEBUM.COM/CERVEJAS

Page 47: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }

Page 48: RESTful API - GDG Tech Talk - Novembro de 2014

DELETEHTTPS://API.BEBUM.COM/CERVEJAS

Page 49: RESTful API - GDG Tech Talk - Novembro de 2014

GETHTTPS://API.BEBUM.COM/CERVEJAS/1234

Page 50: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }

Page 51: RESTful API - GDG Tech Talk - Novembro de 2014

PUTHTTPS://API.BEBUM.COM/CERVEJAS/1234

Page 52: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }

Page 53: RESTful API - GDG Tech Talk - Novembro de 2014

DELETEHTTPS://API.BEBUM.COM/CERVEJAS/1234

Page 54: RESTful API - GDG Tech Talk - Novembro de 2014

PATCHHTTPS://API.BEBUM.COM/CERVEJAS/1234

Page 55: RESTful API - GDG Tech Talk - Novembro de 2014

PATCH VS PUT

Page 56: RESTful API - GDG Tech Talk - Novembro de 2014

http://www.ietf.org/rfc/rfc5789.txt

A new method is necessary to improve interoperability and prevent errors. The PUT method is already defined to overwrite a resource with a complete new body, and

cannot be reused to do partial changes.

Page 57: RESTful API - GDG Tech Talk - Novembro de 2014

GET NUNCA ALTERA DADOS!

Page 58: RESTful API - GDG Tech Talk - Novembro de 2014

GETHTTPS://API.BEBUM.COM/

CERVEJAS/1234/EDITAR?NOME=SCHIN

Page 59: RESTful API - GDG Tech Talk - Novembro de 2014

GETHTTPS://API.BEBUM.COM/ CERVEJAS/DELETE/1234

Page 60: RESTful API - GDG Tech Talk - Novembro de 2014

VERBOSDOIS CASOS ONDE ELES SÃO PERMITIDOS

Page 61: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/BUSCARHTTPS://API.BEBUM.COM/CALCULAR

Page 62: RESTful API - GDG Tech Talk - Novembro de 2014

CREATE RETRIEVE UPDATE DELETEPOST PUT DELETEGET

PATCH

Page 63: RESTful API - GDG Tech Talk - Novembro de 2014

PUTHTTPS://API.BEBUM.COM/CERVEJAS/1234

Não existe uma cerveja com ID=1234

Page 64: RESTful API - GDG Tech Talk - Novembro de 2014

"If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be

considered as a modified version of the one residing on the origin server. If the Request-URI

does not point to an existing resource, and that URI is capable of being defined as a new

resource by the requesting user agent, the origin server can create the resource with that URI. "

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

Page 65: RESTful API - GDG Tech Talk - Novembro de 2014

HTTP STATUS CODES200 - 300 - 400 - 500

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Page 66: RESTful API - GDG Tech Talk - Novembro de 2014
Page 67: RESTful API - GDG Tech Talk - Novembro de 2014

200 OK 201 CREATED 202 ACCEPTED

204 NO CONTENT 206 PARTIAL CONTENT

Page 68: RESTful API - GDG Tech Talk - Novembro de 2014

GET HTTPS://API.BEBUM.COM/CERVEJAS200 OK

206 PARTIAL RESPONSE

Page 69: RESTful API - GDG Tech Talk - Novembro de 2014

POST HTTPS://API.BEBUM.COM/CERVEJAS201 CREATED

Page 70: RESTful API - GDG Tech Talk - Novembro de 2014

PUT HTTPS://API.BEBUM.COM/CERVEJAS/1200 OK

Page 71: RESTful API - GDG Tech Talk - Novembro de 2014

DELETEHTTPS://API.BEBUM.COM/CERVEJAS/1

200 OK204 NO CONTENT

Page 72: RESTful API - GDG Tech Talk - Novembro de 2014

301 MOVED PERM. 307 TEMP. REDIRECT

Page 73: RESTful API - GDG Tech Talk - Novembro de 2014

422 UNPROCESSABLE ENTITY 401 UNAUTHORIZED

404 NOT FOUND 409 CONFLICT

429 TOO MANY REQS

Page 74: RESTful API - GDG Tech Talk - Novembro de 2014

401 UNAUTHORIZEDPOST HTTPS://API.BEBUM.COM/CERVEJAS

Page 75: RESTful API - GDG Tech Talk - Novembro de 2014

404 NOT FOUNDDELETE HTTPS://API.BEBUM.COM/CERVEJAS/1

Page 76: RESTful API - GDG Tech Talk - Novembro de 2014

409 CONFLICTPUT HTTPS://API.BEBUM.COM/CERVEJAS/1

Page 77: RESTful API - GDG Tech Talk - Novembro de 2014

422 UNPROCESSABLE ENTITYPOST HTTPS://API.BEBUM.COM/CERVEJAS

Page 78: RESTful API - GDG Tech Talk - Novembro de 2014

400 BAD REQUESTPOST HTTPS://API.BEBUM.COM/CERVEJAS

Page 79: RESTful API - GDG Tech Talk - Novembro de 2014

{ codigo: 1, descricao: “Erro por falta de informações…”, url: “http://api.bebum.com/doc/erro/1", mensagem: “Este erro ocorreu porque…" }

Page 80: RESTful API - GDG Tech Talk - Novembro de 2014

200 OK

POSTHTTPS://API.BEBUM.COM/CERVEJAS

Page 81: RESTful API - GDG Tech Talk - Novembro de 2014

500 INTERNAL ERROR 501 NOT IMPLEMENT.

503 SRV. UNAVAILABLE

Page 82: RESTful API - GDG Tech Talk - Novembro de 2014

EVITE INVENTAR NOVOS Não crie novos status code. Já existem

muitos e são suficientes!

Page 83: RESTful API - GDG Tech Talk - Novembro de 2014

VERSIONAMENTO TUDO EVOLUI. OU DEVERIA…

http://stackoverflow.com/questions/389169/best-practices-for-api-versioning

Page 84: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/v1/

Page 85: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/2014-09-27/

Page 86: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/12355613/

Page 87: RESTful API - GDG Tech Talk - Novembro de 2014

CABEÇALHO PERSONALIZADO X-VERSION: 1

Page 88: RESTful API - GDG Tech Talk - Novembro de 2014

CABEÇALHO EXISTENTE Accept: application/json; v1

Page 89: RESTful API - GDG Tech Talk - Novembro de 2014

EVITE

Accept: application/json; v1.0.1

Page 90: RESTful API - GDG Tech Talk - Novembro de 2014

JSON XML PNG

Page 91: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/1234.json

Page 92: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/1234.xml

Page 93: RESTful API - GDG Tech Talk - Novembro de 2014
Page 94: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/1234

Accept: application/jsonGET

Page 95: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/1234

Accept: application/xmlGET

Page 96: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/1234

Accept: image/pngGET

Page 97: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJASContent-Type: application/json

POST

Page 98: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJASContent-Type: application/xml

POST

Page 99: RESTful API - GDG Tech Talk - Novembro de 2014

FILTROS E se quisermos cervejas com nome

“Stella"?

Page 100: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS/STELLAGET

Page 101: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS?NOME=STELLAGET

Page 102: RESTful API - GDG Tech Talk - Novembro de 2014

PAGINAÇÃO E se houver muitas cervejas?

Page 103: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS?offset=1&limit=10 GET

Page 104: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS

accept: application/jsonGET

x-offset: 1x-limit: 15

Page 105: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS

Accept: application/jsonGET

Range: entidade=1-10

status: 206 ou 416

REQUEST:

RESPONSE:

Content-Range: entidade=1-10/1000

Page 106: RESTful API - GDG Tech Talk - Novembro de 2014

http://stackoverflow.com/questions/924472/paging-in-a-rest-collection

https://devcenter.heroku.com/articles/platform-api-reference

Page 107: RESTful API - GDG Tech Talk - Novembro de 2014

PARTIAL RESPONSES Preocupe-se com os dispositivos móveis

http://yaoganglian.com/articles/partial-response/

http://googlecode.blogspot.ca/2010/03/making-apis-faster-introducing-partial.html

Page 108: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1234, "campo1": "Teste", "campo2": { "id": 1, "nome": "Teste" }, "campo3": "Teste", "campo4": { "id": 1, "nome": "Teste" }, "campo5": "Teste", "campo6": { "id": 1, "nome": "Teste" }, "nome": "Teste", "campo7": { "id": 1, "nome": "Teste" }, "campo8": "Teste", "campo9": { "id": 1, "nome": "Teste" } }

500kb

Page 109: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1234, "campo1": "Teste", "campo2": { "id": 1, "nome": "Teste" } }

2kb

Page 110: RESTful API - GDG Tech Talk - Novembro de 2014

http://googlecode.blogspot.ca/2010/03/making-apis-faster-introducing-partial.html

Page 111: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS?fields=id,nomeGET

Status Code: 206

Page 112: RESTful API - GDG Tech Talk - Novembro de 2014

HTTPS://API.BEBUM.COM/CERVEJAS?fields=id,nome,tipo(nome)GET

Status Code: 206

Page 113: RESTful API - GDG Tech Talk - Novembro de 2014

http://yaoganglian.com/articles/partial-response/

Page 114: RESTful API - GDG Tech Talk - Novembro de 2014

SEGURANÇA Como tornar minha API segura?

Page 115: RESTful API - GDG Tech Talk - Novembro de 2014
Page 116: RESTful API - GDG Tech Talk - Novembro de 2014

http://martinfowler.com/articles/richardsonMaturityModel.html

Page 117: RESTful API - GDG Tech Talk - Novembro de 2014

HATEOAS Hypertext As The Engine

Of Application State

Page 118: RESTful API - GDG Tech Talk - Novembro de 2014
Page 119: RESTful API - GDG Tech Talk - Novembro de 2014

GETHTTPS://API.BEBUM.COM/CERVEJAS

Page 120: RESTful API - GDG Tech Talk - Novembro de 2014

{ id: 1, nome: “Stella Artois” links: [{ href="http://api.bebum.com/cervejas/1", rel="self" },{ href="http://api.bebum.com/cervejas/1/comments", rel="comments" },{ href="http://api.bebum.com/cervejas/1", rel="like" }] }

Page 121: RESTful API - GDG Tech Talk - Novembro de 2014

HATEOAS A API diz o que você pode fazer com

aquele recurso

Page 122: RESTful API - GDG Tech Talk - Novembro de 2014

POSTHTTPS://API.BEBUM.COM/CERVEJAS

Page 123: RESTful API - GDG Tech Talk - Novembro de 2014

Location: https://api.bebum.com/cervejas/1

HEADER

Page 124: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1234, "nome": "Delirium Tremens”, "links": { "link": { "rel": "like", "href": "https:…/1/like" } }

Page 125: RESTful API - GDG Tech Talk - Novembro de 2014

{ "id": 1, "nome": "Pilsen”, "links": { "link": { "rel": "cervejas", "uri": "…/tipos/1/cervejas" } }

Page 126: RESTful API - GDG Tech Talk - Novembro de 2014

http://www.infoq.com/br/articles/rest-introduction

Livros Indicados:

Artigos Indicados:

http://apigee.com/about/resources/ebooks/web-api-designhttp://sensedia.com/br/webinar-design-de-api-restful

http://restcookbook.com/