Anda di halaman 1dari 6

Exemplo de integrao REST entre

servidor e cliente
30 de outubro de 2012 por Daniel Schmitz
Este o nosso segundo artigo sobre a arquitetura REST. No primeiro artigo, ns
propusemos que a arquitetura REST uma evoluo em relao a MVC, no que diz
respeito separao entre dados e visualizao. Neste artigo, iremos reforar essa
separao, alm de apresentar um exemplo simples envolvendo as linguagens PHP,
jQuery e Flex.
Ao imaginarmos como essa separao importante para futuros sistemas, podemos
fazer uma analogia entre duas pessoas conversando em idiomas diferentes. Se voc
fala portugus e quer conversar com um russo, ou voc aprende russo (e vice-versa) ou
no haver comunicao. Esse o MVC, se voc obtm dados de um banco e
quer exibi-los no navegador do cliente, voc dever aprender como obter esses dados e
como exibi-los segundo o framework que est usando. Para resolvermos o problema da
comunicao entre voc e o russo, podemos adicionar uma terceira linguagem no meio,
por exemplo o ingls: voc pode perguntar em ingls e o russo responder em ingls e, a
partir desse momento, haver uma comunicao. Mesmo que o russo pense em russo, se
na hora de responder ele usar o ingls, voc entender!
Fazendo uma analogia com o MVC, voc precisa de algo em comum entre o servidor e
o cliente, algo que todos possam entender. Se o servidor responder nesse padro e o seu
cliente souber ler esse padro, a comunicao ser realizada independentemente de
tecnologia. E esse padro justamente a linguagem JSON, ela o elo entre servidor e
cliente. Na figura abaixo, temos um exemplo completo de como funciona esse fluxo.
Recomendo abrir em outra janela e acompanhar a sequncia apresentada abaixo da
figura.


Em 1, temos a requisio http feita do cliente ao servidor. Todo processo de acesso
camada de negcios comea com uma requisio HTTP, que o processo natural de
uma pgina Web. Essa pergunta deve estar em um formato conhecido pelo servidor
(lembre-se da analogia de que voc deve perguntar em ingls ao russo). Esse formato
REST, em 2, compreendido por pedidos POST ou GET (existem outros) e por um
formato de URL que seja vlido.
O servio REST ir trabalhar esse pedido, realizar o processamento da camada de
negcios e gerar uma resposta HTTP (3). Essa resposta tambm deve estar em um
padro (lembre-se, agora o russo est respondendo sua pergunta). E esse padro o
JSON, em 4, que o formato de dados mais leve existente. Se a resposta comum, em
JSON, qualquer tipo de aplicao que souber us-la poder acessar o servidor e obter
dados. Ento, em 5, podemos criar layouts diferentes em tecnologias diferentes.
Uma observao importante que voc deve compreender que o servidor pouco sabe de
quem o est usando, se um dispositivo mvel, um computador ou uma geladeira.
Algum pediu a ele algo, e ele est apenas respondendo. No outro lado, o
cliente no sabe o que est acontecendo no servidor, ele no sabe se PHP, Java ou
Rails. Ele no precisa saber, j que a resposta em JSON o que definitivamente importa
para ele.
E como isso pode salvar o seu projeto? Como ambos (cliente e servidor) no se
bicam, voc pode troc-los vontade, contanto que respeitem o REST. Pode-se
melhorar o servidor, trocando de framework ou tecnologia, como pode-se melhorar o
cliente e, o mais importante, ter mltiplos clientes. No momento em que voc enxergar
que somente com um cdigo no servidor poder ter um cliente web, outro mobile, outro
no tablet e mais um em um dispositivo embarcado, voc comear a ver que a tendncia
do desenvolvimento de software separar dados de sua visualizao.
Para fixar, vou comentar um caso pessoal em um projeto de que participo. Ns criamos
tudo em PHP e usamos cakePHP para a view, isso em 2007. At a, tudo bem, mas veio
o Adobe Flex e decidimos portar a tecnologia para ele, usando AMF. Isso envolveu
mexer 100% na view (cri-la de novo), e mexer 50% nas regras de negcio para se
adequar ao AMF. Depois de pronto, tudo timo e todos felizes! Mas, agora, o Flex vai
ser trocado pelo sencha e o cliente precisa de portabilidade para tablets (Android).
Novamente, estamos alterando 100% view (descarte) e 50% do servidor que, claro,
agora usar REST. Na prxima mudana de tecnologia, ou se formos adicionar uma
nova view, basta respeitar o REST que no precisaremos alterar em nada o servidor.
Exemplo prtico
Chega de blblbl! Vamos a um exemplo! Inicialmente, vamos criar algo muito
simples, apenas para entender o processo como um todo. Voc precisar de um servidor
Apache/IIS com PHP . No mostrarei como instalar isso para no perder o foco, mas,
resumindo, voc pode instalar o WampServer em seu Windows. Se voc tiver dvidas
sobre isso, comente que eu te ajudo.
Com o WampServer instalado, sabemos que ao acessar http://localhost/ estaremos
acessando o diretrio web root do apache, que fica precisamente em c:\wamp\www,
caso tenha instalado o wampserver no padro. Nesse diretrio, vamos criar um arquivo
chamado json.php, que ir simular uma sada JSON. Vamos l:
<?php
//Uma simples sada JSON
$object = new stdclass();
$object->mensagem = "Hello World!";
echo json_encode($object);
?>
Esse cdigo produz a seguinte sada no navegador:

