SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
http://flickr.com/photos/estherase/128983854/




PHP RESTful Web   Felipe Ribeiro - feliperibeiro.com
                  felipernb@gmail.com
       Services   CONAPHP / CONISLI 2008
Quem é esse cabra da peste?
• Felipe Ribeiro

  • Graduando em Ciência da Computação na UFCG;

  • Natural de Campina Grande, PB;

  • Trabalha remotamente como desenvolvedor sênior da
    startup Shoprizer.com, com base em Miami, FL;
Web Services
Web Services
• Web service é uma solução utilizada na integração de sistemas
  e na comunicação entre aplicações diferentes.

• Padrões Abertos

• Independência

  • Sistema Operacional

  • Linguagem de Programação
SOAP é o padrão no mercado...




                        http://www.flickr.com/photos/katcameron/140299496
Mas SOAP é complicado!




                    http://www.flickr.com/photos/jerry7171/192391979/
O que dizem sobre o SOAP...
• Primeiro, você usa UDDI para descobrir aonde estão os
  serviços que você está interessado em consumir.

• Depois você vai consumir os arquivos WSDL que descrevem
  os serviços com uma ferramenta geradora de clientes de web
  services.

• Aí você vai poder finalmente enviar as requisições dos seus
  serviços via HTTP, SMTP, FTP…




                                               http://www.flickr.com/photos/jerry7171/192391979/
Mas o mundo é cruel...
• Registros UDDI são tão lendários que o próximo “Jurassic
  Park” vai ter um;

• O único padrão das mensagens é como o formato delas é
  definido (WSDL), quase nenhuma industria de peso tem
  formatos de mensagens padronizados;

• Ninguém usa web services em SOAP sem HTTP;

• Nem sempre é fácil fazer tecnologia X conversar com
  tecnologia Y via SOAP.

• O modo de invocação dos web services mata qualquer
  possibilidade de se desenvolver clientes Ajax para eles;
                                                 http://www.flickr.com/photos/jerry7171/192391979/
REST - Representational State Transfer
(Transferência de Estado Representacional)




                               http://www.flickr.com/photos/practicalowl/392894653/
• REST não é um envelope XML semelhante ao SOAP


• REST não é um framework/toolkit


• REST não é padronizado pela W3C




                                         http://www.flickr.com/photos/practicalowl/392894653/
• Conjunto de princípios para uma arquitetura baseada em
  como a Web funciona


• ROA - Resource Oriented Architecture (Arquitetura orientada a
  recursos)


• Utiliza padrões já existentes (HTTP, XML,...)


• Tese de doutorado de Roy Fielding (2000)


• Interface uniforme para acesso aos recursos



                                                  http://www.flickr.com/photos/practicalowl/392894653/
Princípios REST




                  http://www.flickr.com/photos/mscolly/145052885
1. Sintaxe universal para identificação de
             recursos - URI




                                http://www.flickr.com/photos/heather/147388906
E o que são esses recursos?




                     http://www.flickr.com/photos/heather/147388906
• Tudo que é importante ao ponto de ser exposto pelo sistema
  na web


• São os substantivos


• Todo recurso tem uma URI.




                                               http://www.flickr.com/photos/heather/147388906
Possíveis recursos
• Fotos no Flickr

• Bookmarks no Delicious

• Atualizações no Twitter

• ...




                            http://www.flickr.com/photos/heather/147388906
2 - Um conjunto bem definido de operações




                            http://www.flickr.com/photos/99129398@N00/255783151
• No mundo real existe “polimorfismo” dos verbos, assim
  simplificamos o nosso vocabulário com verbos genéricos que
  servem para vários tipos objetos, como CRIAR, PEGAR,
  ALTERAR, APAGAR (jogar fora)


• HTTP já oferece as quatro operações que precisamos, GET,
  POST, PUT, DELETE.


• Esses são os verbos


• Assim temos uma interface padrão e genérica para todos os
  recursos.



                                            http://www.flickr.com/photos/99129398@N00/255783151
• Podemos fazer uma analogia desses verbos da seguinte
  maneira



             HTTP           SQL         CRUD
             POST         INSERT       CREATE
              GET         SELECT      RETRIEVE
              PUT         UPDATE       UPDATE
            DELETE        DELETE       DELETE




                                           http://www.flickr.com/photos/99129398@N00/255783151
3 - Um conjunto de diversos formatos
             possíveis




                           http://www.flickr.com/photos/99129398@N00/255783151
• Recursos são conceitos, representações são como lidamos
  com eles


• Nem só de XML vive o REST


• Qualquer formato pode ser utilizado para representar um
  recurso: HTML, Texto puro, PDF, imagens (JPEG, PNG,...) e
  etc...




                                             http://www.flickr.com/photos/99129398@N00/255783151
