SlideShare ist ein Scribd-Unternehmen logo
1 von 117
REST, semântica e o futuro (!)
     da arquitetura web
         Guilherme Silveira
Guilherme Silveira
guilherme.silveira@caelum.com.br
são paulo
são paulo
são paulo
são paulo
são paulo
Guilherme Silveira
               guilherme.silveira@caelum.com.br




2002 guj.com.br
2003 vraptor
2004 caelum.com.br
     xp, xstream
2006 scrum
2009 restfulie, lean
2010 tectura.com.br
bank.com
bank.com



    calendar.com
bank.com



       kayak.com
calendar.com
bank.com       kayak.com



      caelum.com.br

calendar.com
bank.com       kayak.com




calendar.com   caelum.com.br
bank.com       kayak.com




calendar.com   caelum.com.br
CORBA
paraíso?
EJB
paraíso?
SOAP
paraíso?
REST
minimizar o acoplamento
service locator em integração:
                acoplamento mais alto!

                          kayak
                           pay

                      kayak


guilherme
service locator em integração:
                acoplamento mais alto!

                          kayak
                           pay

                      kayak


guilherme
kayak.com: pagamento de um vôo


<?xml version="1.0" encoding="UTF-8" standalum="yes"?>
<voo>
  <informacoes>
    <de>GRU</de>
    <ate>JFK</ate>
  </informacoes>
  <valor>900.00</valor>
  <link rel="payment"
              href="http://kayak.com/payment/custom"/>
</voo>
kayak.com: pagamento de um vôo


<?xml version="1.0" encoding="UTF-8" standalum="yes"?>
<voo>
  <informacoes>
    <de>GRU</de>
    <ate>JFK</ate>
  </informacoes>
  <valor>900.00</valor>
  <link rel="payment"
              href="http://kayak.com/payment/custom"/>
</voo>
kayak.com: pagamento de um vôo



voo = Restfulie.at('http://kayak.com/f/574XR4').get

confirmacao = voo.link("payment").
                  patch(todo_o_inferno_do_seu_cartao, valor)

envia_email(confirmacao)
kayak.com: pagamento de um vôo



voo = Restfulie.at('http://kayak.com/f/574XR4').get

confirmacao = voo.link("payment").
                  patch(todo_o_inferno_do_seu_cartao, valor)

envia_email(confirmacao)
kayak.com: pagamento de um vôo


<?xml version="1.0" encoding="UTF-8" standalum="yes"?>
<voo>
  <informacoes>
    <de>GRU</de>
    <ate>JFK</ate>
  </informacoes>
  <valor>900.00</valor>
  <link rel="payment"
              href="http://paypal.com/55788"/>
</voo>
kayak.com: pagamento de um vôo


<?xml version="1.0" encoding="UTF-8" standalum="yes"?>
<voo>
  <informacoes>
    <de>GRU</de>
    <ate>JFK</ate>
  </informacoes>
  <valor>900.00</valor>
  <link rel="payment"
              href="http://paypal.com/55788"/>
</voo>
viagem = recurso
        http://kayak.com/f/574XR4




pagamento = recurso
            uma_uri_qualquer
dependency injection em integração:
                      give me my links!

                          @kayak
                           pay

                        kayak


  guilherme




                                @visa
dependency injection em integração:
                      give me my links!

                          @kayak
                           pay

                        kayak


  guilherme




                                @visa
não viajo sozinho
meu amigo
@sergio_caelum
meu amigo
@sergio_caelum




 Bilu bilu
kayak.com: pagamento de um vôo



voo = Restfulie.at('http://kayak.com/f/574XR4').get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)

envia_email(confirmacao)


voo = Restfulie.at(uri_recebida).get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)
kayak.com: pagamento de um vôo



voo = Restfulie.at('http://kayak.com/f/574XR4').get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)

envia_email(confirmacao)


voo = Restfulie.at(uri_recebida).get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)
kayak.com: pagamento de um vôo



voo = Restfulie.at('http://kayak.com/f/574XR4').get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)

envia_email(confirmacao)


voo = Restfulie.at(uri_recebida).get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)
kayak.com: pagamento de um vôo



voo = Restfulie.at('http://kayak.com/f/574XR4').get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)

envia_email(confirmacao)


voo = Restfulie.at(uri_recebida).get

confirmacao = voo.link("payment").
                patch(todo_o_inferno_do_seu_cartao, valor/2)
calendar: minha agenda pessoal
calendar: minha agenda pessoal



eu = Restfulie.at('http://users.google.com')
                             .with(auth).get