A resposta que voc v no navegador uma representao em texto do objeto que foi
criado atravs do stdclass do PHP. Essa representao segue um formato que voc pode
entender melhor em www.json.org. Independentemente do cliente que vai consumir
essa resposta, ela tambm usar a notao JSON para voltar com a string serializada em
um objeto.
Lendo a resposta atravs do jQuery
jQuery uma biblioteca JavasScript que, se voc no a conhece, voc no
programador web. Vamos criar o arquivo c:\web\www\json-jquery.php e implementar a
leitura do json pela biblioteca (o que tambm chamamos de ajax, voc conhece?). Segue
o cdigo:
<html>

<head>

<title></title>

<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"
></script>

</head>

<body>

<form>

<input id="go" type="button" value="Diga ola ao REST"/>

</form>

<script type="text/javascript">

$(document).ready(function() {

$('#go').click(function()

{

$.ajax({

url: "json.php",

dataType: 'json'

}).done(function(data) {

alert(data.mensagem);

});

})

});

</script>

</body>

</html>
Melhor formatado:

Esse cdigo usa jQuery para realizar uma requisio HTTP ao arquivo json.php, que j
est respondendo em JSON. Como no objeto ajax do jQuery foi configurado que o
formato JSON, a resposta ser convertida para um objeto JavaScript. Esse objeto a
varivel data, na qual fao um alert de data.mensagem.
Perceba que $object->mensagem do php foi lido como data.mensagem no Javascript.
Lendo a resposta com Flash Builder
Flash Builder uma ferramenta para criar aplicaes ricas com Flex, e voc pode us-la
para consumir novamente o arquivo json.php, mostrando assim que temos duas
tecnologias completamente diferentes lendo o mesmo servidor. No o foco deste
artigo mostrar como usar o Flash Builder, mas voc pode seguir as imagens a seguir
para ter uma boa ideia de como funciona. Inicialmente, criamos o projeto Flex, que
chamamos de json-flex:


Aps criar o projeto, vamos acessar o servidor. Para isso, na aba Data/Services, clique
em Connect to data e escolha o mtodo HTTP:


Clique em next e configure o nome do servio e o mtodo, conforme a tela a seguir:



Aps criar o servio, vamos test-lo. A meta aqui somente testar o acesso e ver a
resposta, sem nenhuma tela. Para isso, clique no mtodo getHelloWorld e acione o
menu Test Operation. Clique no boto Test e veja a resposta:


Veja que, com o Flex, conseguimos ler o mesmo contedo que o jQuery leu. O cliente
diferente e a forma de configurar tambm, mas como o padro de resposta o mesmo,
podemos us-lo para na tecnologia que desejarmos.
Todo o objetivo do nosso sistema ser este: separar a camada de dados e de
visualizao, se possvel inclusive em equipes diferentes, de forma que cada uma possa
concentrar seus esforos no que realmente interessa. Assim, comeamos a desmistificar
o REST, apresentado aqui com uma arquitetura onde existe um padro de comunicao
entre diferentes tecnologias. At ento no abordamos teoricamente o que REST, e
no vamos fazer isso por enquanto, dedicando-se apenas a prtica.
Com isso, terminamos nosso segundo artigo e no prximo iremos abordar com mais
detalhes a tecnologia REST para servidores PHP.
Aguardem e contribuam com sugestes!

Anda mungkin juga menyukai