4 - Protocolo Stateless




                          http://www.savagechickens.com/tag/amnesia
• Toda requisição é independente.


• Toda requisição precisa conter toda informação necessária
  para que o processamento seja feito.


• Ajuda na escalabilidade e balanceamento de carga.




                                                 http://www.savagechickens.com/tag/amnesia
Classificação




               http://www.flickr.com/photos/ogil/2540634421/
REST-RPC (Low REST)
• Utiliza principalmente o método GET para toda a API e a ação
  a ser tomada é descrita na própria URI.

• Mais comum por ser mais fácil de implementar




                                                 http://www.flickr.com/photos/ogil/2540634421/
RESTful (High REST)
• Implementação de acordo com a tese de Roy Fielding

• Utiliza os quatro verbos (GET, POST, PUT, DELETE)




                                               http://www.flickr.com/photos/ogil/2540634421/
• O uso correto ou não dos verbos determina se uma aplicação
  é considerada RESTful ou não.
                        Não RESTful
      Verbo          URI (substantivo)             Ação
       POST          /bookmarks/create               Criar
       GET           /bookmarks/show/1         Visualizar
       POST         /bookmarks/update/1           Alterar
    GET/POST         /bookmarks/delete/1          Apagar
                          RESTful
      Verbo          URI (substantivo)             Ação
       POST              /bookmarks                  Criar
       GET              /bookmarks/1           Visualizar
       PUT              /bookmarks/1              Alterar
     DELETE             /bookmarks/1              Apagar
                                              http://www.flickr.com/photos/ogil/2540634421/
Finalmente PHP...




                    http://www.flickr.com/photos/tobiasschlitt/2644905363/
Implementando um serviço REST
• É muito simples!

• PHP permite que você saiba qual o método HTTP foi utilizado
  na requisição, acessando a variável:
  $_SERVER[‘REQUEST_METHOD’]

• Caso a saída seja em XML, você pode usar o SimpleXML para
  facilitar sua vida.




                                             http://www.flickr.com/photos/tobiasschlitt/2644905363/
Pode ser basicão...
     <?php

     switch($_SERVER['REQUEST_METHOD']) {
        case 'GET':
           //Retorna os dados...
           break;
        case 'POST':
           //Cria um novo registro...
           break;
        case 'PUT':
           //Altera o registro...
           break;
        case 'DELETE':
           //Apaga o registro...
           break;

     }
     ?>
                                            http://www.flickr.com/photos/tobiasschlitt/2644905363/
Ou pode ser mais elaborado...
• Vamos ver como seria um sistema simples de gerenciamento
  de bookmarks

• Usaremos o padrão Front Controller e processaremos as
  requisições de acordo com o recurso que é desejado (nesse
  caso o recurso é o bookmark) e o método HTTP utilizado.

• Talk is cheap... Show me the code!




                                             http://www.flickr.com/photos/tobiasschlitt/2644905363/
Consumindo um serviço REST
• Você vai precisar da libcurl, ou do pacote HTTP_REQUEST do
  PEAR




                                            http://www.flickr.com/photos/tobiasschlitt/2644905363/
Perguntas?




             http://www.flickr.com/photos/oberazzi/318947873
Referências
• Leonard Richardson & Sam Ruby. Restful Web Services,
  O’Reilly;

• http://rest.blueoxen.net/cgi-bin/wiki.pl?FrontPage

• http://en.wikipedia.org/wiki/REST

• http://www.lornajane.net/posts/2008/PHP-Rest-Server-part-1-
  of-3

• Maurício Linhares , Diga não aos web services

• http://www.slideshare.net/allisson/restful-web-services

                                                  http://www.flickr.com/photos/nullalux/2261949240
Obrigado!


      Felipe Ribeiro
 felipernb@gmail.com
http://feliperibeiro.com

                           http://www.flickr.com/photos/jaredchapman/482538719

Contenu connexe

Tendances

Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP2km interativa!
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPRenan Gonçalves
 
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
 
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
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0jesuinoPower
 
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
 
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Carl Edwin
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web ServicesFabio Leal
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHPAdler Medrado
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPEduardo Cesar
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)Bruno Pedro
 
Web services, aplicações, acesso a aplicações, XML, API
Web services, aplicações, acesso a aplicações, XML, APIWeb services, aplicações, acesso a aplicações, XML, API
Web services, aplicações, acesso a aplicações, XML, APINuno Pereira
 
Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.
Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.
Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.David Lojudice Sobrinho
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 

