Do REST ao RESTFul
Guilherme Silveira    Adriano Almeida
@guilhermecaelum     @adrianoalmeida7

Do REST Ao RESTful

      ...
Solução clássica

                   guj.com.br
                   2 milhões de page views

                   - jetty
   ...
Solução moderna

                  caelum.com.br



                  cloud
                  - google app engine
        ...
Solução contemporânea



     REST? RESTful? HATEOAS?
           what the hell?
Requisitos não funcionais
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performan...
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performan...
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performan...
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performan...
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performan...
Top hits?

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performance alta

✤   alt...
Top hits?

✤   http

✤   escalabilidade

✤   performance alta

✤   alta disponibilidade

✤   permitir evolução sem parar o...
Top hits?

✤   http

✤   web: caches

✤   performance alta

✤   alta disponibilidade

✤   permitir evolução sem parar o si...
Top hits?

✤   http

✤   web: caches

✤   web: proxies, localização geográfica

✤   alta disponibilidade

✤   permitir evol...
Top hits?

✤   http

✤   web: caches

✤   web: proxies, localização geográfica

✤   http: load balancers “comoditizados”

✤...
Top hits?

✤   http

✤   web: caches

✤   web: proxies, localização geográfica

✤   http: load balancers “comoditizados”

✤...
Top hits?

✤   http

✤   web: caches

✤   web: proxies, localização geográfica

✤   http: load balancers “comoditizados”

✤...
Top hits?

✤   http

✤   web: caches

✤   web: proxies, localização geográfica

✤   http: load balancers “comoditizados”

✤...
“O” sistema escalável: a web

✤   http

✤   web: caches

✤   web: proxies, localização geográfica

✤   http: load balancers...
Protocolos da Internet




    ftp:
 arquivos
Do REST Ao RESTful

                         Www.caelum.com.br
Protocolos da Internet




                     smtp: email
ftp: arquivos



Do REST Ao RESTful

                         ...
Protocolos da Internet
                          smtp: email




                     nntp: fórum de
ftp: arquivos
       ...
Protocolos da Internet

                              smtp: email
irc: chat


                     nntp: fórum de discussã...
Protocolos da Internet
                                      smtp: email
      irc: chat



                     telnet: a...
Protocolos da Internet
                                     smtp: email
      irc: chat


                     telnet: ace...
Protocolos da Internet
                                                         smtp: email
      irc: chat           vero...
E hoje?

                         smtp: email
                     bittorrent: arquivos
                         irc, im: ...
E hoje?
                      home banking: www
                         compras: www
                        calendário: ...
2000 - Roy Fielding




                      why the web? why?




Do REST Ao RESTful

                                  ...
protocolos
    usando http


               xml-rpc
                soap




Do REST Ao RESTful

                         ...
http != www
     xml-rpc usa http
       soap usa http
mas e a tal da hypermedia?




Do REST Ao RESTful

                ...
características da web


                                uri
                               http
                         ...
Leonard Richardson’s
                        maturity model
                           0 - nada
                          ...
nível zero




        1 uri
        1 verbo http



Do REST Ao RESTful

                                    Www.caelum.co...
nível um
                      diversas uris




Do REST Ao RESTful

                            Www.caelum.com.br
nível um - uris
               bookmarks
              addressability
         tudo em uma requisição
                visi...
nível um - uris


bad usage: body diz o que executar

                 visibility--

Do REST Ao RESTful

                 ...
www é um sistema de
documentos hypertext




Do REST Ao RESTful

                       Www.caelum.com.br
nível dois

                     diversas uris
                         http




Do REST Ao RESTful

                     ...
nível dois




                     http é o protocolo de aplicação
                               web É a API

Do REST Ao...
nível dois - http


                                            stateless
                                         cache, ...
nível dois - http




                     protocolo amplamente utilizado
                              escalabilidade
Do ...
nível dois - http




                     evolução do sistema sem desligá-lo
                                  locking
  ...
nível dois - http




                            bad usage: cookie
                     bad usage: extensões obrigatórias...
nível três




                        diversas uris
                            http
                     html (hypermedi...
schema fixo




                              fail fast: die die die!!!
                                 strong coupling
 ...
nível três - hypermedia




                                 usar um formato comum
                                    ex:...
schema dinâmico




                      ignore o que você não conhece
                              loose coupling
     ...
na prática: ruby

                          class Order
                           acts_as_restfulie

                    ...
na prática: ruby




                     <order>
                      <client>
                       <name>guilherme si...
na prática: ruby client




                               order = Order.from_web “.../order/3”
                          ...
prática: locking
order = Order.from_web “.../order/3”
order.add(item).in_case :unchanged # usa PUT




Do REST Ao RESTful
...
prática: fault tolerant


                        order = Order.from_web “.../order/3”
                        order.add(i...
prática: one application
                             protocol

                     user = Flickr.from_web “.../users/gui...
prática: loose coupling

                     user = Flickr.from_web “.../users/guilhermesilveira”
                     us...
na prática: java
public class Order implements StateResource {

    public List getFollowingTransitions(Restfulie control)...
na prática: java client




                     Order order = resource(“.../order/3”);
                     Payment payme...
restfulie          - java
                     - ruby on rails
                     outras linguagens?

                  ...
Do REST ao RESTFul
Guilherme Silveira    Adriano Almeida
@guilhermecaelum     @adrianoalmeida7

Do REST Ao RESTful

      ...
Próximos SlideShares
Carregando em…5
×

Caelum 2009 Rest Ao Restful - CEJUG 2009

1.403 visualizações

Publicada em

Publicada em: Tecnologia
  • Seja o primeiro a comentar

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

×