fonte: http://shishkin.files.wordpress.com/2012/02/rest-v2-0.png
@marlonscarvalho 
marlon.carvalho.963 
+MarlonCarvalho 
profile/view?id=113395968
pplication 
rogramming 
nterface 
A 
P 
I
XML-RPC 
DCOM 
SOAP 
RMI
R E S T
R E 
S 
T 
PRESENTATIONAL 
TATE 
RANSFER
NÃO É UM PADRÃO
NÃO É UM FRAMEWORK
ESTILO ARQUITETURAL
Por que ser REST?
http://martinfowler.com/articles/richardsonMaturityModel.html
JSONVSXML
RECURSOS 
TUDO É UM RECURSO
SOAP 
OPERAÇÕES 
MÉTODOS 
PROCEDURES
HTTPS://API.BEBUM.COM/<RECURSOS>
HTTPS://API.BEBUM.COM/<RECURSOS>
HTTPS://API.BEBUM.COM/<RECURSOS>
HTTPS://API.BEBUM.COM/<RECURSOS>
HTTPS://API.BEBUM.COM/TIPOS
HTTPS://API.BEBUM.COM/CERVEJAS
PLURAL USE O PLURAL PARA REFERENCIAR RECURSOS
HTTPS://API.BEBUM.COM/CERVEJAS 
HTTPS://API.BEBUM.COM/CERVEJA
HTTPS://API.BEBUM.COM/CERVEJAS/1234
HTTPS://API.BEBUM.COM 
/CERVEJAS?ID=1234
HTTPS://API.BEBUM.COM/ 
TIPOS/123/CERVEJAS/123/COMENTARIOS
HTTPS://API.BEBUM.COM/TIPOS/1/CERVEJAS
http://martinfowler.com/articles/richardsonMaturityModel.html
HTTP METHODS 
GET POST PUT DELETE PATCH OPTIONS HEAD 
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
HTTPS://API.BEBUM.COM 
/CERVEJAS/LISTAR 
/CERVEJAS?ACAO=LISTAR
NUNCA USE VERBOS NA URI 
…OU QUASE NUNCA…
GET 
HTTPS://API.BEBUM.COM/CERVEJAS
[{ 
"id": 1234, 
"nome": "Delirium Tremens”, 
"tipo": { 
"id": 1, 
"nome": "Tripel" 
} 
}]
POST 
HTTPS://API.BEBUM.COM/CERVEJAS
{ 
"id": 1234, 
"nome": "Delirium Tremens”, 
"tipo": { 
"id": 1, 
"nome": "Tripel" 
} 
}
DELETE 
HTTPS://API.BEBUM.COM/CERVEJAS
GET 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
{ 
"id": 1234, 
"nome": "Delirium Tremens”, 
"tipo": { 
"id": 1, 
"nome": "Tripel" 
} 
}
PUT 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
{ 
"id": 1234, 
"nome": "Delirium Tremens”, 
"tipo": { 
"id": 1, 
"nome": "Tripel" 
} 
}
DELETE 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
PATCH 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
PATCH VS PUT
A new method is necessary to improve interoperability and 
prevent errors. The PUT method is already defined to 
overwrite...
GET 
NUNCA ALTERA DADOS!
GET 
HTTPS://API.BEBUM.COM/ 
CERVEJAS/1234/EDITAR?NOME=SCHIN
GET 
HTTPS://API.BEBUM.COM/ 
CERVEJAS/DELETE/1234
VERBOS DOIS CASOS ONDE ELES SÃO PERMITIDOS
HTTPS://API.BEBUM.COM/BUSCAR 
HTTPS://API.BEBUM.COM/CALCULAR
PATCH 
POST GET PUT DELETE 
CREATE RETRIEVE UPDATE DELETE
PUT 
HTTPS://API.BEBUM.COM/CERVEJAS/1234 
Não existe uma cerveja com ID=1234
"If the Request-URI refers to an already existing 
resource, the enclosed entity SHOULD be 
considered as a modified versi...
200 - 300 - 400 - 500 
HTTP STATUS CODES 
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
200 OK 
201 CREATED 
202 ACCEPTED 
204 NO CONTENT 
206 PARTIAL CONTENT
GET HTTPS://API.BEBUM.COM/CERVEJAS 
200 OK 
206 PARTIAL RESPONSE
POSTHTTPS://API.BEBUM.COM/CERVEJAS 
201 CREATED
PUT HTTPS://API.BEBUM.COM/CERVEJAS/1 
200 OK
DELETEHTTPS://API.BEBUM.COM/CERVEJAS/1 
204 NO CONTENT 
200 OK
301 MOVED PERM. 
307 TEMP. REDIRECT
422 UNPROCESSABLE ENTITY 
401 UNAUTHORIZED 
404 NOT FOUND 
409 CONFLICT 
429 TOO MANY REQS
POST HTTPS://API.BEBUM.COM/CERVEJAS 
401 UNAUTHORIZED
DELETE HTTPS://API.BEBUM.COM/CERVEJAS/1 
404 NOT FOUND
PUT HTTPS://API.BEBUM.COM/CERVEJAS/1 
409 CONFLICT
POST HTTPS://API.BEBUM.COM/CERVEJAS 
422 UNPROCESSABLE ENTITY
POST HTTPS://API.BEBUM.COM/CERVEJAS 
400 BAD REQUEST
{ 
codigo: 1, 
descricao: “Erro por falta de informações…”, 
url: “http://api.bebum.com/doc/erro/1", 
mensagem: “Este erro...
POST 
HTTPS://API.BEBUM.COM/CERVEJAS 
200 OK
500 INTERNAL ERROR 
501 NOT IMPLEMENT. 
503 SRV. UNAVAILABLE
EVITE INVENTAR NOVOS 
Não crie novos status code. Já existem 
muitos e são suficientes!
VERSIONAMENTO 
TUDO EVOLUI. OU DEVERIA… 
http://stackoverflow.com/questions/389169/best-practices- 
for-api-versioning
HTTPS://API.BEBUM.COM/v1/
HTTPS://API.BEBUM.COM/2014-09-27/
HTTPS://API.BEBUM.COM/12355613/
CABEÇALHO PERSONALIZADO 
X-VERSION: 1
CABEÇALHO EXISTENTE 
Accept: application/json; v1
EVITE 
Accept: application/json; v1.0.1
JSON XML PNG
HTTPS://API.BEBUM.COM/CERVEJAS/1234.json
HTTPS://API.BEBUM.COM/CERVEJAS/1234.xml
GET 
Accept: application/json 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
GET 
Accept: application/xml 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
GET 
Accept: image/png 
HTTPS://API.BEBUM.COM/CERVEJAS/1234
POST 
Content-Type: application/json 
HTTPS://API.BEBUM.COM/CERVEJAS
POST 
Content-Type: application/xml 
HTTPS://API.BEBUM.COM/CERVEJAS
FILTROS 
E se quisermos cervejas com nome 
“Stella"?
GET 
HTTPS://API.BEBUM.COM/CERVEJAS/STELLA
GET 
HTTPS://API.BEBUM.COM/CERVEJAS?NOME=STELLA
PAGINAÇÃO 
E se houver muitas cervejas?
GET 
HTTPS://API.BEBUM.COM/CERVEJAS?offset=1&limit=10
GET 
x-offset: 1 
x-limit: 15 
accept: application/json 
HTTPS://API.BEBUM.COM/CERVEJAS
REQUEST: 
GET 
Accept: application/json 
Range: entidade=1-10 
HTTPS://API.BEBUM.COM/CERVEJAS 
RESPONSE: 
status: 206 ou 4...
http://stackoverflow.com/questions/924472/ 
paging-in-a-rest-collection 
https://devcenter.heroku.com/articles/ 
platform-...
PARTIAL RESPONSES 
Preocupe-se com os dispositivos móveis 
http://yaoganglian.com/articles/partial-response/ 
http://googl...
{ 
"id": 1234, 
"campo1": "Teste", 
"campo2": { 
"id": 1, 
"nome": "Teste" 
}, 
"campo3": "Teste", 
"campo4": { 
"id": 1, ...
{ 
"id": 1234, 
"campo1": "Teste", 
"campo2": { 
2kb 
"id": 1, 
"nome": "Teste" 
} 
}
http://googlecode.blogspot.ca/2010/03/making-apis- 
faster-introducing-partial.html
GET 
HTTPS://API.BEBUM.COM/CERVEJAS?fields=id,nome 
Status Code: 206
GET 
HTTPS://API.BEBUM.COM/CERVEJAS?fields=id,nome,tipo(nome) 
Status Code: 206
http://yaoganglian.com/articles/partial-response/
SEGURANÇA 
Como tornar minha API segura?
http://martinfowler.com/articles/richardsonMaturityModel.html
HATEOAS 
Hypertext As The Engine 
Of Application State
GET 
HTTPS://API.BEBUM.COM/CERVEJAS
{ 
id: 1, 
nome: “Stella Artois” 
links: [{ 
href="http://api.bebum.com/cervejas/1", 
rel="self" 
},{ 
href="http://api.be...
HATEOAS 
A API diz o que você pode fazer com 
aquele recurso
POST 
HTTPS://API.BEBUM.COM/CERVEJAS
HEADER 
Location: 
https://api.bebum.com/cervejas/1
{ 
"id": 1234, 
"nome": "Delirium Tremens”, 
"links": { 
"link": { 
"rel": "like", 
"href": "https:…/1/like" 
} 
}
{ 
"id": 1, 
"nome": "Pilsen”, 
"links": { 
"link": { 
"rel": "cervejas", 
"uri": "…/tipos/1/cervejas" 
} 
}
Livros Indicados: 
Artigos Indicados: 
http://www.infoq.com/br/articles/rest-introduction 
http://apigee.com/about/resourc...
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
RESTful API - GDG Tech Talk - Novembro de 2014
Próximos SlideShares
Carregando em…5
×

RESTful API - GDG Tech Talk - Novembro de 2014

889 visualizações

Publicada em

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.

Publicada em: Software
0 comentários
10 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
889
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
25
Comentários
0
Gostaram
10
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

RESTful API - GDG Tech Talk - Novembro de 2014

  1. 1. fonte: http://shishkin.files.wordpress.com/2012/02/rest-v2-0.png
  2. 2. @marlonscarvalho marlon.carvalho.963 +MarlonCarvalho profile/view?id=113395968
  3. 3. pplication rogramming nterface A P I
  4. 4. XML-RPC DCOM SOAP RMI
  5. 5. R E S T
  6. 6. R E S T PRESENTATIONAL TATE RANSFER
  7. 7. NÃO É UM PADRÃO
  8. 8. NÃO É UM FRAMEWORK
  9. 9. ESTILO ARQUITETURAL
  10. 10. Por que ser REST?
  11. 11. http://martinfowler.com/articles/richardsonMaturityModel.html
  12. 12. JSONVSXML
  13. 13. RECURSOS TUDO É UM RECURSO
  14. 14. SOAP OPERAÇÕES MÉTODOS PROCEDURES
  15. 15. HTTPS://API.BEBUM.COM/<RECURSOS>
  16. 16. HTTPS://API.BEBUM.COM/<RECURSOS>
  17. 17. HTTPS://API.BEBUM.COM/<RECURSOS>
  18. 18. HTTPS://API.BEBUM.COM/<RECURSOS>
  19. 19. HTTPS://API.BEBUM.COM/TIPOS
  20. 20. HTTPS://API.BEBUM.COM/CERVEJAS
  21. 21. PLURAL USE O PLURAL PARA REFERENCIAR RECURSOS
  22. 22. HTTPS://API.BEBUM.COM/CERVEJAS HTTPS://API.BEBUM.COM/CERVEJA
  23. 23. HTTPS://API.BEBUM.COM/CERVEJAS/1234
  24. 24. HTTPS://API.BEBUM.COM /CERVEJAS?ID=1234
  25. 25. HTTPS://API.BEBUM.COM/ TIPOS/123/CERVEJAS/123/COMENTARIOS
  26. 26. HTTPS://API.BEBUM.COM/TIPOS/1/CERVEJAS
  27. 27. http://martinfowler.com/articles/richardsonMaturityModel.html
  28. 28. HTTP METHODS GET POST PUT DELETE PATCH OPTIONS HEAD http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
  29. 29. HTTPS://API.BEBUM.COM /CERVEJAS/LISTAR /CERVEJAS?ACAO=LISTAR
  30. 30. NUNCA USE VERBOS NA URI …OU QUASE NUNCA…
  31. 31. GET HTTPS://API.BEBUM.COM/CERVEJAS
  32. 32. [{ "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }]
  33. 33. POST HTTPS://API.BEBUM.COM/CERVEJAS
  34. 34. { "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }
  35. 35. DELETE HTTPS://API.BEBUM.COM/CERVEJAS
  36. 36. GET HTTPS://API.BEBUM.COM/CERVEJAS/1234
  37. 37. { "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }
  38. 38. PUT HTTPS://API.BEBUM.COM/CERVEJAS/1234
  39. 39. { "id": 1234, "nome": "Delirium Tremens”, "tipo": { "id": 1, "nome": "Tripel" } }
  40. 40. DELETE HTTPS://API.BEBUM.COM/CERVEJAS/1234
  41. 41. PATCH HTTPS://API.BEBUM.COM/CERVEJAS/1234
  42. 42. PATCH VS PUT
  43. 43. 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. http://www.ietf.org/rfc/rfc5789.txt
  44. 44. GET NUNCA ALTERA DADOS!
  45. 45. GET HTTPS://API.BEBUM.COM/ CERVEJAS/1234/EDITAR?NOME=SCHIN
  46. 46. GET HTTPS://API.BEBUM.COM/ CERVEJAS/DELETE/1234
  47. 47. VERBOS DOIS CASOS ONDE ELES SÃO PERMITIDOS
  48. 48. HTTPS://API.BEBUM.COM/BUSCAR HTTPS://API.BEBUM.COM/CALCULAR
  49. 49. PATCH POST GET PUT DELETE CREATE RETRIEVE UPDATE DELETE
  50. 50. PUT HTTPS://API.BEBUM.COM/CERVEJAS/1234 Não existe uma cerveja com ID=1234
  51. 51. "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
  52. 52. 200 - 300 - 400 - 500 HTTP STATUS CODES http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
  53. 53. 200 OK 201 CREATED 202 ACCEPTED 204 NO CONTENT 206 PARTIAL CONTENT
  54. 54. GET HTTPS://API.BEBUM.COM/CERVEJAS 200 OK 206 PARTIAL RESPONSE
  55. 55. POSTHTTPS://API.BEBUM.COM/CERVEJAS 201 CREATED
  56. 56. PUT HTTPS://API.BEBUM.COM/CERVEJAS/1 200 OK
  57. 57. DELETEHTTPS://API.BEBUM.COM/CERVEJAS/1 204 NO CONTENT 200 OK
  58. 58. 301 MOVED PERM. 307 TEMP. REDIRECT
  59. 59. 422 UNPROCESSABLE ENTITY 401 UNAUTHORIZED 404 NOT FOUND 409 CONFLICT 429 TOO MANY REQS
  60. 60. POST HTTPS://API.BEBUM.COM/CERVEJAS 401 UNAUTHORIZED
  61. 61. DELETE HTTPS://API.BEBUM.COM/CERVEJAS/1 404 NOT FOUND
  62. 62. PUT HTTPS://API.BEBUM.COM/CERVEJAS/1 409 CONFLICT
  63. 63. POST HTTPS://API.BEBUM.COM/CERVEJAS 422 UNPROCESSABLE ENTITY
  64. 64. POST HTTPS://API.BEBUM.COM/CERVEJAS 400 BAD REQUEST
  65. 65. { codigo: 1, descricao: “Erro por falta de informações…”, url: “http://api.bebum.com/doc/erro/1", mensagem: “Este erro ocorreu porque…" }
  66. 66. POST HTTPS://API.BEBUM.COM/CERVEJAS 200 OK
  67. 67. 500 INTERNAL ERROR 501 NOT IMPLEMENT. 503 SRV. UNAVAILABLE
  68. 68. EVITE INVENTAR NOVOS Não crie novos status code. Já existem muitos e são suficientes!
  69. 69. VERSIONAMENTO TUDO EVOLUI. OU DEVERIA… http://stackoverflow.com/questions/389169/best-practices- for-api-versioning
  70. 70. HTTPS://API.BEBUM.COM/v1/
  71. 71. HTTPS://API.BEBUM.COM/2014-09-27/
  72. 72. HTTPS://API.BEBUM.COM/12355613/
  73. 73. CABEÇALHO PERSONALIZADO X-VERSION: 1
  74. 74. CABEÇALHO EXISTENTE Accept: application/json; v1
  75. 75. EVITE Accept: application/json; v1.0.1
  76. 76. JSON XML PNG
  77. 77. HTTPS://API.BEBUM.COM/CERVEJAS/1234.json
  78. 78. HTTPS://API.BEBUM.COM/CERVEJAS/1234.xml
  79. 79. GET Accept: application/json HTTPS://API.BEBUM.COM/CERVEJAS/1234
  80. 80. GET Accept: application/xml HTTPS://API.BEBUM.COM/CERVEJAS/1234
  81. 81. GET Accept: image/png HTTPS://API.BEBUM.COM/CERVEJAS/1234
  82. 82. POST Content-Type: application/json HTTPS://API.BEBUM.COM/CERVEJAS
  83. 83. POST Content-Type: application/xml HTTPS://API.BEBUM.COM/CERVEJAS
  84. 84. FILTROS E se quisermos cervejas com nome “Stella"?
  85. 85. GET HTTPS://API.BEBUM.COM/CERVEJAS/STELLA
  86. 86. GET HTTPS://API.BEBUM.COM/CERVEJAS?NOME=STELLA
  87. 87. PAGINAÇÃO E se houver muitas cervejas?
  88. 88. GET HTTPS://API.BEBUM.COM/CERVEJAS?offset=1&limit=10
  89. 89. GET x-offset: 1 x-limit: 15 accept: application/json HTTPS://API.BEBUM.COM/CERVEJAS
  90. 90. REQUEST: GET Accept: application/json Range: entidade=1-10 HTTPS://API.BEBUM.COM/CERVEJAS RESPONSE: status: 206 ou 416 Content-Range: entidade=1-10/1000
  91. 91. http://stackoverflow.com/questions/924472/ paging-in-a-rest-collection https://devcenter.heroku.com/articles/ platform-api-reference
  92. 92. 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
  93. 93. { "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
  94. 94. { "id": 1234, "campo1": "Teste", "campo2": { 2kb "id": 1, "nome": "Teste" } }
  95. 95. http://googlecode.blogspot.ca/2010/03/making-apis- faster-introducing-partial.html
  96. 96. GET HTTPS://API.BEBUM.COM/CERVEJAS?fields=id,nome Status Code: 206
  97. 97. GET HTTPS://API.BEBUM.COM/CERVEJAS?fields=id,nome,tipo(nome) Status Code: 206
  98. 98. http://yaoganglian.com/articles/partial-response/
  99. 99. SEGURANÇA Como tornar minha API segura?
  100. 100. http://martinfowler.com/articles/richardsonMaturityModel.html
  101. 101. HATEOAS Hypertext As The Engine Of Application State
  102. 102. GET HTTPS://API.BEBUM.COM/CERVEJAS
  103. 103. { 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" }] }
  104. 104. HATEOAS A API diz o que você pode fazer com aquele recurso
  105. 105. POST HTTPS://API.BEBUM.COM/CERVEJAS
  106. 106. HEADER Location: https://api.bebum.com/cervejas/1
  107. 107. { "id": 1234, "nome": "Delirium Tremens”, "links": { "link": { "rel": "like", "href": "https:…/1/like" } }
  108. 108. { "id": 1, "nome": "Pilsen”, "links": { "link": { "rel": "cervejas", "uri": "…/tipos/1/cervejas" } }
  109. 109. Livros Indicados: Artigos Indicados: http://www.infoq.com/br/articles/rest-introduction http://apigee.com/about/resources/ebooks/web-api-design http://sensedia.com/br/webinar-design-de-api-restful http://restcookbook.com/

×