SlideShare a Scribd company logo
1 of 49
Download to read offline
RESTful Web Services
Teoria e Prática

                                    Luiz Costa
                         luiz.costa@caelum.com.br

                                Sergio Junior
                       sergio.junior@caelum.com.br
Integração   O velho problema
O Banco de Dados   Solução Prática #1
Transferência de Arquivos   Solução Prática #2
Web Services   Solução Prática #3
Como são os Web Services hoje?

• Baseados na especificação WS-*

• Descritores WSDL

• SOAP e XML

• Utilizam um estilo RPC(Remote
Procedure Call)

  Focados em Operações
Foco nas operações
Serviço Tradicional




 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Body>
    <m:ObterPedidos xmlns:m=“urn:ServicosPedidos">
      
 <id xsi:Type=‘xsd:integer’>12553</id>
    </m:ObterPedidos>
  </env:Body>
 </env:Envelope>
Foco nas operações
Serviço Tradicional



      No matter how hard I try, I still
     think the WS-* stack is bloated,
     opaque, and insanely complex. I
       think it's going to be hard to
     understand, hard to implement,
     hard to interoperate, and hard to
                   secure.




                                          Tim Bray Director of Web Technologies at Sun
                                          Microsystems.
                                          Fonte:http://qotd.me/q2004-11-02.html
Precisamos disso tudo?   Alguém já não resolveu isso?
Web   Como funciona?
Web
      http://aljazeera.com/
Web
      http://aljazeera.com/
Web apenas para humanos?

 “Não existe nenhuma diferença
essencial entre a web humana e a
       web programável”
               Leonard Richardson e Sam Ruby
Características da Web

• Tolerante a falhas
• Escalável
• Seguro
• Baixo acoplamento
Características da Web

• Tolerante a falhas
• Escalável
• Seguro
• Baixo acoplamento

Isso não se parece com as características
 que queremos em nossos sistemas hoje?
Architectural Styles and
the Design of Network-based
   Software Architectures
           Dissertação de Doutorado – Roy Fielding - 2000
REST
REpresentational
     State
   Transfer
   O que é isso?
Recursos
É algo interessante para sua
          aplicação.

 Fotos, relatorios, arquivos,
Lista de buracos da BR 101.

 Tudo é um recurso.
Identidade de um Recurso

Para ser encontrado o recurso precisa ser
              identificado.

 Todos os clientes
 http//exemplo.com/clientes

 Acessando um cliente
 http//exemplo.com/clientes/10

 Acessando outro cliente
 http//exemplo.com/clientes/23
Link os Recursos
Os dados do pedido junto com o cliente


<cliente>
 <id> 23 </id>
 <nome>Joana Cardoso</nome>
 <cpf>12345678900</cpf>
  <pedidos>
	       <pedido>
               <id>1234</id>
	       	      <data> 01/10/2009</data>
	       	      <valor> 100.00 </valor>
	       	      <items>
	       	         <produto>33</produto>
                 <quantidade>1</quantidade>
	       	         <preco>100.00</preco>
	       	      </items>	
	       </pedido>
   </pedidos>
</cliente>
Link os Recursos
Os recursos devem estar ligados entre sí

<cliente>
 <id>23</id>
 <nome>Joana Cardoso</nome>
 <cpf>12345678900</cpf>
 <pedidos>
  <pedido ref=’http://example.com/pedidos/
  1234’ />
	 </pedido>
 </pedidos>
</cliente>
Interface Uniforme   Mantendo as coisas simples
Interface Uniforme
Interface Uniforme




    Agora o foco são os
        Recursos.
Interface Uniforme
Recurso /Pedidos/{Identificador}
http://exemplo.com/pedidos/10
•GET() - obtém os detalhes de um pedido específico

•PUT() - atualiza um pedido

•POST() - adiciona um item  em um pedido

•DELETE() – cancela um pedido
Interface Uniforme
Recurso /Pedidos
http://exemplo.com/pedidos
•GET() - lista todos os pedidos

•PUT() - não é utilizado aqui

•POST() - adiciona um novo pedido

•DELETE() – não é utilizado aqui
Mas e se alguma coisa der errado?
Códigos de status do HTTP
•100   –   Continue
•200   –   OK
•201   –   Created
•301   –   Moved Permanently
•303   –   See Other
•304   –   Not Modified
•400   –   Bad Request
•401   –   Unauthorized
•403   –   Forbidden
•404   –   Not Found
•405   –   Method Not Allowed
•500   –   Internal Server Error
Representações




            Atom