eu.link("calendar").patch(voo.link("self"))
calendar: minha agenda pessoal



eu = Restfulie.at('http://users.google.com')
                             .with(auth).get

eu.link("calendar").patch(voo.link("self"))
calendar: minha agenda pessoal



eu.link("calendar").patch(link_para_aniversarios)
eu.link("calendar").patch(link_para_reserva_do_hotel)
eu.link("calendar").patch(link_para_passeios)
mas qual o formato do
pagamento ou calendário?
#json, #xml,
#soap #etc?
qual #json, #xml
      #etc?
exercício
quem é esse?
quem é essa?
fácil? e ela?
fácil? e ela?




                       lh a!
                      fi
                in ha
          é m
   n ão
conteúdo sem semântica
    não tem valor!
integração na web
#json,
@sergio_caelum
#?
de onde veio o # e o @?
“watching @guilhermecaelum
  #qconsp *10 great talk”


              Atenção: esse tweet é só
                  uma sugestão!
controlled
vocabulary
emergiu no twitter,
  por exemplo
inventar antes o
controlled vocabulary?
top down? Big Design Up Front




   O monstro do lago SOAP, longa de 2001
formato de calendário é comum!




               ele é pequeno
                 bem pequeno

                  ele é micro
e o calendário com isso?
e o calendário com isso?




 Cancelar ==> Cancela o vôo
 Cancelar ==> Envia email para um hotel
 Cancelar ==> Recusa uma reunião via email
e o calendário com isso?


                                                   í di a!
                                           pe rm
                                   s: hy
                              li nk
                       co m
                to s
               a
          fo rm
    ic ro
m    Cancelar ==> Cancela o vôo
     Cancelar ==> Envia email para um hotel
     Cancelar ==> Recusa uma reunião via email
caelum: no trabalho



caelum = Restfulie.at("http://caelum.com.br").get
caelum.link("reembolsos").patch(confirmacao)
caelum.link("calendar").patch(confirmacao)
caelum: o chefe




caelum = Restfulie.at("http://caelum.com.br")
                                 .with(auth).get

caelum.link("reembolsos").get[0]
        .link("confirmation").post :accept => true
caelum: o chefe

guilherme                     kayak
caelum: o chefe

guilherme                     kayak
caelum: o chefe

guilherme                     kayak



                              paypal
caelum: o chefe

guilherme                     kayak



                              paypal
caelum: o chefe

guilherme                      kayak



                              paypal



                              calendar
caelum: o chefe

guilherme                      kayak



                              paypal



                              calendar
caelum: o chefe

guilherme                      kayak



                              paypal



                              calendar



                              caelum
caelum: o chefe

guilherme                      kayak



                              paypal



                              calendar



                              caelum
caelum: o chefe

guilherme                      kayak



                              paypal

  chefe
                              calendar



                              caelum
caelum: o chefe

guilherme                      kayak



                              paypal

  chefe
                              calendar



                              caelum
em casa: minha esposa



esposa = Restfulie.at("http://users.google.com")
                           .with(esposa).get

esposa.link("friends")
     .get["Guilherme Silveira"].link("calendar")
economizando

# busca um voo
def voos_de(site)
  base = Restfulie.at(site).get
  voos = base.link("opensearch").get.fill("flight").with(:from =>
"GRU", :to => "JFK").get
end

voos   = voos_de("kayak")
voos   << voos_de("tam")
voos   << voos_de("gol")
voos   << voos_de("cvc")

voo_mais_barato(voos).link("payment").post(inferno_do_cartao)
banco


voo = voo_mais_barato(voos)

banco = Restfulie.at("meubanco").auth(eu).get

auth = banco.cartoes["lisa"]
               .authorization(1.min, voo.preco)
voo.link("payment").post(auth)

mais_barato(voos).link("payment")...
email
email

guilherme           super viagem
email

guilherme           super viagem
email

guilherme           super viagem



                      caelum
email

guilherme           super viagem



                      caelum
email

guilherme           super viagem



                      caelum



                       kayak
email

guilherme           super viagem



                      caelum



                       kayak
email

guilherme           super viagem



                      caelum



                       kayak
mostra esse
desacoplamento!
que ano comprou online? 2001?
mudou algo?
mudou algo?


     tm l
   dh
mudou algo?


     tm l
   dh
        fla sh
mudou algo?


     tm l
   dh
        fla sh
                ke ts
            so c
        web
mudou algo?


     tm l
   dh
        fla sh
                ke ts
            so c               p pt
        web             c om
               im o
          pé ss
     so u
