📋 ¿Qué es SOAP?
SOAP (Simple Object Access Protocol) es un protocolo de mensajería basado en XML para intercambio de información estructurada en servicios web.
¿Para qué sirve? Permite integración con sistemas legacy, aplicaciones empresariales, y clientes que requieren contratos formales (WSDL).
Ventajas: Tipado fuerte, validación automática, soporte en múltiples lenguajes, estándares empresariales.
📄 WSDL - Descripción del Servicio
Acceder al WSDL
¿Qué hace? Genera automáticamente el documento WSDL con la definición completa del servicio.
¿Qué contiene? Tipos de datos, mensajes, operaciones disponibles, y binding de transporte.
• SoapUI - Cliente SOAP dedicado
• Postman - Soporte para SOAP desde v7.0
• Python con zeep o suds-jurko
• cURL - Línea de comandos
📚 Operaciones Disponibles
1. obtener_libro - Consultar libro por ID
¿Qué hace? Obtiene información completa de un libro específico por su ID.
¿Qué genera? XML con título, ISBN, autor, editorial, stock disponible y estado.
Request SOAP:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://127.0.0.1:8000/soap/">
<soap:Body>
<tns:obtener_libro>
<tns:libro_id>1</tns:libro_id>
</tns:obtener_libro>
</soap:Body>
</soap:Envelope>
Response SOAP (exitoso):
<soap:Envelope>
<soap:Body>
<obtener_libroResponse>
<libro>
<id>1</id>
<titulo>Cien años de soledad</titulo>
<isbn>9780307474728</isbn>
<autor>Gabriel García Márquez</autor>
<editorial>Editorial Sudamericana</editorial>
<categoria>Ficción</categoria>
<stock_disponible>3</stock_disponible>
<estado>disponible</estado>
</libro>
</obtener_libroResponse>
</soap:Body>
</soap:Envelope>
2. listar_libros - Obtener todos los libros
¿Qué hace? Lista todos los libros de la biblioteca.
¿Qué genera? Array XML con la información básica de cada libro.
Request SOAP:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://127.0.0.1:8000/soap/">
<soap:Body>
<tns:listar_libros />
</soap:Body>
</soap:Envelope>
Response SOAP:
<soap:Envelope>
<soap:Body>
<listar_librosResponse>
<libros>
<libro>
<id>1</id>
<titulo>Cien años de soledad</titulo>
<autor>Gabriel García Márquez</autor>
</libro>
<libro>
<id>2</id>
<titulo>El amor en los tiempos del cólera</titulo>
<autor>Gabriel García Márquez</autor>
</libro>
</libros>
</listar_librosResponse>
</soap:Body>
</soap:Envelope>
3. crear_prestamo - Registrar nuevo préstamo
¿Qué hace? Crea un nuevo préstamo y actualiza el stock del libro automáticamente.
¿Qué genera? ID del préstamo creado y confirmación de éxito.
Request SOAP:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://127.0.0.1:8000/soap/">
<soap:Body>
<tns:crear_prestamo>
<tns:libro_id>3</tns:libro_id>
<tns:usuario_id>2</tns:usuario_id>
<tns:dias>14</tns:dias>
</tns:crear_prestamo>
</soap:Body>
</soap:Envelope>
Response SOAP:
<soap:Envelope>
<soap:Body>
<crear_prestamoResponse>
<prestamo_id>5</prestamo_id>
<mensaje>Préstamo creado exitosamente</mensaje>
<fecha_devolucion>2026-02-15</fecha_devolucion>
</crear_prestamoResponse>
</soap:Body>
</soap:Envelope>
✅ Reduce stock_disponible en 1
✅ Cambia estado a "prestado" si stock = 0
✅ Calcula fecha_devolucion_esperada
✅ Registra fecha_prestamo actual
🐍 Ejemplo con Python (zeep)
Cliente SOAP en Python
Usa la biblioteca zeep para consumir el servicio SOAP.
Instalación:
pip install zeep
Código Python:
from zeep import Client
# Conectar al servicio SOAP
wsdl = 'http://127.0.0.1:8000/soap/?wsdl'
client = Client(wsdl=wsdl)
# 1. Obtener un libro
libro = client.service.obtener_libro(libro_id=1)
print(f"Libro: {libro['titulo']}")
print(f"Stock: {libro['stock_disponible']}")
# 2. Listar todos los libros
libros = client.service.listar_libros()
for libro in libros:
print(f"{libro['id']}: {libro['titulo']}")
# 3. Crear un préstamo
resultado = client.service.crear_prestamo(
libro_id=3,
usuario_id=2,
dias=14
)
print(f"Préstamo creado: ID {resultado['prestamo_id']}")
💡 Casos de Uso SOAP
Caso 1: Sistema externo consulta disponibilidad
Escenario: Sistema de préstamos interbibliotecario consulta si un libro está disponible.
Flujo:
1. Sistema externo llama obtener_libro(libro_id=1) 2. Recibe XML con stock_disponible 3. Si stock_disponible > 0, procede con el préstamo 4. Llama crear_prestamo(libro_id=1, usuario_id=X, dias=14) 5. Recibe confirmación y ID del préstamo
Caso 2: Migración de datos desde sistema legacy
Escenario: Importar catálogo completo desde otro sistema.
Proceso:
1. Llamar listar_libros() para obtener catálogo actual 2. Comparar con sistema legacy 3. Identificar libros faltantes 4. Crear registros para sincronizar
🔧 Herramientas Recomendadas
→ Descarga: soapui.org
Postman: Soporte SOAP desde v7.0
→ Importa WSDL: http://127.0.0.1:8000/soap/?wsdl
Python zeep: pip install zeep
→ Documentación: docs.python-zeep.org