Tendances (20)

Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHP
 
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
 
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
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
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
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Rest
RestRest
Rest
 
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web Services
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHP
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHP
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 
Web services, aplicações, acesso a aplicações, XML, API
Web services, aplicações, acesso a aplicações, XML, APIWeb services, aplicações, acesso a aplicações, XML, API
Web services, aplicações, acesso a aplicações, XML, API
 
Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.
Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.
Case CMS Abril - System of Systems e Arquitetura (quase) Caótica.
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 

Similaire à RESTful PHP Web Services

Rest Java One
Rest Java OneRest Java One
Rest Java OneDextra
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURLricardophp
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xRodrigo Urubatan
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaBreno Vitorino
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugSergio Azevedo
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04Carlos Santos
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
NOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonNOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonfelipe bastosweb
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
Application Servers e Ruby
Application Servers e RubyApplication Servers e Ruby
Application Servers e RubyRafael Soares
 

Similaire à RESTful PHP Web Services (20)

Rest Java One
Rest Java OneRest Java One
Rest Java One
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.x
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
NOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonNOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com python
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
Application Servers e Ruby
Application Servers e RubyApplication Servers e Ruby
Application Servers e Ruby
 

Plus de Felipe Ribeiro

Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebFelipe Ribeiro
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 

Plus de Felipe Ribeiro (6)

SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento Web
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 

