Palestra dada por mim (Felipe Ribeiro) no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do 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/
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
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
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/
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/