🧼 Ejemplos Servicio SOAP

Guía completa con ejemplos prácticos de uso del Web Service SOAP

📋 ¿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

GET http://127.0.0.1:8000/soap/?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.

Herramientas para probar SOAP:
• SoapUI - Cliente SOAP dedicado
• Postman - Soporte para SOAP desde v7.0
• Python con zeep o suds-jurko
• cURL - Línea de comandos
🧪 Ver WSDL Completo

📚 Operaciones Disponibles

1. obtener_libro - Consultar libro por ID

POST http://127.0.0.1:8000/soap/

¿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

POST http://127.0.0.1:8000/soap/

¿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

POST http://127.0.0.1:8000/soap/

¿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>
Efectos automáticos:
✅ 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

SoapUI: Cliente dedicado para testing SOAP
→ 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