os serviços mudaram
mas você compra igualmente
como eu consigo comprar?
entrar
escolher
escolher outro
comprar
comprar
sequencia
olhar
olhar
o que posso
   fazer?
o que posso
   fazer?
fazer
fazer
bottom up
   design by committe
       mime type?
     microformato
  controlled vocabulary
hypermídia
viabilizando a integração através da web
sites
                                         www.caelum.com.br
                                    www.agilenomundoreal.com.br
                                   blog.caelumobjects.com (english)




 frameworks                                              onde estou?
        restfulie.caelum.com.br
                                                                      @guilhermecaelum
        vraptor.caelum.com.br
                                                                      www.tectura.com.br
restfulie: ruby, java, .net, JS, python etc




         mais palestras no evento
Guilherme Silveira
guilherme.silveira@caelum.com.br
Not Only Coffee: NOCoffee

             aguaquente.wordpress.com

Weitere ähnliche Inhalte

Andere mochten auch

Brief Introduction to REST
Brief Introduction to RESTBrief Introduction to REST
Brief Introduction to RESTColin Harrington
 
REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011Guilherme 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
 
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
 
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
 
Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...
Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...
Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...Dimitrios Amaxilatis
 
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
 
REST Methodologies
REST MethodologiesREST Methodologies
REST Methodologiesjrodbx
 
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
 
REpresentational State Transfer
REpresentational State TransferREpresentational State Transfer
REpresentational State TransferVladimir Tsukur
 

Andere mochten auch (20)

Rest clients
Rest clientsRest clients
Rest clients
 
Brief Introduction to REST
Brief Introduction to RESTBrief Introduction to REST
Brief Introduction to REST
 
Rest workflows
Rest workflowsRest workflows
Rest workflows
 
REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011REST: Hypermidia e Cache - DNAD 2011
REST: Hypermidia e Cache - DNAD 2011
 
Using the web for real
Using the web for realUsing the web for real
Using the web for real
 
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 ...
 
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
 
Introduction to JAX-RS
Introduction to JAX-RSIntroduction to JAX-RS
Introduction to JAX-RS
 
REST
RESTREST
REST
 
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
 
Rest clients
Rest clientsRest clients
Rest clients
 
Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...
Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...
Smart Building Automation using Heterogeneous Wireless Sensor Networks (in gr...
 
Arquitetura: chega de mesmice
Arquitetura: chega de mesmiceArquitetura: chega de mesmice
Arquitetura: chega de mesmice
 
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
 
REST Methodologies
REST MethodologiesREST Methodologies
REST Methodologies
 
REST overview
REST overviewREST overview
REST overview
 
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
 
SPDY - or maybe HTTP2.0
SPDY - or maybe HTTP2.0SPDY - or maybe HTTP2.0
SPDY - or maybe HTTP2.0
 
Um produto por semana
Um produto por semanaUm produto por semana
Um produto por semana
 
REpresentational State Transfer
REpresentational State TransferREpresentational State Transfer
REpresentational State Transfer
 

Mehr von Guilherme 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
 
Caelum 2010 - Rest Arquitetura Irreponsavel?
Caelum 2010 - Rest Arquitetura Irreponsavel?Caelum 2010 - Rest Arquitetura Irreponsavel?
Caelum 2010 - Rest Arquitetura Irreponsavel?Guilherme Silveira
 
Caelum 2009 Rest Ao Restful - CEJUG 2009
Caelum 2009   Rest Ao Restful - CEJUG 2009Caelum 2009   Rest Ao Restful - CEJUG 2009
Caelum 2009 Rest Ao Restful - CEJUG 2009Guilherme Silveira
 

Mehr von Guilherme Silveira (6)

Introducao a machine learning na educacao
Introducao a machine learning na educacaoIntroducao a machine learning na educacao
Introducao a machine learning na educacao
 
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
 
Caelum 2010 - Rest Arquitetura Irreponsavel?
Caelum 2010 - Rest Arquitetura Irreponsavel?Caelum 2010 - Rest Arquitetura Irreponsavel?
Caelum 2010 - Rest Arquitetura Irreponsavel?
 
REST in Practice
REST in PracticeREST in Practice
REST in Practice
 
Caelum 2009 Rest Ao Restful - CEJUG 2009
Caelum 2009   Rest Ao Restful - CEJUG 2009Caelum 2009   Rest Ao Restful - CEJUG 2009
Caelum 2009 Rest Ao Restful - CEJUG 2009
 

REST, semântica e o futuro da arquitetura web

Hinweis der Redaktion