Your SlideShare is downloading. ×
0
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Descobrindo APIs REST
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Descobrindo APIs REST

376

Published on

O crescimento do mercado mobile e a necessidade de prover acesso a serviços existentes para desenvolvedores terceiros popularizaram o uso e disponibilização de APIs REST públicas. Com isso, pontos …

O crescimento do mercado mobile e a necessidade de prover acesso a serviços existentes para desenvolvedores terceiros popularizaram o uso e disponibilização de APIs REST públicas. Com isso, pontos como escalabilidade, versionamento, desacoplamento e encapsulamento tornaram-se centrais no projeto de APIs. Nesta palestra será apresentado o conceito de APIs Hypermedia e como seu uso ajuda no projeto e implementação de APIs mais flexíveis.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
376
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Descobrindo 
 APIs REST
  • 2. Guilherme Cavalcanti github.com/guiocavalcanti
  • 3. Por quê?
  • 4. 1º Definição Hermética
  • 5. 2º apotonick/roar kevinswiber/siren jsonapi.org Como? Por quê? intridea/grape lostisland/sawyer caelum/restfulie
  • 6. 3º What the f* is Representational State Transfer
  • 7. “I am getting frustrated by the number of people calling any HTTP-based interface a REST API.” –Roy Fielding
  • 8. Como?
  • 9. • Problema conhecido por todos • Passo a passo para projetar e implementar uma API REST • Erros comuns, trade-offs e falácias
  • 10. O que é rest e hypermedia?
  • 11. • Estilo arquitetural • Restrições
  • 12. O que é REST/Hypermedia? • Construção de sistemas distribuídos • Em 99% dos casos sistemas que funcionam na Web • Aplicativos mobile conversando com APIs • Aplicativos Web convesando com Aplicativos Web • Walledgarden
  • 13. O processo 1. Entender o workflow que a API irá implementar 2. Construir máquina de estados 3. Construir media types 4. Implementar :)
  • 14. Entender o workflow
  • 15. Entender workflow • Pensar em termos de processos de negócio • Quantos e quais passos serão necessários?
  • 16. Pagamento Pedido
  • 17. O Problema • Ciclo de pedido • Ciclo de pagamento • Independentes • Comunicação assíncrona através de message queue • Maximiza throughput
  • 18. Pagamento Pedido Message Queue
  • 19. Simplificado • Na verdade são 3 ciclos independentes • Mais lucros • Dica: Starbucks Does Not Use Two-Phase Commit
  • 20. Criar máquina de estados
  • 21. Criar máquina de estados: cliente Pedir Sanduíche preparado Atualizar Pagar Pagamento realizado Pegar Sanduíche entregue
  • 22. Caixa Escolher pedido Sanduíche Escolhido Lançar 
 pagamento Pagamento Lançado
  • 23. Construir media type
  • 24. ( o que é media type? )
  • 25. “To some extent, people get REST wrong because I failed to include enough detail on media type design within my dissertation. That’s because I ran out of time […]” –Roy T. Fielding
  • 26. Media types • É o que o cliente precisa saber para entender: • Comportamento (ou seja, quais transições saem de ume estado) • Semântica de alguns atributos da representação
  • 27. Exemplo: text/html • Ao clicar no <a>: Requisição GET  para href • Ao submeter um <form>: Requisição method para action
  • 28. Exemplo: text/html • O browser só precisa entender o media type. • Tanto faz se você está vendo o extrato da sua conta do banco ou um verbete na Wikipedia • media type = comportamento + semântica
  • 29. Exemplo: APIs • Erros de validação • Internacionalização de mensagens • URLs
  • 30. Media types • É por isso que sempre dizem que APIs REST não precisam de Documentação • Você só precisa descrever os media types utilizados • A semântica dos métodos HTTP já é bem definida • Utilizado nos cabeçalhos Accept e Content-­‐type
  • 31. Voltando: Construir media type
  • 32. Voltando: Construir media type
  • 33. Sanduíche Variante Feito por terceiros application/vnd.subway.sanduiche-­‐v1+json Nome
  • 34. Sanduíche: Semântica • id   • created_at   • pao   • queijo   • status   • updated_at
  • 35. Pagamento: Semântica • id   • created_at   • numero_cartao   • expira_em   • valor
  • 36. Semântica • Atributos que tem o mesmo significado para todos os recursos da API • Comportamentos inesperados (erros de validação)
  • 37. Comportamento: Relacionamentos {      "links":  [          {  "rel":  "self",  "href":  "/pedidos/1"  },          {  "rel":  "pagamento",  "href":  "/pagamentos/pedidos/1"  }      ]   }
  • 38. Comportamento: Relacionamentos • Representam as transições da nossa máquina de estados • Aumentam o desacoplamento • O cliente não precisa saber URLs a priori
  • 39. Mas… Quais métodos utilizar?
  • 40. “[…] methods are not given meaning by the media type. Instead, the media type tells the client either what method to use (e.g., anchor implies GET) or how to determine the method to use (e.g., form element says to look in method attribute). The client should already know what the methods mean (they are universal) and how to dereference a URI.” –Roy T. Fielding
  • 41. HTTP Methods • GET • POST • PUT • PATCH • DELETE • OPTIONS
  • 42. “ Rails is not restful “ Kind of comment…
  • 43. Implementar
  • 44. Pedir Sanduíche preparado Atualizar Pagar Pagamento realizado Pegar Sanduíche entregue
  • 45. Fazer pedido: Requisição POST  /pedidos  HTTP/1.1   Accept:  application/vnd.subway.sanduiche-­‐v1+json
 
 {          "pao":  "3queijos",          "queijo":  "suíço",          "recheio":  "club"   }
  • 46. Fazer pedido: Resposta HTTP/1.1  201  Created   Content-­‐type:  application/vnd.subway.sanduiche-­‐v1+json
 
 {      "id":  "1",      "created_at":  "2013-­‐10-­‐23T05:02Z",      "updated_at":  null,      "pao":  "3  queijos",      "queijo":  "suíço",      "recheio":  "club",      "status":  “em  preparo",      "links":  [          {  "rel":  "self",  "href":  "/pedidos/1"  },          {  "rel":  "pagamento",  "href":  "/pagamentos/pedidos/1"  }      ]   }
  • 47. Atualizar pedido: Requisição PATCH  /pedidos/1  HTTP/1.1   Accept:  application/vnd.subway.sanduiche-­‐v1+json
 
 {          "queijo":  "cheddar"   }
  • 48. Atualizar pedido: Resposta HTTP/1.1  200  Ok   Content-­‐type:  application/vnd.subway.sanduiche-­‐v1+json
 
 {      "id":  "1",      "created_at":  "2013-­‐10-­‐23T05:02Z",      "updated_at":  null,      "pao":  "3  queijos",      "queijo":  "cheddar",      "recheio":  "club",      "links":  [          {  "rel":  "self",  "href":  "/pedidos/1"  },          {  "rel":  "pagamento",  "href":  "/pagamentos/pedidos/1"  }      ]   }
  • 49. Atualizar pedido: Erro HTTP/1.1  409  Conflict   Content-­‐type:  application/vnd.subway.sanduiche-­‐v1+json
 
 {      "id":  "1",      "created_at":  "2013-­‐10-­‐23T05:02Z",      "updated_at":  null,      "pao":  "3  queijos",      "queijo":  "suiço",      "recheio":  "club",      "links":  [          {  "rel":  "self",  "href":  "/pedidos/1"  },          {  "rel":  "pagamento",  "href":  "/pagamentos/pedidos/1"  }      ]   }
  • 50. Como saber se é possível mudar o pedido? OPTIONS  /pedidos/1  HTTP/1.1 HTTP/1.1  200  Ok   Allow:  GET,  PATCH
  • 51. Pagar pedido: REQUISIÇÃO • Lembra do media type? • Utilizar relacionamentos
  • 52. Pagar pedido: REQUISIÇÃO GET  /pagamentos/pedidos/1  HTTP/1.1   Accept:  application/vnd.subway.sanduiches-­‐v1+json
 
 {          "numero_cartao":  "123312",          "expira_em":  "12/12",          "valor":  "12.45"   }
  • 53. Ponto de vista do caixa: fila de sanduíches GET  /pedidos  HTTP/1.1   Accept:  application/vnd.subway.sanduiches-­‐v1+json
 {      "total":  12,      "page":  1,      "per_page":  10,      "items":  [          {  "id":  “1”,  “status”:  "pago"  …  },          {  "id":  “2”,  “status”,  “em  preparo"  …  }      ]   }
  • 54. Listar pedido: media type • É necessário criar seu próprio media type? • Não! Já existem vários: • collection+json • atom+xml
  • 55. Gems
  • 56. roar beer  =  Beer.new(:title  =>  "Lonestar  Beer")   beer.post(order.links[:items])
  • 57. jsonapi.org • Media type de propósito geral • Links, Coleções, etc
  • 58. Obrigado :)
  • 59. Referências • http://www.infoq.com/articles/webber-rest-workflow • http://www.enterpriseintegrationpatterns.com/ramblings/ 18_starbucks.html • http://roy.gbiv.com/untangled/2008/rest-apis-must-behypertext-driven • http://github.com/apotonick/roar • http://github.com/intridea/grape • http://jsonapi.org

×