Conheça o Adianti Framework para PHP:

  • Desenvolvimento com componentes;
  • Formulários e datagrids.
  • Versão Web e Desktop (Gtk);
  • Multiplataforma;
  • Desenhe as interfaces;
  • IDE própria (Adianti Studio).
Ver detalhes...

PHP-GTK Interoperabilidade com Web Services

Para prosseguir com o download do artigo, é necessário realizar login utilizando o Facebook ou Google. Este procedimento é totalmente seguro e nossa aplicação é certificada por ambos os serviços. Após a autenticação, você será direcionado de volta à nossa página para continuar o download.

Login com Facebook Login com Google

Resumo

Introdução No artigo anterior estudamos como armazenar as informações de nossa aplicação PHP-GTK em um banco de dados SQLite. No quinto e último artigo da série, estudaremos formas de trocar informações entre aplicações distantes geograficamente por meio de Web Services. Para tal, iremos criar uma aplicação cliente em PHP-GTK que se comunica com um servidor rodando Apache e PHP. A nossa aplicação cliente PHP-GTK irá oferecer ao usuário uma interface que solicitará a execução de um método da aplicação servidora, que também será escrita em PHP. Antes de escrever a aplicação, vamos explicar alguns conceitos. Web Services Web Services é uma tecnologia que permite aplicações se comunicarem umas com as outras, combinando funcionalidades de forma independente de plataforma ou linguagem. Os Web Services são disponibilizados pela internet por meio de um conjunto de tecnologias como XML e SOAP, que permitem interoperabilidade por meio da publicação de serviços. Web Services podem ser utilizados para diversos fins. Desde criar novas aplicações baseadas em componentes de sistemas legados, criar um serviço on-line de consulta à cotações da bolsa, criar uma aplicação cliente para um serviço de consulta a entrega dos correios, criar uma aplicação cliente para um sistema remoto de registro de horas no ponto ou até criar um sistema de chat, com um programa cliente que conversa com uma aplicação servidora responsável por registrar as mensagens de todos participantes. Enfim, as possibilidades são enormes. Na Figura 1 temos uma representação simplificada da aplicação que iremos construir neste artigo. Ambas aplicações cliente e servidora devem rodar em um dispositivo que permita uma conexão à internet por meio do protocolo TCP/IP. A aplicação cliente faz uma requisição à servidora por meio de um pacote XML (eXtensible Markup Language) de acordo com o protocolo SOAP (Simple Object Access Protocol), a aplicação servidora processa esta requisição de acordo com suas regras internas e devolve a resposta para a aplicação cliente também no formato de um pacote XML. Figura 1. Representação de Web Services Aplicação Cliente O PHP5 possui classes nativas que dão suporte ao protocolo SOAP. Iremos utilizar tais classes para criar nossa aplicação, que será extremamente simples. Ela será formada por uma aplicação cliente, na qual o usuário irá informar o código de uma pessoa e ao clicar no botão "Buscar", um Web Service será acionado. Basicamente este Web Service irá comunicar-se com a aplicação servidora, onde existe um banco de dados de pessoas. A aplicação servidora irá buscar em seu banco de dados interno qual o registro que possui aquele código e retorná-lo para a aplicação cliente. Então, a aplicação cliente irá então exibir o nome da pessoa retornada logo abaixo do botão "Buscar". Veja a aplicação cliente na Figura 2. Nela, criamos uma janela e dentro dela, colocamos uma caixa vertical. Dentro da caixa vertical colocamos nossos objetos GtkLabel (Código, Nome), dois GtkEntry ($codigo, $nome) e um botão para buscar o registro. Tornamos o campo para digitação do nome não-editável pois ele irá apresentar somente o resultado da pesquisa ao servidor. Figura 2. Programa em execução Quando o botão "Buscar" for clicado, o método onBuscar() será executado. Sua função é acionar o Web Service por meio da classe do PHP SoapClient. Esta classe disponibiliza para a aplicação um objeto cujos métodos são exatamente os mesmos disponibilizados pelo servidor do Web Service. Aqui estamos executando o método buscar(), passando como parâmetro o ID da pessoa. Veja que no parâmetro "location", passado ao instanciar o SoapClient, identificamos a localização do servidor do Web Service. Neste exemplo, é um endereço local, mas poderia ser qualquer endereço IP. set_size_request(200,120); // cria os campos $codigo = new GtkEntry; $nome = new GtkEntry; $nome->set_sensitive(FALSE); // cria o botão $botao = new GtkButton('Buscar'); $botao->connect('clicked', 'onBuscar'); // coloca campos na caixa vertical $vbox = new GtkVBox; $vbox->add(new GtkLabel('Código')); $vbox->add($codigo); $vbox->add($botao); $vbox->add(new GtkLabel('Nome')); $vbox->add($nome); // exibe a janela $janela->add($vbox); $janela->show_all(); // aciona o web service function onBuscar() { global $codigo, $nome; // declara parametros do WS $param=array(); $param['encoding'] ='ISO-8859-1'; $param['location'] ='http://127.0.0.1/server.php'; $param['exceptions']= TRUE; $param['uri'] = 'http://test-uri/'; // instancia cliente SOAP $client=new SoapClient(NULL, $param); // executa o método remoto $id = $codigo->get_text(); $resp=$client->buscar($id); $nome->set_text($resp['nome']); } Gtk::Main(); ?> Aplicação Servidora A aplicação servidora irá responder à aplicação cliente. Para disponibilizar métodos para a aplicação cliente, utilizamos a classe SoapServer. Esta classe possui o método addFunction() que adiciona funções ao Web Service. Estas funções são disponibilizadas como métodos do objeto SoapClient. No lado da aplicação servidora, existirá um banco de dados em PostgreSQL contendo uma tabela de pessoas, onde temos campos como "id" e "nome". O papel do método buscar() é receber o código de uma pessoa e retornar o registro da pessoa composto por seu nome à aplicação cliente. addFunction('buscar'); // começa a "ouvir" requisições $server->handle(); ?> Conclusão Neste último artigo da série vimos como trocar informações entre aplicações por meio de Web Services. Com isto completamos nosso objetivo que era de informar o leitor sobre aspectos diferentes relacionados ao PHP-GTK para que o mesmo pudesse buscar maiores informações acerca de um assunto específico quando necessário. Espero que a leitura tenha sido agradável e convido a todos a participarem de nossa comunidade virtual [PHP-GTK Brasil]. Referências e links sugeridos [PHP-GTK Brasil] - http://www.php-gtk.com.br [Livro PHP-GTK] - http://www.php-gtk.com.br/book [Site do Autor] - http://www.pablo.blog.br Sobre o Autor Pablo Dall'Oglio é bacharel em Informática pela UNISINOS. Autor dos projetos Agata Report e Tulip, e dos livros "PHP Programando com Orientação a Objetos" e "PHP-GTK Criando Aplicações Gráficas com PHP", pela editora Novatec. Mantenedor da comunidade brasileira de PHP-GTK. Atualmente, é proprietário da Adianti Solutions (www.adianti.com.br). Pode ser contatado pelo e-mail pablo@php.net.