Cierto día, trabajando en una app, me encontré con una situación en la que era de vital importancia comunicarme con múltiples clientes, para lo cual usé el módulo import xmlrpc.server. Este permite crear un servidor ligero dentro de Python sin tener que diseñar una API REST ni manejar JSON de forma manual. Por su simplicidad y otras razones, he decidido contarte hoy qué es import xmlrpc.server y cuáles son los usos que puedes darle a este módulo.
¿Qué es import xmlrpc.server?
El módulo de xmlrpc.server en Python hace posible la creación de servidores XML-RPC que procesan llamadas remotas de clientes. El XML.RPC es un protocolo que fue basado en XML y HTTP y nos facilita la comunicación entre sistemas distribuidos. Gracias a este módulo es que puedes exponer funciones en un servidor y permitir que otros programas las invoquen como si fueran locales. Esta es una funcionalidad que nos puede servir si necesitamos una alternativa más simple que REST o gRPC para intercambiar datos entre procesos o incluso máquinas remotas.
¿Cómo funciona import xmlrpc.server?
Plantea la posibilidad de import xmlrpc.server como un teléfono de atención al cliente en donde un cliente realiza una llamada (es decir la solicitud XML-RPC) y el servidor responde con la información solicitada. Todo esto ocurre mediante HTTP y en un formato estructorado en XML. Veamos cómo funciona import xmlrpc.server y qué usos podemos darle con base en unos ejemplos:
- Crear un servidor XML-RPC básico: Para crear un servidor XML-RPC en Python, se usa la clase SimpleXMLRPCServer. Veamos un ejemplo:
from xmlrpc.server import SimpleXMLRPCServer
# Crear servidor en el puerto 8000
servidor = SimpleXMLRPCServer(("localhost", 8000))
print("Servidor XML-RPC en ejecución...")
# Función remota
def sumar(a, b):
return a + b
# Registrar función
servidor.register_function(sumar, "sumar")
# Iniciar el servidor
servidor.serve_forever()
Este servidor expone la función sumar para que cualquier cliente pueda invocarla.
- Conectar un cliente al servidor XML-RPC: Para probar el servidor, podemos usar un cliente XML-RPC dentro del módulo de import xmlrpc.server, así:
import xmlrpc.client
# Conectar al servidor
cliente = xmlrpc.client.ServerProxy("http://localhost:8000/")
# Llamar a la función remota
resultado = cliente.sumar(10, 5)
print(f"Resultado de la suma: {resultado}")
Al ejecutar este código, el cliente enviará la solicitud al servidor y recibirá la respuesta con el resultado de la suma.
Algunos métodos avanzados de import xmlrpc.server
Además de registrar funciones individuales, xmlrpc.server permite hacer otras cosas como:
- Registrar una instancia con múltiples métodos:
class Calculadora:
def multiplicar(self, x, y):
return x * y
def dividir(self, x, y):
return x / y if y != 0 else "Error: División por cero"
servidor.register_instance(Calculadora())
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaEsto expone todos los métodos de la clase Calculadora al servidor XML-RPC.
- Habilitar introspección para listar métodos disponibles:
servidor.register_introspection_functions()
Así permitimos que un cliente consulte qué métodos están disponibles, llamando a:
print(cliente.system.listMethods())
- Manejar múltiples llamadas en una sola solicitud:
servidor.register_multicall_functions()
Esto permite a los clientes agrupar varias llamadas en una sola petición.
Diferencias entre xmlrpc.server y xmlrpc.client
Existen varios métodos similares a import xmlrpc.server, veamos algunas de sus diferencias y cómo se compara con import xmlrpc.client:
Característica | xmlrpc.client | gRPC | Pyro4 | JSON-RPC | Thrift | REST API |
---|---|---|---|---|---|---|
Protocolo | XML sobre HTTP | HTTP/2, Protobuf | TCP/IP | JSON sobre HTTP | Binario o JSON | HTTP/HTTPS |
Formato de datos | XML | Protobuf | Python Objects | JSON | Binario o JSON | JSON o XML |
Facilidad de uso | Alta | Media | Media | Alta | Baja | Alta |
Velocidad | Baja | Alta | Media | Media | Alta | Media |
Soporte en Python | Estándar | Requiere instalación | Requiere instalación | Requiere instalación | Requiere instalación | Soporte nativo |
Seguridad | Baja | Alta | Media | Media | Alta | Alta |
Soporte multiplataforma | Sí | Sí | No (solo Python) | Sí | Sí | Sí |
Casos de uso | Sistemas heredados, WordPress | Aplicaciones de alto rendimiento | Sistemas distribuidos en Python | APIs ligeras | Interoperabilidad con múltiples lenguajes | APIs modernas, desarrollo web |
Característica | xmlrpc.server | xmlrpc.client |
---|---|---|
Función principal | Implementar servidores XML-RPC | Conectarse a servidores XML-RPC |
Uso principal | Procesar solicitudes remotas | Realizar llamadas a servidores remotos |
Registro de funciones | Requiere registrar manualmente | No necesita registro de funciones |
Ejemplo de implementación | Creación de APIs simples | Consumo de servicios XML-RPC |
¿Es seguro este módulo?
El módulo de import xmlrpc.server no es seguro contra datos maliciosos. Para evitar problemas, considera:
- Filtrar y validar entradas antes de procesarlas.
- Restringir el acceso a clientes específicos usando firewalls o autenticación.
- Evitar allow_dotted_names, ya que permite acceder a variables globales del módulo.
Si te interesa crear servidores más eficientes y preparados para crecer, en KeepCoding tenemos el Bootcamp de programación inicial para ti. Aquí aprenderás todo sobre backend, desde servidores ligeros hasta arquitecturas escalables, con un enfoque práctico y dinámico. La industria tecnológica está llena de oportunidades y, con la formación adecuada, puedes acceder a empleos bien pagados y estables. ¿Listo para empezar? KeepCoding te acompaña en el camino.