35
PHP RESTful Web Services Felipe Ribeiro - feliperibeiro.com [email protected] CONAPHP / CONISLI 2008 http://flickr.com/photos/estherase/128983854/

PHP RESTful Web Services

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: PHP RESTful Web Services

PHP RESTful Web Services

Felipe Ribeiro - [email protected] / CONISLI 2008

http://flickr.com/photos/estherase/128983854/

Page 2: PHP RESTful Web Services

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;

Page 3: PHP RESTful Web Services

Web Services

Page 4: PHP RESTful 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

Page 5: PHP RESTful Web Services

SOAP é o padrão no mercado...

http://www.flickr.com/photos/katcameron/140299496

Page 6: PHP RESTful Web Services

Mas SOAP é complicado!

http://www.flickr.com/photos/jerry7171/192391979/

Page 7: PHP RESTful Web Services

http://www.flickr.com/photos/jerry7171/192391979/

• 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…

O que dizem sobre o SOAP...

Page 8: PHP RESTful Web Services

http://www.flickr.com/photos/jerry7171/192391979/

• 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;

Mas o mundo é cruel...

Page 9: PHP RESTful Web Services

REST - Representational State Transfer(Transferência de Estado Representacional)

http://www.flickr.com/photos/practicalowl/392894653/

Page 10: PHP RESTful Web Services

• 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/

Page 11: PHP RESTful Web Services

• 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/

Page 12: PHP RESTful Web Services

Princípios REST

http://www.flickr.com/photos/mscolly/145052885

Page 13: PHP RESTful Web Services

1. Sintaxe universal para identificação de recursos - URI

http://www.flickr.com/photos/heather/147388906

Page 14: PHP RESTful Web Services

E o que são esses recursos?

http://www.flickr.com/photos/heather/147388906

Page 15: PHP RESTful Web Services

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.

Page 16: PHP RESTful Web Services

http://www.flickr.com/photos/heather/147388906

• Fotos no Flickr

• Bookmarks no Delicious

• Atualizações no Twitter

• ...

Possíveis recursos

Page 17: PHP RESTful Web Services

2 - Um conjunto bem definido de operações

http://www.flickr.com/photos/99129398@N00/255783151

Page 18: PHP RESTful Web Services

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.

Page 19: PHP RESTful Web Services

http://www.flickr.com/photos/99129398@N00/255783151

• Podemos fazer uma analogia desses verbos da seguinte maneira

HTTP SQL CRUDPOST INSERT CREATEGET SELECT RETRIEVEPUT UPDATE UPDATE

DELETE DELETE DELETE

Page 20: PHP RESTful Web Services

3 - Um conjunto de diversos formatos possíveis

http://www.flickr.com/photos/99129398@N00/255783151

Page 21: PHP RESTful Web Services

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...

Page 22: PHP RESTful Web Services

4 - Protocolo Stateless

http://www.savagechickens.com/tag/amnesia

Page 23: PHP RESTful Web Services

• 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

Page 24: PHP RESTful Web Services

Classificação

http://www.flickr.com/photos/ogil/2540634421/

Page 25: PHP RESTful Web Services

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/

Page 26: PHP RESTful Web Services

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/

Page 27: PHP RESTful Web Services

• 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 Apagarhttp://www.flickr.com/photos/ogil/2540634421/

Page 28: PHP RESTful Web Services

Finalmente PHP...

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

Page 29: PHP RESTful Web Services

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/

Page 30: PHP RESTful Web Services

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; }?>

Page 31: PHP RESTful Web Services

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/

Page 32: PHP RESTful Web Services

Consumindo um serviço REST

• Você vai precisar da libcurl, ou do pacote HTTP_REQUEST do PEAR

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

Page 33: PHP RESTful Web Services

Perguntas?

http://www.flickr.com/photos/oberazzi/318947873

Page 34: PHP RESTful Web Services

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