Olá pessoal, quero agradecer a visita de vocês pelo sucesso que está sendo a coluna de desenvolvimento do Mundo TI Brasil.
Existem alguns frameworks para se criar webservices que, além de pesados, são bem complexos e difíceis de implementar. Hoje vamos criar e consumir um webservice em PHP de maneira rápida, simples e bem enxuta.
A versão do PHP utilizada nesse post é a 5.5, o servidor pode ser qualquer distribuição linux, mas estou utilizando o Ubuntu Server 14.04. Como arquivos e bibliotecas extras, temos o Zend Framework, framework criado pela própria mantenedora do PHP, a Zend. Atualmente esse framework se encontra na versão 2, mas ainda é amplamente utilizada a versão 1, que será utilizada nesse post. Não entrarei em detalhes sobre o poderoso Zend Framework, apenas uma pequena utilização do Soap Server.
Bom, vamos lá!
Vamos começar com a instalação do Zend Framework 1 no nosso Ubuntu Server.
~# apt-get install zend-framework
Agora que já instalamos o framework, vamos criar o nosso webserver.
Vamos supor que todos os arquivos estejam no mesmo diretório.
~# mkdir webservice ~# cd webservice
Vamos criar a nossa classe chamada MinhaClasse.php
~# vim MinhaClasse.php
Coloque o seguinte conteúdo
class MinhaClasse { /** * Construtor da classe. * @access public * @return void */ public function __construct() { } /** * Testa se numero é positivo ou negativo * @access public * @param int $numero * @return string */ public function testaNumero($numero) { if ($numero == 0) { $retorno = "Numero neutro"; } elseif ($numero > 0) { $retorno = "Numero positivo"; } else { $retorno = "Numero negativo"; } return $retorno; } /** * Destrutor da classe * @return void */ public function __destruct() { } }
Vamos criar um arquivo chamado index.php (nosso webservice)
~# vim index.php
E colocar o seguinte conteúdo
Zend/Soap/AutoDiscover.php'; /** * Inclui a classe Zend_Soap_Server * Essa classe é responsável por criar o nosso servidor SOAP */ require_once 'Zend/Soap/Server.php'; /** * Faz include da classe que será consumida pelo webservice */ require_once 'MinhaClasse.php'; /** * Verifica a chave de acesso calculada dinamicamente * Hash SHA1 do dia no formato dd/mm/YYYY * Essa chave serve para garantir que somente o cliente que * a possua, consuma o webservice. Uma simples (muito simples) * maneira de validar a permissão de consumo do nosso webservice. */ define("ACCESSKEY", (sha1("Minha".date('d/m/Y')."Classe"))); if (isset($_GET['key']) && $_GET['key'] === ACCESSKEY) { /** * Verifica se o parâmetro wsdl está na url para montar o WSDL */ if(isset($_GET['wsdl'])) { /** * Faz a instância da classe Zend_Soap_AutoDiscover */ $wsdl = new Zend_Soap_AutoDiscover(); /** * Chama a classe para Zend_Soap_AutoDiscover criar o WSDL */ $wsdl->setClass('MinhaClasse'); $wsdl->handle(); } else { /** * Opções básicas de criação do Zend_Soap_Server */ $options = array( 'soap_version' => SOAP_1_2, 'encoding' => 'UTF-8', 'uri' => 'https://127.0.0.1/webservice/' ); /** * Faz a instância do Zend_Soap_Server */ $server = new Zend_Soap_Server(null, $options); /** * Desabilita o cache wsdl do SOAP */ $server->setWsdlCache(0); /** * Seta a classe a ser consumida com o Zend_Soap_Server */ $server->setClass('MinhaClasse'); $server->handle(); } } else { echo 'Não é possível consumir o webservice'; }
Agora vamos criar um arquivo chamado cliente.php em qualquer outra pasta do seu servidor web
~# vim cliente.php
E colocar o seguinte conteúdo:
PHP não gravar cache do wsdl ini_set("soap.wsdl_cache_enabled", "0"); // Calcula a chave de segurança - Hash SHA1 do dia no formato dd/mm/YYYY $accessKey = sha1("Minha".date('d/m/Y')."Classe"); // Opções do Cliente SOAP $options = array( 'location' => 'http://127.0.0.1/webservice/', 'uri' => 'http://127.0.0.1/webservice/', 'soap_version' => SOAP_1_2, 'encoding' =>'UTF-8', 'trace' => true, ); // Faz a instância o Cliente SOAP $client = new SoapClient(null, $options); // Consome o webservice echo $client->testaNumero(1); // saída: Número positivo echo $client->testaNumero(0); // saída: Número neutro echo $client->testaNumero(-1); // saída: Número negativo
Fácil, não?
É possível fazer muito mais, mas estou abordando o básico, para que você possa dar o pontapé inicial e usar esse poderoso framework.
Você pode aprender mais sobre Zend Framework em http://framework.zend.com/learn/.
Um abraço e até a próxima.
Como que você deu um post da variável: $accessKey no client para o server?