O objetivo deste post não é explicar o que é SOAP nem Web Services, mas sim mostrar uma maneira simples de criar um servidor que implementa um Web Service com SOAP em Python e criar um cliente em PHP que faz acesso a esse serviço.
Python é uma linguagem de programação interpretada que não possui variáveis com tipos bem definidos como em C# ou Java. Você pode por exemplo executar o seguinte código:
a = “100″ # string
a = int(a) # inteiro
Códigos assim são comuns em Python. E isso impede que a maioria das bibliotecas de SOAP gere arquivos WSDL (Web Service Description Language) porque não é possível prever tipos de parâmetros de entrada e saída de funções. Com o arquivo WSDL do servidor que implementa SOAP é muito simples de criar uma conexão e executar funções.
Se você é como eu, que tem prazer em programar em Python e desenvolve projetos simples em tempo curto, há duas opções para implementar um Web Service com SOAP em Python que permita acesso fácil através de outras linguagens de computação.
A primeira saída é escrever seu WSDL na mão. (não sou muito fã desta opção)
A segunda saída é especificar melhor as funções do seu web service como veremos no exemplo a seguir (baseado no exemplo do PythonBrasil).
Para utilizar a biblioteca SOAPpy, é necessário instalar os pacotes PyXML, Fpconst e SOAPpy. No Ubuntu:
$ sudo apt-get install python-xml python-fpconst python-soappy
Código do servidor em Python:
#!/usr/bin/python
from SOAPpy import SOAPServer
def calcula(op1,op2,operacao):
if operacao == ‘+’:
return op1 + op2
if operacao == ‘-’:
return op1 - op2
if operacao == ‘*’:
return op1 * op2
if operacao == ‘/’:
return op1 / op2
server = SOAPServer((‘localhost’,8081))
server.registerFunction(calcula,“ns-calcula”,“calcula”)
# se quiser ver logs de entrada e saida descomente as linhas abaixo
# server.config.dumpSOAPOut = 1
# server.config.dumpSOAPIn = 1
server.serve_forever()
Código do cliente em Python
#!/usr/bin/python
from SOAPpy import SOAPProxy
url = “http://localhost:8081″
namespace = “ns-calcula”
server = SOAPProxy(url,namespace)
server.config.dumpSOAPOut = 1
server.config.dumpSOAPIn = 1
print server.calcula(2,3.,“*”)
Código do cliente em PHP
<?php
$client = new SoapClient(NULL,
array(
“location” => “http://localhost:8081/”,
“uri” => “ns-calcula”,
“style” => SOAP_RPC,
“use” => SOAP_ENCODED
));
$op1 = 15;
$op2 = 3;
$operacao = “/”;
$a = new SoapParam($op1,“op1″);
$b = new SoapParam($op2,“op2″);
$c = new SoapParam($operacao,“operacao”);
//echo $client->calcula($a,$b,$c); // modo mais bonito de chamar a função do servidor
$retorno = $client->__soapCall(“calcula”, array($a,$b,$c));
echo $op1.$operacao.$op2.” = “.$retorno;
?>
Obs: no PHP5, SOAP é nativo
É isso ae. Espero que esses códigos ajudem!
Abraços

Assine o Feed