SlideShare ist ein Scribd-Unternehmen logo
1 von 62
REST: Arquitetura Irresponsável?
Guilherme Silveira
@guilhermecaelum

REST Arquitetura Irresponsável

                                 Www.caelum.com.br
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
REST Arquitetura Irresponsável

                                 Www.caelum.com.br
Protocolos da Internet




                                 smtp: email
ftp: arquivos



REST Arquitetura Irresponsável

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




                                 nntp: fórum de
ftp: arquivos
                                   discussão
REST Arquitetura Irresponsável

                                               Www.caelum.com.br
Protocolos da Internet

                                          smtp: email
irc: chat


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



REST Arquitetura Irresponsável

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



                                 telnet: acesso remoto
                                         nntp: fórum de discussão
ftp: arquivos



REST Arquitetura Irresponsável

                                                            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



REST Arquitetura Irresponsável

                                                          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


REST Arquitetura Irresponsável

                                                                         Www.caelum.com.br
E hoje?

REST Arquitetura Irresponsável

                                           Www.caelum.com.br
E hoje?

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




REST Arquitetura Irresponsável

                                                        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



REST Arquitetura Irresponsável

                                                Www.caelum.com.br
2000 - Roy Fielding




                                 why the web? why?




REST Arquitetura Irresponsável

                                                     Www.caelum.com.br
protocolos
    usando http


                  xml-rpc
                   soap




REST Arquitetura Irresponsável

                                 Www.caelum.com.br
http != www




REST Arquitetura Irresponsável

                                 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
                  - engineyard
Solução contemporânea




           REST na web
características da web


                                     uri
                                    http
                                 hypermedia




REST Arquitetura Irresponsável

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




REST Arquitetura Irresponsável

                                                    Www.caelum.com.br
Loosely Coupled


REST Arquitetura Irresponsável

                                 Www.caelum.com.br
class Order
                                  acts_as_restfulie do |t|
                                    t << :pay
                                  end
                                 end




                          na prática: ruby
REST Arquitetura Irresponsável

                                                        Www.caelum.com.br
na prática: ruby




                                 <order>
                                  <client>
                                   <name>guilherme silveira</name>
                                  </client>
                                  <link rel=”pay” href=”.../order/3/pay” />
                                 </order>

REST Arquitetura Irresponsável

                                                                        Www.caelum.com.br
Addressability



REST Arquitetura Irresponsável

                                 Www.caelum.com.br
Visibility



REST Arquitetura Irresponsável

                                              Www.caelum.com.br
Scalability


REST Arquitetura Irresponsável

                                        Www.caelum.com.br
na prática: ruby




                      cache_info = {:etag => resource}
                      cache_info[:last_modified] = resource.updated_at
                      if stale? cache_info
                        options[:controller] = self
                         render :xml => resource.to_xml(options)
                      end


REST Arquitetura Irresponsável

                                                                   Www.caelum.com.br
na prática: ruby




                # cache-control
                news = Restfulie.at(uri).get
                news.self.self.self.self



REST Arquitetura Irresponsável

                                                      Www.caelum.com.br
na prática: ruby




                # etags
                order = Restfulie.at(uri).get
                order.self.self.self.self.self
                order.cancel



REST Arquitetura Irresponsável

                                                        Www.caelum.com.br
Fault tolerant
REST Arquitetura Irresponsável

                                 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




REST Arquitetura Irresponsável

                                                                     Www.caelum.com.br
Segurança
REST Arquitetura Irresponsável

                                             Www.caelum.com.br
Search

                                   - indexing




REST Arquitetura Irresponsável

                                                Www.caelum.com.br
$$$ e os custos? $$$


REST Arquitetura Irresponsável

                                 Www.caelum.com.br
huge vendor stack
REST Arquitetura Irresponsável

                                 Www.caelum.com.br
middleware opensource



REST Arquitetura Irresponsável

                                 Www.caelum.com.br
