Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Caelum 2009 Rest Ao Restful - CEJUG 2009

1,412 views

Published on

Published in: Technology
  • Be the first to comment

Caelum 2009 Rest Ao Restful - CEJUG 2009

  1. 1. Do REST ao RESTFul Guilherme Silveira Adriano Almeida @guilhermecaelum @adrianoalmeida7 Do REST Ao RESTful Www.caelum.com.br
  2. 2. Solução clássica guj.com.br 2 milhões de page views - jetty - Nginx
  3. 3. Solução moderna caelum.com.br cloud - google app engine - amazon - locaweb
  4. 4. Solução contemporânea REST? RESTful? HATEOAS? what the hell?
  5. 5. Requisitos não funcionais
  6. 6. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado
  7. 7. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade
  8. 8. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta
  9. 9. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade
  10. 10. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema
  11. 11. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes
  12. 12. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  13. 13. Top hits? ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  14. 14. Top hits? ✤ http ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  15. 15. Top hits? ✤ http ✤ web: caches ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  16. 16. Top hits? ✤ http ✤ web: caches ✤ web: proxies, localização geográfica ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  17. 17. Top hits? ✤ http ✤ web: caches ✤ web: proxies, localização geográfica ✤ http: load balancers “comoditizados” ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  18. 18. Top hits? ✤ http ✤ web: caches ✤ web: proxies, localização geográfica ✤ http: load balancers “comoditizados” ✤ http: load balancers ✤ permitir evolução sem quebrar clientes ✤ segurança
  19. 19. Top hits? ✤ http ✤ web: caches ✤ web: proxies, localização geográfica ✤ http: load balancers “comoditizados” ✤ http: load balancers ✤ web: html e loosely coupling ✤ segurança
  20. 20. Top hits? ✤ http ✤ web: caches ✤ web: proxies, localização geográfica ✤ http: load balancers “comoditizados” ✤ http: load balancers ✤ web: html e loosely coupling ✤ tls: https
  21. 21. “O” sistema escalável: a web ✤ http ✤ web: caches ✤ web: proxies, localização geográfica ✤ http: load balancers “comoditizados” ✤ http: load balancers ✤ web: html e loosely coupling ✤ tls: https
  22. 22. Protocolos da Internet ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  23. 23. Protocolos da Internet smtp: email ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  24. 24. Protocolos da Internet smtp: email nntp: fórum de ftp: arquivos discussão Do REST Ao RESTful Www.caelum.com.br
  25. 25. Protocolos da Internet smtp: email irc: chat nntp: fórum de discussão ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  26. 26. Protocolos da Internet smtp: email irc: chat telnet: acesso remoto nntp: fórum de discussão ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  27. 27. Protocolos da Internet smtp: email irc: chat telnet: acesso remoto gopher, www: hipertexto nntp: fórum de discussão ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  28. 28. Protocolos da Internet smtp: email irc: chat veronica: busca em gopher wais: busca em banco de dados archie: busca em ftp telnet: acesso remoto gopher, www: hipertexto nntp: fórum de discussão ftp: arquivos prospero: directory services Do REST Ao RESTful Www.caelum.com.br
  29. 29. E hoje? smtp: email bittorrent: arquivos irc, im: chat ssh: acesso remoto Do REST Ao RESTful Www.caelum.com.br
  30. 30. E hoje? home banking: www compras: www calendário: www email: www chat: www documentos: www conteúdo restrito: www sexo: www Do REST Ao RESTful Www.caelum.com.br
  31. 31. 2000 - Roy Fielding why the web? why? Do REST Ao RESTful Www.caelum.com.br
  32. 32. protocolos usando http xml-rpc soap Do REST Ao RESTful Www.caelum.com.br
  33. 33. http != www xml-rpc usa http soap usa http mas e a tal da hypermedia? Do REST Ao RESTful Www.caelum.com.br
  34. 34. características da web uri http hypermedia Do REST Ao RESTful Www.caelum.com.br
  35. 35. Leonard Richardson’s maturity model 0 - nada 1 - uri 2 - http 3 - html Do REST Ao RESTful Www.caelum.com.br
  36. 36. nível zero 1 uri 1 verbo http Do REST Ao RESTful Www.caelum.com.br
  37. 37. nível um diversas uris Do REST Ao RESTful Www.caelum.com.br
  38. 38. nível um - uris bookmarks addressability tudo em uma requisição visibility stateless Do REST Ao RESTful Www.caelum.com.br
  39. 39. nível um - uris bad usage: body diz o que executar visibility-- Do REST Ao RESTful Www.caelum.com.br
  40. 40. www é um sistema de documentos hypertext Do REST Ao RESTful Www.caelum.com.br
  41. 41. nível dois diversas uris http Do REST Ao RESTful Www.caelum.com.br
  42. 42. nível dois http é o protocolo de aplicação web É a API Do REST Ao RESTful Www.caelum.com.br
  43. 43. nível dois - http stateless cache, proxies fault tolerant scalability locking Do REST Ao RESTful Www.caelum.com.br
  44. 44. nível dois - http protocolo amplamente utilizado escalabilidade Do REST Ao RESTful tolerância a falhas Www.caelum.com.br
  45. 45. nível dois - http evolução do sistema sem desligá-lo locking alta performance Do REST Ao RESTful segurança Www.caelum.com.br
  46. 46. nível dois - http bad usage: cookie bad usage: extensões obrigatórias Do REST Ao RESTful Www.caelum.com.br
  47. 47. nível três diversas uris http html (hypermedia) Do REST Ao RESTful Www.caelum.com.br
  48. 48. schema fixo fail fast: die die die!!! strong coupling every new release: all clients must change Do REST Ao RESTful Www.caelum.com.br
  49. 49. nível três - hypermedia usar um formato comum ex: html, atom, vcal permite o servidor evoluir permite o cliente evoluir loose coupling Do REST Ao RESTful Www.caelum.com.br
  50. 50. schema dinâmico ignore o que você não conhece loose coupling exemplo: versões novas de html Do REST Ao RESTful Www.caelum.com.br
  51. 51. na prática: ruby class Order acts_as_restfulie def following_transitions transitions = [] transitions << :pay transitions end end Do REST Ao RESTful Www.caelum.com.br
  52. 52. na prática: ruby <order> <client> <name>guilherme silveira</name> </client> Do REST Ao RESTful <link rel=”pay” href=”.../order/3/pay” /> </order> Www.caelum.com.br
  53. 53. na prática: ruby client order = Order.from_web “.../order/3” payment = Payment.new payment.card.number = 4444 payment.card.holder = “guilherme” receipt = order.pay payment Do REST Ao RESTful Www.caelum.com.br
  54. 54. prática: locking order = Order.from_web “.../order/3” order.add(item).in_case :unchanged # usa PUT Do REST Ao RESTful Www.caelum.com.br
  55. 55. prática: fault tolerant order = Order.from_web “.../order/3” order.add(item) # usa PUT order.add(item) # usa PUT, não irá readicionar Do REST Ao RESTful Www.caelum.com.br
  56. 56. prática: one application protocol user = Flickr.from_web “.../users/guilhermesilveira” user.photos.add photo # POST user.account.upgrade # POST Do REST Ao RESTful Www.caelum.com.br
  57. 57. prática: loose coupling user = Flickr.from_web “.../users/guilhermesilveira” user.movies.add movie # comportamento novo user.photos.add photo # POST user.account.upgrade # POST Do REST Ao RESTful Www.caelum.com.br
  58. 58. na prática: java public class Order implements StateResource { public List getFollowingTransitions(Restfulie control) { control.transition(OrderController.class).pay(); return control.getTransitions(); } } Do REST Ao RESTful Www.caelum.com.br
  59. 59. na prática: java client Order order = resource(“.../order/3”); Payment payment = new Payment(...); Receipt receipt = resource(order).getTransition(“pay”).execute(payment) Do REST Ao RESTful Www.caelum.com.br
  60. 60. restfulie - java - ruby on rails outras linguagens? www.github.com/caelum/restfulie www.github.com/caelum/restfulie-java Do REST Ao RESTful Www.caelum.com.br
  61. 61. Do REST ao RESTFul Guilherme Silveira Adriano Almeida @guilhermecaelum @adrianoalmeida7 Do REST Ao RESTful Www.caelum.com.br

×