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.366 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.366
No SlideShare
0
A partir de incorporações
0
Número de incorporações
11
Ações
Compartilhamentos
0
Downloads
41
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • ANTIGAMENTE home banking era DIAL UP!!!
  • xml-rpc: dave winer
    soap: microsoft
    clientes automatizados fazer requisicoes http, como um ser humano estava fazendo
  • o quanto voce usa da web no seu sistema?
  • xml-rpc
    most soap services
    typical flash based websites
    makes you feel the web is not the web
  • flickr web services, delicious,amazon ecs, rails ERAM assim, mudaram
  • um s&amp;#xF3; recurso &amp;#xE9; complicado de lidar: tem um restaurante s&amp;#xF3;. qual ta com pau?
    diversos recursos &amp;#xE9; mais facil de entender. divida seu sistema em diversos
    cache: post nao cacheia! BACK funciona!
  • um s&amp;#xF3; recurso &amp;#xE9; complicado de lidar: tem um restaurante s&amp;#xF3;. diversos recursos &amp;#xE9; mais facil de entender. divida seu sistema em diversos
  • ao criar uma aplicacao nova: internet banking: todo mundo continua funcionando: uniform interface... pq o browser sabe como aplicacoes que usam www e http funcionam.
  • flickr web services, delicious,amazon s3: melhor exemplo, rails hoje em dia
  • http diz o que eh para ser feito atraves dos metodos e da URI (aonde eh para ser feito)
    web API != soap onde o XML eh a api, perde visibility... ai cria coisas como ESBs para ver isso
  • stateless: estado do cliente x aplicacao, cache: escala, get/put: idempotente, scalability: stateless, post+if = locking. stateless: visibility (ta tudo la! vc sabe o q esta acontecendo, nada escondido: intermediario pode atuar): reliability: esta tudo la, ele nao assume coisas erradas
  • stateless: estado do cliente x aplicacao, cache: escala, get/put: idempotente, scalability: stateless, post+if = locking. stateless: visibility (ta tudo la! vc sabe o q esta acontecendo, nada escondido: intermediario pode atuar): reliability: esta tudo la, ele nao assume coisas erradas
  • stateless: estado do cliente x aplicacao, cache: escala, get/put: idempotente, scalability: stateless, post+if = locking. stateless: visibility (ta tudo la! vc sabe o q esta acontecendo, nada escondido: intermediario pode atuar): reliability: esta tudo la, ele nao assume coisas erradas
  • cookie: vc nao tem so a URI identificado a coisa
    extensao: se ocliente ou o layer intermediario nao compreende, nao funciona.
  • recurso descreve suas CAPABILITIES e CONEXOES
    exemplos: www, atompub
  • se vc deixa o schema totalmente fixo, vc deixa um strong coupling... ilusao de que sao desacoplados
    eh OPCIONAL (ou dificil) manter compatibilidade entre versoes: exemplo AMAZON
  • constraint: vc PRECISA nao se preocupar com a evolucao dele. se vc quiser, vc usa, se vc nao sabe, tudo bem... mas eh o padrao.
    media type: xml com link nao existe, tem que ser vendor specific: vnd/a+xml
    LOOSE COUPLING: tem coupling mas eh leve.HIGH: vc nao permite evolucao. essa eh a diferenca entre webservices com wsdl por exemplo ou outro que tenha uma especificacao, mas aberta para evoluir. html esta aberto para evoluir, imagine se todas as paginas tivessem que ter menu em cima etc?nao eh solucao para curto, eh solucao para longo prazo: solucao estrategica, nao de ti
  • se vc ignora, vc tira o strong coupling... e consegue evoluir em paralelo
    eh assim que eh a web hoje em dia
    evoluir a LONGO prazo do que evoluir a CURTO PRAZO
  • constraint: vc PRECISA nao se preocupar com a evolucao dele. se vc quiser, vc usa, se vc nao sabe, tudo bem... mas eh o padrao.
    media type: xml com link nao existe, tem que ser vendor specific: vnd/a+xml
  • constraint: vc PRECISA nao se preocupar com a evolucao dele. se vc quiser, vc usa, se vc nao sabe, tudo bem... mas eh o padrao.
    media type: xml com link nao existe, tem que ser vendor specific: vnd/a+xml
  • constraint: vc PRECISA nao se preocupar com a evolucao dele. se vc quiser, vc usa, se vc nao sabe, tudo bem... mas eh o padrao.
    media type: xml com link nao existe, tem que ser vendor specific: vnd/a+xml
  • usa PUT mas faz um IF para verificar se nao foi alterada
  • usa PUT n&amp;#xE3;o readiciona
  • nao precisa ficar criando uma biblioteca para cada protocolo proprietario que inventamos (a API nossa)... afinal a API &amp;#xC9; A WEB
  • comportamento novo NAO deve quebrar o que ja existe
  • constraint: vc PRECISA nao se preocupar com a evolucao dele. se vc quiser, vc usa, se vc nao sabe, tudo bem... mas eh o padrao.
    media type: xml com link nao existe, tem que ser vendor specific: vnd/a+xml
  • constraint: vc PRECISA nao se preocupar com a evolucao dele. se vc quiser, vc usa, se vc nao sabe, tudo bem... mas eh o padrao.
    media type: xml com link nao existe, tem que ser vendor specific: vnd/a+xml
  • 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

    ×