vendor
lock-in

REST Arquitetura Irresponsável

                                 Www.caelum.com.br
web


REST Arquitetura Irresponsável

                                       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




REST Arquitetura Irresponsável

                                                                   Www.caelum.com.br
prática: one application
                              protocol

                      user = Flickr.from_web “.../users/guilhermesilveira”
                      user.photos.add photo # POST
                      user.account.upgrade # POST




REST Arquitetura Irresponsável

                                                                   Www.caelum.com.br
na prática: github




REST Arquitetura Irresponsável

                                                      Www.caelum.com.br
na prática: github
                                  quero watchear um projeto?




REST Arquitetura Irresponsável

                                                               Www.caelum.com.br
na prática: github
                                  quero watchear um projeto?




                                  GET/POST /projeto/watch
                                 GET/POST /projeto/unwatch




REST Arquitetura Irresponsável

                                                               Www.caelum.com.br
na prática: github
                                  quero watchear um projeto?




                                  GET/POST /projeto/watch
                                 GET/POST /projeto/unwatch



          POST /projeto/watcher ==> created /projeto/watcher/545
                      DELETE /projeto/watcher/545



REST Arquitetura Irresponsável

                                                               Www.caelum.com.br
restfulie                      - ruby
                                 - java
                                 - c#
                                 - php?
                                 - erlang?
                                 - outras linguagens?

                                 http://restfulie.caelum.com.br




REST Arquitetura Irresponsável

                                                            Www.caelum.com.br
REST Arquitetura Irresponsável?
Guilherme Silveira
@guilhermecaelum

REST Arquitetura Irresponsável

                                 Www.caelum.com.br

Weitere ähnliche Inhalte

Ähnlich wie Protocolos da Internet e REST: Evolução e Princípios

Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...Luis Cipriani
 
Talk7 - Da concepção ao desenvolvimento de um aplicativo de mensagens
Talk7 - Da concepção ao desenvolvimento de um aplicativo de mensagensTalk7 - Da concepção ao desenvolvimento de um aplicativo de mensagens
Talk7 - Da concepção ao desenvolvimento de um aplicativo de mensagensElo7
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
TDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.ioTDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.iotdc-globalcode
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsCaio Ribeiro Pereira
 
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilComo um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilLuis Cipriani
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...
Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...
Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...Dell Technologies
 
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
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieArquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieVivaldo Jose Breternitz
 
Building Alexa Skills - 5th meetup AWS User Group Joinville
Building Alexa Skills - 5th meetup AWS User Group JoinvilleBuilding Alexa Skills - 5th meetup AWS User Group Joinville
Building Alexa Skills - 5th meetup AWS User Group JoinvilleWalter Coan
 
28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...
28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...
28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...Rio Info
 
WebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthWebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthJean Lima Lopes
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 

Ähnlich wie Protocolos da Internet e REST: Evolução e Princípios (20)

Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
 
HTML/HTTP e a Web
HTML/HTTP e a WebHTML/HTTP e a Web
HTML/HTTP e a Web
 
Talk7 - Da concepção ao desenvolvimento de um aplicativo de mensagens
Talk7 - Da concepção ao desenvolvimento de um aplicativo de mensagensTalk7 - Da concepção ao desenvolvimento de um aplicativo de mensagens
Talk7 - Da concepção ao desenvolvimento de um aplicativo de mensagens
 
A revolução do client side
A revolução do client sideA revolução do client side
A revolução do client side
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
TDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.ioTDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.io
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
 
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilComo um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...
Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...
Projetos Webs Complexos - Como funciona os sites de E-commerce Americanas.Com...
 
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
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieArquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/Mackenzie
 
Building Alexa Skills - 5th meetup AWS User Group Joinville
Building Alexa Skills - 5th meetup AWS User Group JoinvilleBuilding Alexa Skills - 5th meetup AWS User Group Joinville
Building Alexa Skills - 5th meetup AWS User Group Joinville
 