Escolhendo uma Representação
      GET /pedidos/2009/11 HTTP 1.1
            HOST exemplo.com
          Accept: application/xml




          200 OK
          <pedido … />
Possíveis representações do recurso:
        http://exemplo.com/clientes/23
         XHTML                        XML


<html>
<body>
<dt>id</dt>
 <dd>23</dd>              <cliente>
                           <id> 23 </id>
<dt>nome</dt>
                           <nome>Joana Cardoso</nome>
 <dd>Joana Cardoso</dd>    <cpf>12345678900</cpf>
<dt>cpf</dt>              </cliente>
 <dd>12345678901</dd>
</body>
</html>
Falta de Estado
Falta de Estado

• Basicamente isso se traduz em não utilizar sessões HTTP.
• Sem sessões, favorecemos a escalabilidade.
• Os clientes precisam aprender a viver sem sessões.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Escalabilidade   Falta de estado pode ser bom.
Interface Uniforme(Web
                                    Server)
  Cliente
(Web Client)




    Representação do                 Recursos Lógicos
         Recurso
  (e.g. XML document)
                                                              Recursos físicos




                        A arquitetura               simplicidade
Demonstração   show me the code!
Recursos   Vamos identificar os
           recursos
Algumas Desvantagens
• Um pouco mais trabalhoso
• Sem geração automática de classes, tal como as IDE’s fazem com wsdl
• A maioria dos proxies web “barram” requisições PUT.




                          Conclusão         Nem tudo são flores
Algumas Desvantagens
• Um pouco mais trabalhoso
• Sem geração automática de classes, tal como as IDE’s fazem com wsdl
• A maioria dos proxies web “barram” requisições PUT.
Algumas Vantagens
• Para maioria dos servicos web o protocolo HTTP é suficiente
• REST fornece múltiplas representações para os recursos.
• REST tem altos níveis de interoperabilidade.




                           Conclusão          Nem tudo são flores
Algumas Desvantagens
• Um pouco mais trabalhoso
• Sem geração automática de classes, tal como as IDE’s fazem com wsdl
• A maioria dos proxies web “barram” requisições PUT.
Algumas Vantagens
• Para maioria dos servicos web o protocolo HTTP é suficiente
• REST fornece múltiplas representações para os recursos.
• REST tem altos níveis de interoperabilidade.


 “Não é porque a WEB funciona que isso significa
     que REST é sempre a solução correta.”
     “REST é modelo viável para Web Services.”


                           Conclusão          Nem tudo são flores
Obrigado.
                            Luiz Costa
             luiz.costa@caelum.com.br
                          Sergio Junior
          sergio.junior@caelum.com.br


    FIM

More Related Content

What's hot

Conexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxConexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxHelder da Rocha
 
REST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasREST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasAlessandro Oliveira
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Javaalexmacedo
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONMarcio Junior Vieira
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a InternetLeonardo Soares
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)Bruno Pedro
 
Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHPelliando dias
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web ServicesFabio Leal
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMarcelo Linhares
 

What's hot (20)

Conexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxConexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao Ajax
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
REST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasREST: Padrões e Melhores Práticas
REST: Padrões e Melhores Práticas
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Java
 
Boas práticas de API Design
Boas práticas de API DesignBoas práticas de API Design
Boas práticas de API Design
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a Internet
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 
Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 
Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHP
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
RESTful com json
RESTful com jsonRESTful com json
RESTful com json
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web Services
 
Curso AngularJS - Parte 2
Curso AngularJS - Parte 2Curso AngularJS - Parte 2
Curso AngularJS - Parte 2
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
 

Viewers also liked

Diseño de APIs con Ruby
Diseño de APIs con RubyDiseño de APIs con Ruby
Diseño de APIs con RubySoftware Guru
 
Rest in practice con Symfony2
Rest in practice con Symfony2Rest in practice con Symfony2
Rest in practice con Symfony2Daniel Londero
 
REST - Representational state transfer
REST - Representational state transferREST - Representational state transfer
REST - Representational state transferTricode (part of Dept)
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajoliCaue Fajoli
 
REST: From GET to HATEOAS
REST: From GET to HATEOASREST: From GET to HATEOAS
REST: From GET to HATEOASJos Dirksen
 

