maio
9
2005

PHP5 e Webservices

Posted In: codes, docs, home by elm

Hoje consegui um pouco de tempo para dar uma pesquisada e aprender mais um pouco sobre webservices. Resolvi ver como funciona o suporte nativo a SOAP embutido no PHP5. Para isso, pensei em reescrever o código deste exemplo de cliente PHP que tinha escrito um tempo atrás.
O primeiro passo, lógico, foi instalar o PHP5 no meu Ubuntu. Nenhum mistério até aqui, é o mesmo procedimento que venho fazendo desde o PHP3, apenas com a adição da opção –enable-soap no na execução do configure.
Depois de uma pesquisada no http://www.php.net/manual/ consegui fazer algums ensaios. Existe a opção de instanciar a classe SoapClient passando os parâmetros, desta forma:

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/",
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL));

indicando o servidor e a uri onde o serviço está instalado, mas depois de várias tentativas não obtive sucesso. A construção que parece ser a oficial e mais correta é :

$client = new SoapClient("some.wsdl");

Então precisava criar o arquivo wsdl contendo a descrição e os detalhes do serviço. Como gerar algo deste gênero não é uma coisa trivial e muito menos produtiva pesquisei algo que me ajude neste sentido. Nestas pesquisas acabei encontrando este artigo que explica a utilização do Axis.
Usando as palavras do autor:
[...]Axis é um conjunto de ferramentas para desenvolver WebServices. Dentre suas principais funcionalidades estão:
* implementação do protocolo SOAP;
* implementação de classes para agilizar a comunicação e a publicação de Web Services;
* utiliza containers JSP para disponibilizar os Web Services na rede[...]
Ele substitui a utilização do pacote soap que usei no texto anterior. Além de gerar o wsdl e armazenar o serviço, o deploy é muito simples.Basta renomear o arquivo CalcService.java para CalcService.jws e copiá-lo para a pasta webapps/axis/ do Tomcat, colocando o arquivo .class no diretório webapps/axis/WEB-INF/jwsClasses do Tomcat.
Assim ficou fácil a criação do cliente em PHP5:

//criação do cliente. o arquivo wsdl é gerado automaticamente pelo Axis
$client = new SoapClient("http://localhost:8080/axis/CalcService.jws?wsdl");
echo $client->add(1,2)."";
echo $client->subtract(20,2)

Realmente o cliente SOAP do PHP5 ficou excelente, facilitando muito a integração da linguagem com os webservices.
Já havia ouvido falar do Axis mas nunca tinha tido a oportunidade de testá-lo. É uma ferramenta muito interessante e prática. A maneira como o wsdl é gerado facilita muito o desenvolvimento.

3 Comments

Olá Elton, coloquei no server o soap mas aparece um erro, Fatal error: Cannot redeclare class soapclient in /var/www/hubfinder/nusoap.php on line 7240, o que fazer?

Parabéns, o texto não é recente, mas mesmo assim é uma luz para quem está iniciando.

Gostaria de ver outros tutoriais sobre a evolução desta tecnologia se possível. :-)

Legal que gostou. Vou tentar escrever mais algo sobre o assunto pq é uma área interessante
t

Something to say?

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.