SlideShare une entreprise Scribd logo
1  sur  61
Do REST ao RESTFul
Guilherme Silveira    Adriano Almeida
@guilhermecaelum     @adrianoalmeida7

Do REST Ao RESTful

                          Www.caelum.com.br
Solução clássica

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

                   - jetty
                   - Nginx
Solução moderna

                  caelum.com.br



                  cloud
                  - google app engine
                  - amazon
                  - locaweb
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

✤   performance alta
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performance alta

✤   alta disponibilidade
Requisitos não funcionais

✤   protocolo de transferência de dados amplamente utilizado

✤   escalabilidade

✤   performance alta

✤   alta disponibilidade

✤   permitir evolução sem parar o sistema
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
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
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
Top hits?

✤   http

✤   escalabilidade

✤   performance alta

✤   alta disponibilidade

✤   permitir evolução sem parar o sistema

✤   permitir evolução sem quebrar clientes

✤   segurança
Top hits?

✤   http

✤   web: caches

✤   performance alta

✤   alta disponibilidade

✤   permitir evolução sem parar o sistema

✤   permitir evolução sem quebrar clientes

✤   segurança
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
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
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
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
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
“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
Protocolos da Internet




    ftp:
 arquivos
Do REST Ao RESTful

                         Www.caelum.com.br
Protocolos da Internet




                     smtp: email
ftp: arquivos



Do REST Ao RESTful

                             Www.caelum.com.br
Protocolos da Internet
                          smtp: email




                     nntp: fórum de
ftp: arquivos
                       discussão
Do REST Ao RESTful

                                   Www.caelum.com.br
Protocolos da Internet

                              smtp: email
irc: chat


                     nntp: fórum de discussão
ftp: arquivos



Do REST Ao RESTful

                                        Www.caelum.com.br
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
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
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
E hoje?

                         smtp: email
                     bittorrent: arquivos
                         irc, im: chat
                     ssh: acesso remoto




Do REST Ao RESTful

                                            Www.caelum.com.br
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
2000 - Roy Fielding




                      why the web? why?




Do REST Ao RESTful

                                          Www.caelum.com.br
protocolos
    usando http


               xml-rpc
                soap




Do REST Ao RESTful

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




Do REST Ao RESTful

                             Www.caelum.com.br
características da web


                                uri
                               http
                            hypermedia




Do REST Ao RESTful

                                              Www.caelum.com.br
Leonard Richardson’s
                        maturity model
                           0 - nada
                           1 - uri
                           2 - http
                           3 - html




Do REST Ao RESTful

                                      Www.caelum.com.br
nível zero




        1 uri
        1 verbo http



Do REST Ao RESTful

                                    Www.caelum.com.br
nível um
                      diversas uris




Do REST Ao RESTful

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


Do REST Ao RESTful

                                  Www.caelum.com.br
nível um - uris


bad usage: body diz o que executar

                 visibility--

Do REST Ao RESTful

                                     Www.caelum.com.br
www é um sistema de
documentos hypertext




Do REST Ao RESTful

                       Www.caelum.com.br
nível dois

                     diversas uris
                         http




Do REST Ao RESTful

                                            Www.caelum.com.br
nível dois




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

Do REST Ao RESTful

                                                       Www.caelum.com.br
nível dois - http


                                            stateless
                                         cache, proxies
                                         fault tolerant
                                           scalability
                                            locking




Do REST Ao RESTful

                                              Www.caelum.com.br
nível dois - http




                     protocolo amplamente utilizado
                              escalabilidade
Do REST Ao RESTful
                           tolerância a falhas
                                                      Www.caelum.com.br
nível dois - http




                     evolução do sistema sem desligá-lo
                                  locking
                             alta performance
Do REST Ao RESTful
                                 segurança
                                                          Www.caelum.com.br
nível dois - http




                            bad usage: cookie
                     bad usage: extensões obrigatórias

Do REST Ao RESTful

                                                         Www.caelum.com.br
nível três




                        diversas uris
                            http
                     html (hypermedia)


Do REST Ao RESTful

                                         Www.caelum.com.br
schema fixo




                              fail fast: die die die!!!
                                 strong coupling
                     every new release: all clients must change




Do REST Ao RESTful

                                                                  Www.caelum.com.br
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
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
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
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
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
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
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
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
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
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
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
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
Do REST ao RESTFul
Guilherme Silveira    Adriano Almeida
@guilhermecaelum     @adrianoalmeida7

Do REST Ao RESTful

                          Www.caelum.com.br

Contenu connexe

Similaire à REST e HTTP: Os pilares da web

Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Sistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebSistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebRafael Chagas
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]Igor Santos
 
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Celso Fernandes
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)
5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)
5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)susana12345
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugSergio Azevedo
 
Descobrindo APIs REST
Descobrindo APIs RESTDescobrindo APIs REST
Descobrindo APIs RESTGuilherme
 
Rest fuuuu front-end
Rest fuuuu front-endRest fuuuu front-end
Rest fuuuu front-endIgor Santos
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioFernando Palma
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoEmerson Macedo
 
Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011
Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011
Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011Eduardo Souza
 

