Skip to main content

Implementando Web Services usando PHP e SOAP

Web Services é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. Com esta tecnologia é possível que novas aplicações possam interagir com aquelas que já existem e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis. Os Web Services são componentes que permitem às aplicações enviar e receber dados em formato XML. Cada aplicação pode ter a sua própria "linguagem", que é traduzida para uma linguagem universal, o formato XML e padrões de nomenclatura SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language) e UDDI (Universal Description, Discovery e Integration). Para as empresas, os Web Services podem trazer agilidade para os processos e eficiência na comunicação entre cadeias de produção ou de logística.
Toda e qualquer comunicação entre sistemas passa a ser dinâmica e principalmente segura, pois não há intervenção humana.( Veja o conceito no Wikipédia)

O diagrama acima é o esquema mais simples que pode ajudar a visualizar Web Services, e mostra como aplicações remotas podem interagir umas com as outras usando Web Services, o protocolo usado para esta interação remota é SOAP.
SOAP é um protocolo leve para a troca de informações em um ambiente distribuído. É um protocolo baseado em XML. O aspecto mais importante do SOAP é a sua simplicidade e extensibilidade. Este protocolo consiste basicamente em três partes:

  • É um Framework que descreve o que contem em uma mensagem e como processar essa mensagem.
  • É um conjunto de regras e padrões de código.
  • Trata-se de uma convenção para representar chamadas a procedimentos remotos (requisições e respostas).

PHP e Web Services

PHP é uma das mais utilizadas linguagens de programação. É basicamente uma linguagem procedural , mas que também pode e é muito utilizada com orientação a objetos. Para quem não conhece é uma linguagem similar ao Perl, C, Java, etc. facilmente incorporado em HTML, o que torna o desenvolvimento Web utilizando PHP muito fácil.
Algumas das características do PHP que reforça a sua capacidade de desenvolver Web Services estão listados abaixo:

  • Compatibilidade com programação orientada a objetos.
  • Suporte a XML.
  • Possui a extenção CURL (Client URL Library) que permite a comunicação entre diversos protocolos tais como HTTP, HTTPS, FTP, Telnet, LDAP.
  • A característica mais importante para a implementação de Web Services é devido ser Open Souce.

PHP e Web Services usando NuSoap

Como já descrevi os conceitos fundamentais e protocolos sobre Web Services e também do PHP e suas funcionalidades agora vamos para o nosso exemplo prático.
NuSoap é um grupo de classes do PHP que nos possibilita troca de mensagens SOAP sobre HTTP. O download da biblioteca nusoap.php pode ser feito clicando aqui. Esta é uma biblioteca Open Source, licenciado sob GNU LGPL. Depois de baixar essa biblioteca você pode coloca-la onde melhor te atenda, só não se esqueça o caminho do arquivo (Path) pois terá que fazer um includ dessa biblioteca no seu código PHP. Minha sugestão é que seja feito o óbvio e mantenha esse arquivo no mesmo lugar que você tenha outras bibliotecas ou ao menos dentro da pasta do seu projeto.
No seu código PHP faça o includ da classe da seguinte forma:

include("menu.php");

Mais uma vez, esteja atento ao Path(ou caminho) do nusoap.php para não haver problemas no include. Caso esteja errado o código vai gerar um alerta mas vai continuar a processar o resto do código.
Sinta-se a vontade em utilizar quando necessário, outras funções como:

  • require()
  • require_once()
  • Include_once()

Para maiores detalhes destas funções básicas do PHP acessem o Manual do PHP

Criando um cliente SOAP com PHP
O código abaixo é um simples exemplo de cliente que envia a requisição para o servidor remoto para validar uma String, que é passada como parâmetro para o servidor.

<?php
require('nusoap.php');

$string = 'Olá Mundo!';

$stringArray = array($string);

$s = new SoapClient('http://localhost/seu_projeto/validateString.php');

$result = call('validateString',$stringArray);

if(!$error = $s->getError()){

echo 'String: '.$result;

}else{

echo 'Error: '.$error;

}
?>

Agora vamos percorrer o código começando pela inclusão da classe:

require('nusoap.php');

A seguir o código mostra como o cliente envia os dados para o servidor para validar se é uma String:

$string = 'Olá Mundo!';

Cria um vetor passando a variável como parâmetro

$stringArray = array($string);

Uma instância do cliente SOAP deve ser criada, o cliente e o servidor neste caso estão na mesma máquina, caso não esteja trabalhando Localhost o caminho do validateString.php deve ser fornecido ao cliente SOAP

$s = new SoapClient('http://localhost/seu_projeto/validateString.php');

O método call fala para o cliente SOAP qual serviço quer acessar, e passa o vetor de String para o servidor. A variável $result armazena a resposta do servidor.

$result = call('validateString',$stringArray);

O método getError() deve ser utilizado, pois se algum erro acontecer esse método retorna a descrição do erro através de uma String, se não retorna Falso, no nosso caso estamos mostrando o resultado em caso de sucesso, senão mostra o detalhe do erro:

if(!$error = $s->getError()){

echo 'String: '.$result;

}else{

echo 'Error: '.$error;

}

Agora vamos criar um simples exemplo de servidor SOAP com PHP

<?php
require('nusoap.php');

$s = new soap_server;

$s->register('validateString');

function validateString($stringValue) {

if(is_string($stringValue)) {

return $stringValue;

}else {

return new soap_fault('Client',''.'This is not a valid string.');
}
}

$s->service($HTTP_RAW_POST_DATA);

?>

Novamente vamos percorrer o código, mas dessa vês vamos iniciar a explicação da instância do servidor SOAP usando a classe soap_server

$s = new soap_server;

Precisamos registrar o objeto no servidor, esse registro é necessário para permitir que a função seja aceita em uma localização remota

$s->register('validateString');

Temos também uma função que testa se o parâmetro passado é uma String valida ou não. Se a String que foi passada for válida, então o retorno será a própria String, caso contrário ela irá retornar o erro usando a classe soap_fault

function validateString($stringValue) {

if(is_string($stringValue)) {

return $stringValue;

}else {

return new soap_fault('Client',''.'This is not a valid string.');
}
}

Finalmente o método de serviço que passa a receber dados a partir do cliente remoto para o servidor SOAP. Este método recebe o pedido e faz a chamada do método adequado

$s->service($HTTP_RAW_POST_DATA);

Bom pessoal de forma resumida é isso, este é um pequeno exemplo de como desenvolver aplicações Web Servives com PHP utilizando a biblioteca NuSoap.
O importante é perceber que aplicações robustas podem ser desenvolvidas com esta biblioteca e garantir que exista interoperabilidade com Web Services.