RESTful PHP Web Services

  • 1. http://flickr.com/photos/estherase/128983854/ PHP RESTful Web Felipe Ribeiro - feliperibeiro.com felipernb@gmail.com Services CONAPHP / CONISLI 2008
  • 2. Quem é esse cabra da peste? • Felipe Ribeiro • Graduando em Ciência da Computação na UFCG; • Natural de Campina Grande, PB; • Trabalha remotamente como desenvolvedor sênior da startup Shoprizer.com, com base em Miami, FL;
  • 4. Web Services • Web service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. • Padrões Abertos • Independência • Sistema Operacional • Linguagem de Programação
  • 5. SOAP é o padrão no mercado... http://www.flickr.com/photos/katcameron/140299496
  • 6. Mas SOAP é complicado! http://www.flickr.com/photos/jerry7171/192391979/
  • 7. O que dizem sobre o SOAP... • Primeiro, você usa UDDI para descobrir aonde estão os serviços que você está interessado em consumir. • Depois você vai consumir os arquivos WSDL que descrevem os serviços com uma ferramenta geradora de clientes de web services. • Aí você vai poder finalmente enviar as requisições dos seus serviços via HTTP, SMTP, FTP… http://www.flickr.com/photos/jerry7171/192391979/
  • 8. Mas o mundo é cruel... • Registros UDDI são tão lendários que o próximo “Jurassic Park” vai ter um; • O único padrão das mensagens é como o formato delas é definido (WSDL), quase nenhuma industria de peso tem formatos de mensagens padronizados; • Ninguém usa web services em SOAP sem HTTP; • Nem sempre é fácil fazer tecnologia X conversar com tecnologia Y via SOAP. • O modo de invocação dos web services mata qualquer possibilidade de se desenvolver clientes Ajax para eles; http://www.flickr.com/photos/jerry7171/192391979/
  • 9. REST - Representational State Transfer (Transferência de Estado Representacional) http://www.flickr.com/photos/practicalowl/392894653/
  • 10. • REST não é um envelope XML semelhante ao SOAP • REST não é um framework/toolkit • REST não é padronizado pela W3C http://www.flickr.com/photos/practicalowl/392894653/
  • 11. • Conjunto de princípios para uma arquitetura baseada em como a Web funciona • ROA - Resource Oriented Architecture (Arquitetura orientada a recursos) • Utiliza padrões já existentes (HTTP, XML,...) • Tese de doutorado de Roy Fielding (2000) • Interface uniforme para acesso aos recursos http://www.flickr.com/photos/practicalowl/392894653/
  • 12. Princípios REST http://www.flickr.com/photos/mscolly/145052885
  • 13. 1. Sintaxe universal para identificação de recursos - URI http://www.flickr.com/photos/heather/147388906
  • 14. E o que são esses recursos? http://www.flickr.com/photos/heather/147388906
  • 15. • Tudo que é importante ao ponto de ser exposto pelo sistema na web • São os substantivos • Todo recurso tem uma URI. http://www.flickr.com/photos/heather/147388906
  • 16. Possíveis recursos • Fotos no Flickr • Bookmarks no Delicious • Atualizações no Twitter • ... http://www.flickr.com/photos/heather/147388906
  • 17. 2 - Um conjunto bem definido de operações http://www.flickr.com/photos/99129398@N00/255783151
  • 18. • No mundo real existe “polimorfismo” dos verbos, assim simplificamos o nosso vocabulário com verbos genéricos que servem para vários tipos objetos, como CRIAR, PEGAR, ALTERAR, APAGAR (jogar fora) • HTTP já oferece as quatro operações que precisamos, GET, POST, PUT, DELETE. • Esses são os verbos • Assim temos uma interface padrão e genérica para todos os recursos. http://www.flickr.com/photos/99129398@N00/255783151
  • 19. • Podemos fazer uma analogia desses verbos da seguinte maneira HTTP SQL CRUD POST INSERT CREATE GET SELECT RETRIEVE PUT UPDATE UPDATE DELETE DELETE DELETE http://www.flickr.com/photos/99129398@N00/255783151
  • 20. 3 - Um conjunto de diversos formatos possíveis http://www.flickr.com/photos/99129398@N00/255783151
  • 21. • Recursos são conceitos, representações são como lidamos com eles • Nem só de XML vive o REST • Qualquer formato pode ser utilizado para representar um recurso: HTML, Texto puro, PDF, imagens (JPEG, PNG,...) e etc... http://www.flickr.com/photos/99129398@N00/255783151
  • 22. 4 - Protocolo Stateless http://www.savagechickens.com/tag/amnesia
  • 23. • Toda requisição é independente. • Toda requisição precisa conter toda informação necessária para que o processamento seja feito. • Ajuda na escalabilidade e balanceamento de carga. http://www.savagechickens.com/tag/amnesia
  • 24. Classificação http://www.flickr.com/photos/ogil/2540634421/
  • 25. REST-RPC (Low REST) • Utiliza principalmente o método GET para toda a API e a ação a ser tomada é descrita na própria URI. • Mais comum por ser mais fácil de implementar http://www.flickr.com/photos/ogil/2540634421/
  • 26. RESTful (High REST) • Implementação de acordo com a tese de Roy Fielding • Utiliza os quatro verbos (GET, POST, PUT, DELETE) http://www.flickr.com/photos/ogil/2540634421/
  • 27. • O uso correto ou não dos verbos determina se uma aplicação é considerada RESTful ou não. Não RESTful Verbo URI (substantivo) Ação POST /bookmarks/create Criar GET /bookmarks/show/1 Visualizar POST /bookmarks/update/1 Alterar GET/POST /bookmarks/delete/1 Apagar RESTful Verbo URI (substantivo) Ação POST /bookmarks Criar GET /bookmarks/1 Visualizar PUT /bookmarks/1 Alterar DELETE /bookmarks/1 Apagar http://www.flickr.com/photos/ogil/2540634421/
  • 28. Finalmente PHP... http://www.flickr.com/photos/tobiasschlitt/2644905363/
  • 29. Implementando um serviço REST • É muito simples! • PHP permite que você saiba qual o método HTTP foi utilizado na requisição, acessando a variável: $_SERVER[‘REQUEST_METHOD’] • Caso a saída seja em XML, você pode usar o SimpleXML para facilitar sua vida. http://www.flickr.com/photos/tobiasschlitt/2644905363/
  • 30. Pode ser basicão... <?php switch($_SERVER['REQUEST_METHOD']) { case 'GET': //Retorna os dados... break; case 'POST': //Cria um novo registro... break; case 'PUT': //Altera o registro... break; case 'DELETE': //Apaga o registro... break; } ?> http://www.flickr.com/photos/tobiasschlitt/2644905363/
  • 31. Ou pode ser mais elaborado... • Vamos ver como seria um sistema simples de gerenciamento de bookmarks • Usaremos o padrão Front Controller e processaremos as requisições de acordo com o recurso que é desejado (nesse caso o recurso é o bookmark) e o método HTTP utilizado. • Talk is cheap... Show me the code! http://www.flickr.com/photos/tobiasschlitt/2644905363/
  • 32. Consumindo um serviço REST • Você vai precisar da libcurl, ou do pacote HTTP_REQUEST do PEAR http://www.flickr.com/photos/tobiasschlitt/2644905363/
  • 33. Perguntas? http://www.flickr.com/photos/oberazzi/318947873
  • 34. Referências • Leonard Richardson & Sam Ruby. Restful Web Services, O’Reilly; • http://rest.blueoxen.net/cgi-bin/wiki.pl?FrontPage • http://en.wikipedia.org/wiki/REST • http://www.lornajane.net/posts/2008/PHP-Rest-Server-part-1- of-3 • Maurício Linhares , Diga não aos web services • http://www.slideshare.net/allisson/restful-web-services http://www.flickr.com/photos/nullalux/2261949240
  • 35. Obrigado! Felipe Ribeiro felipernb@gmail.com http://feliperibeiro.com http://www.flickr.com/photos/jaredchapman/482538719