Similaire à REST e HTTP: Os pilares da web (20)

Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Sistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebSistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na Web
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
 
Performance na web
Performance na webPerformance na web
Performance na web
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
HTTP
HTTPHTTP
HTTP
 
5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)
5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)
5. Pesquisa AtravéS Dos Operadores Booleanos (14 04 09)
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Descobrindo APIs REST
Descobrindo APIs RESTDescobrindo APIs REST
Descobrindo APIs REST
 
Introdução a Tecnologias Web
Introdução a Tecnologias WebIntrodução a Tecnologias Web
Introdução a Tecnologias Web
 
Rest fuuuu front-end
Rest fuuuu front-endRest fuuuu front-end
Rest fuuuu front-end
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia Introdutório
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
REST com Python
REST com PythonREST com Python
REST com Python
 
Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 
Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011
Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011
Primeiros Passos Para o Desenvolvimento Web - FLISOLGO 2011
 
APIs REST escaláveis
APIs REST escaláveisAPIs REST escaláveis
APIs REST escaláveis
 

Plus de Guilherme Silveira

Equipes ágeis em 2012 - Lições aprendidas
Equipes ágeis em 2012 - Lições aprendidasEquipes ágeis em 2012 - Lições aprendidas
Equipes ágeis em 2012 - Lições aprendidasGuilherme Silveira
 
Introducao a machine learning na educacao
Introducao a machine learning na educacaoIntroducao a machine learning na educacao
Introducao a machine learning na educacaoGuilherme Silveira
 
Depois de Scrum e XP: não pare de aprender, não pare de inovar
Depois de Scrum e XP: não pare de aprender, não pare de inovarDepois de Scrum e XP: não pare de aprender, não pare de inovar
Depois de Scrum e XP: não pare de aprender, não pare de inovarGuilherme Silveira
 
O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...
O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...
O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...Guilherme Silveira
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de códigoGuilherme Silveira
 
REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011Guilherme Silveira
 
Crie seu sistema REST com JAX-RS e o futuro
Crie seu sistema REST com JAX-RS e o futuroCrie seu sistema REST com JAX-RS e o futuro
Crie seu sistema REST com JAX-RS e o futuroGuilherme Silveira
 
Put your client and server to rest - Javaone
Put your client and server to rest - JavaonePut your client and server to rest - Javaone
Put your client and server to rest - JavaoneGuilherme Silveira
 
Deploy continuo, integraçao continua não basta
Deploy continuo, integraçao continua não bastaDeploy continuo, integraçao continua não basta
Deploy continuo, integraçao continua não bastaGuilherme Silveira
 
noSql + rest: Arquitetura Contemporanea
noSql + rest: Arquitetura ContemporaneanoSql + rest: Arquitetura Contemporanea
noSql + rest: Arquitetura ContemporaneaGuilherme Silveira
 

Plus de Guilherme Silveira (20)

Equipes ágeis em 2012 - Lições aprendidas
Equipes ágeis em 2012 - Lições aprendidasEquipes ágeis em 2012 - Lições aprendidas
Equipes ágeis em 2012 - Lições aprendidas
 
Introducao a machine learning na educacao
Introducao a machine learning na educacaoIntroducao a machine learning na educacao
Introducao a machine learning na educacao
 
Depois de Scrum e XP: não pare de aprender, não pare de inovar
Depois de Scrum e XP: não pare de aprender, não pare de inovarDepois de Scrum e XP: não pare de aprender, não pare de inovar
Depois de Scrum e XP: não pare de aprender, não pare de inovar
 
O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...
O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...
O grandiosismo dos loucos - Agile Brazil 2011, Cecilia Fernandes e Guilherme ...
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de código
 
REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011
 
Crie seu sistema REST com JAX-RS e o futuro
Crie seu sistema REST com JAX-RS e o futuroCrie seu sistema REST com JAX-RS e o futuro
Crie seu sistema REST com JAX-RS e o futuro
 
Using the web for real
Using the web for realUsing the web for real
Using the web for real
 
Arquitetura: chega de mesmice
Arquitetura: chega de mesmiceArquitetura: chega de mesmice
Arquitetura: chega de mesmice
 
Arquitetura: chega de mesmice
Arquitetura: chega de mesmiceArquitetura: chega de mesmice
Arquitetura: chega de mesmice
 
Arquitetura chega de mesmice
Arquitetura  chega de mesmiceArquitetura  chega de mesmice
Arquitetura chega de mesmice
 
Arquitetura: chega de mesmice
Arquitetura: chega de mesmiceArquitetura: chega de mesmice
Arquitetura: chega de mesmice
 
Put your client and server to rest - Javaone
Put your client and server to rest - JavaonePut your client and server to rest - Javaone
Put your client and server to rest - Javaone
 
Rest clients
Rest clientsRest clients
Rest clients
 
Rest clients
Rest clientsRest clients
Rest clients
 
