Introdução ao XML-RPC com Python

O XML-RPC, ou Chamada de Procedimento Remoto via XML, é um protocolo que permite a comunicação entre sistemas distribuídos utilizando HTTP como transporte e XML para codificação de mensagens. Essa abordagem simplifica a interoperabilidade entre diferentes plataformas, pois define uma estrutura padronizada para invocar métodos remotamente, facilitando a troca de dados complexos.

Vantagens do XML-RPC

  • Suporte à transmissão de estruturas de dados elaboradas, como listas e dicionários.
  • Capacidade de encapsular chamadas remotas em objetos locais através de bibliotecas específicas de linguagens de programação.

Implementação em Python

No ecossistema Python, o módulo SimpleXMLRPCServer é empregado para configurar servidores XML-RPC, enquanto xmlrpclib (ou xmlrpc.client em versões mais recentes) serve como cliente para consumir serviços expostos. É importante notar que o cliente não é intrinsecamente seguro contra dados maliciosos, cabendo ao desenvolvedor implementar validações adicionais.

O fluxo típico envolve registrar funções ou instâncias no servidor e, no cliente, utilizar um proxy para chamar esses métodos remotamente.

Exemplo Prático

Servidor: Este código configura um servidor simples que retorna uma saudação.

import SimpleXMLRPCServer

class GerenciadorServico:
    def obter_saudacao(self):
        return "Olá, mundo via XML-RPC"

servico = GerenciadorServico()
servidor = SimpleXMLRPCServer.SimpleXMLRPCServer(("127.0.0.1", 9090))
servidor.register_instance(servico)

print("Servidor ativo na porta 9090")
servidor.serve_forever()

Cliente: Este trecho conecta-se ao servidor e invoca o método registrado.

import xmlrpclib

proxy = xmlrpclib.ServerProxy("http://127.0.0.1:9090")
resposta = proxy.obter_saudacao()

print("Resposta recebida:", resposta)

Para executar, inicie o servidor em um terminal e, em seguida, o cliente em outro. A saída esperada no cliente será a mensagem de saudação.

O servidor padrão é monolítico, o que significa que processa requisições sequencialmente. Para suportar múltiplas conexões simultaneamente, pode-se adaptá-lo utilizando ThreadingMixIn.

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SocketServer import ThreadingMixIn

class ServidorConcorrente(ThreadingMixIn, SimpleXMLRPCServer):
    pass

class GerenciadorServico:
    def obter_saudacao(self):
        return "Olá, mundo via XML-RPC"

servico = GerenciadorServico()
servidor_concorrente = ServidorConcorrente(("127.0.0.1", 9090), allow_none=True)
servidor_concorrente.register_instance(servico)

print("Servidor concorrente ativo na porta 9090")
servidor_concorrente.serve_forever()

Tags: Python XML-RPC Remote Procedure Call SimpleXMLRPCServer xmlrpclib

Publicado em 6-30 23:18