Viewers also liked (6)

Rest basico
Rest basicoRest basico
Rest basico
 
Diseño de APIs con Ruby
Diseño de APIs con RubyDiseño de APIs con Ruby
Diseño de APIs con Ruby
 
Rest in practice con Symfony2
Rest in practice con Symfony2Rest in practice con Symfony2
Rest in practice con Symfony2
 
REST - Representational state transfer
REST - Representational state transferREST - Representational state transfer
REST - Representational state transfer
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê Fajoli
 
REST: From GET to HATEOAS
REST: From GET to HATEOASREST: From GET to HATEOAS
REST: From GET to HATEOAS
 

Similar to RESTful Web Services: Teoria e Prática

Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Latinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyLatinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyDextra
 
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Leandro Guimarães
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e RespostaThiago Rondon
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureGiovanni Bassi
 
Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infosimples
 
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...Cleber Dantas
 
Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos? Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos? Fabrício Lopes Sanchez
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIgor Takenami
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Tiago Marchetti Dolphine
 
Implementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure BrasilImplementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure BrasilRenato Groff
 

Similar to RESTful Web Services: Teoria e Prática (20)

Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Latinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyLatinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com Holy
 
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows Azure
 
Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)
 
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
 
Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos? Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos?
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
Implementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure BrasilImplementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
 
Conhecendo o Ruby on Rails
Conhecendo o Ruby on RailsConhecendo o Ruby on Rails
Conhecendo o Ruby on Rails
 