Rest clients
Rest clientsRest clients
Rest clients
 
Um produto por semana
Um produto por semanaUm produto por semana
Um produto por semana
 
Deploy continuo, integraçao continua não basta
Deploy continuo, integraçao continua não bastaDeploy continuo, integraçao continua não basta
Deploy continuo, integraçao continua não basta
 
noSql + rest: Arquitetura Contemporanea
noSql + rest: Arquitetura ContemporaneanoSql + rest: Arquitetura Contemporanea
noSql + rest: Arquitetura Contemporanea
 
Rest workflows
Rest workflowsRest workflows
Rest workflows
 

REST e HTTP: Os pilares da web

  • 1. Do REST ao RESTFul Guilherme Silveira Adriano Almeida @guilhermecaelum @adrianoalmeida7 Do REST Ao RESTful Www.caelum.com.br
  • 2. Solução clássica guj.com.br 2 milhões de page views - jetty - Nginx
  • 3. Solução moderna caelum.com.br cloud - google app engine - amazon - locaweb
  • 4. Solução contemporânea REST? RESTful? HATEOAS? what the hell?
  • 6. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado
  • 7. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade
  • 8. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta
  • 9. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade
  • 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. 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. 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. 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. Top hits? ✤ http ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  • 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. 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. 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. 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. 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. 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. “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. Protocolos da Internet ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  • 23. Protocolos da Internet smtp: email ftp: arquivos Do REST Ao RESTful Www.caelum.com.br
  • 24. Protocolos da Internet smtp: email nntp: fórum de ftp: arquivos discussão Do REST Ao RESTful Www.caelum.com.br
  • 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. 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. 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. 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. E hoje? smtp: email bittorrent: arquivos irc, im: chat ssh: acesso remoto Do REST Ao RESTful Www.caelum.com.br
  • 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. 2000 - Roy Fielding why the web? why? Do REST Ao RESTful Www.caelum.com.br
  • 32. protocolos usando http xml-rpc soap Do REST Ao RESTful Www.caelum.com.br
  • 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. características da web uri http hypermedia Do REST Ao RESTful Www.caelum.com.br
  • 35. Leonard Richardson’s maturity model 0 - nada 1 - uri 2 - http 3 - html Do REST Ao RESTful Www.caelum.com.br
  • 36. nível zero 1 uri 1 verbo http Do REST Ao RESTful Www.caelum.com.br
  • 37. nível um diversas uris Do REST Ao RESTful Www.caelum.com.br
  • 38. nível um - uris bookmarks addressability tudo em uma requisição visibility stateless Do REST Ao RESTful Www.caelum.com.br
  • 39. nível um - uris bad usage: body diz o que executar visibility-- Do REST Ao RESTful Www.caelum.com.br
  • 40. www é um sistema de documentos hypertext Do REST Ao RESTful Www.caelum.com.br
  • 41. nível dois diversas uris http Do REST Ao RESTful Www.caelum.com.br
  • 42. nível dois http é o protocolo de aplicação web É a API Do REST Ao RESTful Www.caelum.com.br
  • 43. nível dois - http stateless cache, proxies fault tolerant scalability locking Do REST Ao RESTful Www.caelum.com.br
  • 44. nível dois - http protocolo amplamente utilizado escalabilidade Do REST Ao RESTful tolerância a falhas Www.caelum.com.br
  • 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. nível dois - http bad usage: cookie bad usage: extensões obrigatórias Do REST Ao RESTful Www.caelum.com.br
  • 47. nível três diversas uris http html (hypermedia) Do REST Ao RESTful Www.caelum.com.br
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Do REST ao RESTFul Guilherme Silveira Adriano Almeida @guilhermecaelum @adrianoalmeida7 Do REST Ao RESTful Www.caelum.com.br

Notes de l'éditeur

  1. ANTIGAMENTE home banking era DIAL UP!!!
  2. xml-rpc: dave winer soap: microsoft clientes automatizados fazer requisicoes http, como um ser humano estava fazendo
  3. o quanto voce usa da web no seu sistema?
  4. xml-rpc most soap services typical flash based websites makes you feel the web is not the web
  5. flickr web services, delicious,amazon ecs, rails ERAM assim, mudaram
  6. 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!
  7. 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
  8. 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.
  9. flickr web services, delicious,amazon s3: melhor exemplo, rails hoje em dia
  10. 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
  11. 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
  12. 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
  13. 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
  14. cookie: vc nao tem so a URI identificado a coisa extensao: se ocliente ou o layer intermediario nao compreende, nao funciona.
  15. recurso descreve suas CAPABILITIES e CONEXOES exemplos: www, atompub
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. usa PUT mas faz um IF para verificar se nao foi alterada
  23. usa PUT n&amp;#xE3;o readiciona
  24. nao precisa ficar criando uma biblioteca para cada protocolo proprietario que inventamos (a API nossa)... afinal a API &amp;#xC9; A WEB
  25. comportamento novo NAO deve quebrar o que ja existe
  26. 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
  27. 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