28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...
28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...
28/09/2011 - 16h às 18h - Convergência Digital - plataformas e conteúdo - Car...
 
WebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthWebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuth
 
Projeto para WEB
Projeto para WEBProjeto para WEB
Projeto para WEB
 
Internet e Web NÃO SÃO as mesmas coisas
Internet e Web NÃO SÃO as mesmas coisasInternet e Web NÃO SÃO as mesmas coisas
Internet e Web NÃO SÃO as mesmas coisas
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Asa cpbr4
Asa cpbr4Asa cpbr4
Asa cpbr4
 

Mehr von 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
 

Mehr von 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 @ Qcon 2010
Rest @ Qcon 2010Rest @ Qcon 2010
Rest @ Qcon 2010
 
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
 

Protocolos da Internet e REST: Evolução e Princípios

  • 1. REST: Arquitetura Irresponsável? Guilherme Silveira @guilhermecaelum REST Arquitetura Irresponsável Www.caelum.com.br
  • 3. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado
  • 4. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade
  • 5. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta
  • 6. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade
  • 7. Requisitos não funcionais ✤ protocolo de transferência de dados amplamente utilizado ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Top hits? ✤ http ✤ escalabilidade ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  • 12. Top hits? ✤ http ✤ web: caches ✤ performance alta ✤ alta disponibilidade ✤ permitir evolução sem parar o sistema ✤ permitir evolução sem quebrar clientes ✤ segurança
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. “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
  • 19. Protocolos da Internet ftp: arquivos REST Arquitetura Irresponsável Www.caelum.com.br
  • 20. Protocolos da Internet smtp: email ftp: arquivos REST Arquitetura Irresponsável Www.caelum.com.br
  • 21. Protocolos da Internet smtp: email nntp: fórum de ftp: arquivos discussão REST Arquitetura Irresponsável Www.caelum.com.br
  • 22. Protocolos da Internet smtp: email irc: chat nntp: fórum de discussão ftp: arquivos REST Arquitetura Irresponsável Www.caelum.com.br
  • 23. Protocolos da Internet smtp: email irc: chat telnet: acesso remoto nntp: fórum de discussão ftp: arquivos REST Arquitetura Irresponsável Www.caelum.com.br
  • 24. Protocolos da Internet smtp: email irc: chat telnet: acesso remoto gopher, www: hipertexto nntp: fórum de discussão ftp: arquivos REST Arquitetura Irresponsável Www.caelum.com.br
  • 25. 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 REST Arquitetura Irresponsável Www.caelum.com.br
  • 26. E hoje? REST Arquitetura Irresponsável Www.caelum.com.br
  • 27. E hoje? smtp: email bittorrent: arquivos irc, im: chat ssh: acesso remoto REST Arquitetura Irresponsável Www.caelum.com.br
  • 28. E hoje? home banking: www compras: www calendário: www email: www chat: www documentos: www conteúdo restrito: www sexo: www REST Arquitetura Irresponsável Www.caelum.com.br
  • 29. 2000 - Roy Fielding why the web? why? REST Arquitetura Irresponsável Www.caelum.com.br
  • 30. protocolos usando http xml-rpc soap REST Arquitetura Irresponsável Www.caelum.com.br
  • 31. http != www REST Arquitetura Irresponsável Www.caelum.com.br
  • 32. Solução clássica guj.com.br 2 milhões de page views - jetty - Nginx
  • 33. Solução moderna caelum.com.br cloud - google app engine - amazon - locaweb - engineyard
  • 35. características da web uri http hypermedia REST Arquitetura Irresponsável Www.caelum.com.br
  • 36. Leonard Richardson’s maturity model 0 - nada 1 - uri 2 - http 3 - hypermedia REST Arquitetura Irresponsável Www.caelum.com.br
  • 37. Loosely Coupled REST Arquitetura Irresponsável Www.caelum.com.br
  • 38. class Order acts_as_restfulie do |t| t << :pay end end na prática: ruby REST Arquitetura Irresponsável Www.caelum.com.br
  • 39. na prática: ruby <order> <client> <name>guilherme silveira</name> </client> <link rel=”pay” href=”.../order/3/pay” /> </order> REST Arquitetura Irresponsável Www.caelum.com.br
  • 43. na prática: ruby cache_info = {:etag => resource} cache_info[:last_modified] = resource.updated_at if stale? cache_info options[:controller] = self render :xml => resource.to_xml(options) end REST Arquitetura Irresponsável Www.caelum.com.br
  • 44. na prática: ruby # cache-control news = Restfulie.at(uri).get news.self.self.self.self REST Arquitetura Irresponsável Www.caelum.com.br
  • 45. na prática: ruby # etags order = Restfulie.at(uri).get order.self.self.self.self.self order.cancel REST Arquitetura Irresponsável Www.caelum.com.br
  • 46. Fault tolerant REST Arquitetura Irresponsável Www.caelum.com.br
  • 47. prática: fault tolerant order = Order.from_web “.../order/3” order.add(item) # usa PUT order.add(item) # usa PUT, não irá readicionar REST Arquitetura Irresponsável Www.caelum.com.br
  • 49. Search - indexing REST Arquitetura Irresponsável Www.caelum.com.br
  • 50. $$$ e os custos? $$$ REST Arquitetura Irresponsável Www.caelum.com.br
  • 51. huge vendor stack REST Arquitetura Irresponsável Www.caelum.com.br
  • 52. middleware opensource REST Arquitetura Irresponsável Www.caelum.com.br
  • 55. 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 REST Arquitetura Irresponsável 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 REST Arquitetura Irresponsável Www.caelum.com.br
  • 57. na prática: github REST Arquitetura Irresponsável Www.caelum.com.br
  • 58. na prática: github quero watchear um projeto? REST Arquitetura Irresponsável Www.caelum.com.br
  • 59. na prática: github quero watchear um projeto? GET/POST /projeto/watch GET/POST /projeto/unwatch REST Arquitetura Irresponsável Www.caelum.com.br
  • 60. na prática: github quero watchear um projeto? GET/POST /projeto/watch GET/POST /projeto/unwatch POST /projeto/watcher ==> created /projeto/watcher/545 DELETE /projeto/watcher/545 REST Arquitetura Irresponsável Www.caelum.com.br
  • 61. restfulie - ruby - java - c# - php? - erlang? - outras linguagens? http://restfulie.caelum.com.br REST Arquitetura Irresponsável Www.caelum.com.br
  • 62. REST Arquitetura Irresponsável? Guilherme Silveira @guilhermecaelum REST Arquitetura Irresponsável Www.caelum.com.br

Hinweis der Redaktion

  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. xml-rpc usa parte do http soap usa parte do http mas e a tal da hypermedia? e o resto do http?
  4. o quanto voce usa da web no seu sistema?
  5. evolue sem problemas
  6. 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
  7. 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
  8. URI HTTP &amp;#xE9; stateless
  9. HTTP &amp;#xE9; a nossa API http headers http &amp;#xE9; stateless
  10. URI HTTP &amp;#xE9; stateless - http response codes - http headers - cache - load balancing
  11. 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
  12. 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
  13. 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
  14. verbos idempotentes
  15. usa PUT n&amp;#xE3;o readiciona
  16. - https - oauth
  17. o quanto voce usa da web no seu sistema?
  18. verbos idempotentes
  19. verbos idempotentes
  20. verbos idempotentes
  21. verbos idempotentes
  22. verbos idempotentes
  23. comportamento novo NAO deve quebrar o que ja existe
  24. nao precisa ficar criando uma biblioteca para cada protocolo proprietario que inventamos (a API nossa)... afinal a API &amp;#xC9; A WEB
  25. 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
  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