RESTful Web Services: Teoria e Prática

  • 1. RESTful Web Services Teoria e Prática Luiz Costa luiz.costa@caelum.com.br Sergio Junior sergio.junior@caelum.com.br
  • 2. Integração O velho problema
  • 3. O Banco de Dados Solução Prática #1
  • 4. Transferência de Arquivos Solução Prática #2
  • 5. Web Services Solução Prática #3
  • 6. Como são os Web Services hoje? • Baseados na especificação WS-* • Descritores WSDL • SOAP e XML • Utilizam um estilo RPC(Remote Procedure Call) Focados em Operações
  • 7. Foco nas operações Serviço Tradicional <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> <m:ObterPedidos xmlns:m=“urn:ServicosPedidos"> <id xsi:Type=‘xsd:integer’>12553</id> </m:ObterPedidos> </env:Body> </env:Envelope>
  • 8. Foco nas operações Serviço Tradicional No matter how hard I try, I still think the WS-* stack is bloated, opaque, and insanely complex. I think it's going to be hard to understand, hard to implement, hard to interoperate, and hard to secure. Tim Bray Director of Web Technologies at Sun Microsystems. Fonte:http://qotd.me/q2004-11-02.html
  • 9. Precisamos disso tudo? Alguém já não resolveu isso?
  • 10. Web Como funciona?
  • 11. Web http://aljazeera.com/
  • 12. Web http://aljazeera.com/
  • 13. Web apenas para humanos? “Não existe nenhuma diferença essencial entre a web humana e a web programável” Leonard Richardson e Sam Ruby
  • 14. Características da Web • Tolerante a falhas • Escalável • Seguro • Baixo acoplamento
  • 15. Características da Web • Tolerante a falhas • Escalável • Seguro • Baixo acoplamento Isso não se parece com as características que queremos em nossos sistemas hoje?
  • 16.
  • 17. Architectural Styles and the Design of Network-based Software Architectures Dissertação de Doutorado – Roy Fielding - 2000
  • 18. REST
  • 19. REpresentational State Transfer O que é isso?
  • 20. Recursos É algo interessante para sua aplicação. Fotos, relatorios, arquivos, Lista de buracos da BR 101. Tudo é um recurso.
  • 21. Identidade de um Recurso Para ser encontrado o recurso precisa ser identificado. Todos os clientes http//exemplo.com/clientes Acessando um cliente http//exemplo.com/clientes/10 Acessando outro cliente http//exemplo.com/clientes/23
  • 22. Link os Recursos Os dados do pedido junto com o cliente <cliente> <id> 23 </id> <nome>Joana Cardoso</nome> <cpf>12345678900</cpf> <pedidos> <pedido> <id>1234</id> <data> 01/10/2009</data> <valor> 100.00 </valor> <items> <produto>33</produto> <quantidade>1</quantidade> <preco>100.00</preco> </items> </pedido> </pedidos> </cliente>
  • 23. Link os Recursos Os recursos devem estar ligados entre sí <cliente> <id>23</id> <nome>Joana Cardoso</nome> <cpf>12345678900</cpf> <pedidos> <pedido ref=’http://example.com/pedidos/ 1234’ /> </pedido> </pedidos> </cliente>
  • 24. Interface Uniforme Mantendo as coisas simples
  • 26. Interface Uniforme Agora o foco são os Recursos.
  • 27. Interface Uniforme Recurso /Pedidos/{Identificador} http://exemplo.com/pedidos/10 •GET() - obtém os detalhes de um pedido específico •PUT() - atualiza um pedido •POST() - adiciona um item  em um pedido •DELETE() – cancela um pedido
  • 28. Interface Uniforme Recurso /Pedidos http://exemplo.com/pedidos •GET() - lista todos os pedidos •PUT() - não é utilizado aqui •POST() - adiciona um novo pedido •DELETE() – não é utilizado aqui
  • 29. Mas e se alguma coisa der errado? Códigos de status do HTTP •100 – Continue •200 – OK •201 – Created •301 – Moved Permanently •303 – See Other •304 – Not Modified •400 – Bad Request •401 – Unauthorized •403 – Forbidden •404 – Not Found •405 – Method Not Allowed •500 – Internal Server Error
  • 31. Escolhendo uma Representação GET /pedidos/2009/11 HTTP 1.1 HOST exemplo.com Accept: application/xml 200 OK <pedido … />
  • 32. Possíveis representações do recurso: http://exemplo.com/clientes/23 XHTML XML <html> <body> <dt>id</dt> <dd>23</dd> <cliente> <id> 23 </id> <dt>nome</dt> <nome>Joana Cardoso</nome> <dd>Joana Cardoso</dd> <cpf>12345678900</cpf> <dt>cpf</dt> </cliente> <dd>12345678901</dd> </body> </html>
  • 34. Falta de Estado • Basicamente isso se traduz em não utilizar sessões HTTP. • Sem sessões, favorecemos a escalabilidade. • Os clientes precisam aprender a viver sem sessões.
  • 35. Escalabilidade Falta de estado pode ser bom.
  • 36. Escalabilidade Falta de estado pode ser bom.
  • 37. Escalabilidade Falta de estado pode ser bom.
  • 38. Escalabilidade Falta de estado pode ser bom.
  • 39. Escalabilidade Falta de estado pode ser bom.
  • 40. Escalabilidade Falta de estado pode ser bom.
  • 41. Escalabilidade Falta de estado pode ser bom.
  • 42. Escalabilidade Falta de estado pode ser bom.
  • 43. Interface Uniforme(Web Server) Cliente (Web Client) Representação do Recursos Lógicos Recurso (e.g. XML document) Recursos físicos A arquitetura simplicidade
  • 44. Demonstração show me the code!
  • 45. Recursos Vamos identificar os recursos
  • 46. Algumas Desvantagens • Um pouco mais trabalhoso • Sem geração automática de classes, tal como as IDE’s fazem com wsdl • A maioria dos proxies web “barram” requisições PUT. Conclusão Nem tudo são flores
  • 47. Algumas Desvantagens • Um pouco mais trabalhoso • Sem geração automática de classes, tal como as IDE’s fazem com wsdl • A maioria dos proxies web “barram” requisições PUT. Algumas Vantagens • Para maioria dos servicos web o protocolo HTTP é suficiente • REST fornece múltiplas representações para os recursos. • REST tem altos níveis de interoperabilidade. Conclusão Nem tudo são flores
  • 48. Algumas Desvantagens • Um pouco mais trabalhoso • Sem geração automática de classes, tal como as IDE’s fazem com wsdl • A maioria dos proxies web “barram” requisições PUT. Algumas Vantagens • Para maioria dos servicos web o protocolo HTTP é suficiente • REST fornece múltiplas representações para os recursos. • REST tem altos níveis de interoperabilidade. “Não é porque a WEB funciona que isso significa que REST é sempre a solução correta.” “REST é modelo viável para Web Services.” Conclusão Nem tudo são flores
  • 49. Obrigado. Luiz Costa luiz.costa@caelum.com.br Sergio Junior sergio.junior@caelum.com.br FIM