Web Services com SOAP - PHP e Python

11 September 2008 - 22:52            

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

Categorias: Exemplos, PHP, Programação, Python |

Você pode reproduzi-lo! Indique apenas o Link!

Email    

Leia Artigos Relacionados



Você pode acompanhar os comentários deste artigo através do feed RSS 2.0 Você pode deixar um comentário ou, ou interligar ("trackback") com seu site.

AddThis Social Bookmark Button

Uma resposta a “Web Services com SOAP - PHP e Python”

  1. Luiz escreveu:

    Tá na hora de atualizar isso meu filho
    Abraços

Deixe um comentário