📡1. ¿Qué es SOAP y por qué existe aún?
Entendiendo SOAP de forma simple
SOAP (Simple Object Access Protocol) es un protocolo antiguo pero robusto para intercambiar información estructurada entre sistemas. Piensa en él como un mensajero muy formal y estricto.
📋 Características de SOAP
- Usa XML (muy estructurado y verboso)
- Tiene un "sobre" (Envelope) que envuelve todo
- Requiere un contrato WSDL (descripción del servicio)
- Es muy estricto con las reglas
- Tiene seguridad integrada (WS-Security)
🚀 Por comparación: REST
- Usa JSON (más ligero y simple)
- No necesita "sobre", es directo
- La documentación es opcional (OpenAPI)
- Es flexible y adaptable
- Seguridad vía HTTPS + tokens
Analogía del Mensajero
📮 SOAP: Carta Formal
Imagina que envías una carta formal al banco:
- Usas un sobre oficial (Envelope)
- Incluyes tu identificación (Header)
- Escribes el mensaje formal (Body)
- Lo envías por correo certificado
El banco DEBE responder en el mismo formato estricto.
💬 REST: Mensaje de WhatsApp
Imagina que envías un mensaje a un amigo:
- Escribes directo lo que necesitas
- Usas emojis si quieres 😊
- Puede ser corto o largo
- La respuesta es rápida
Tu amigo puede responder como quiera.
Ejemplo Real de SOAP
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<!-- Información de autenticación -->
<authentication>
<username>biblioteca_admin</username>
<token>abc123xyz789</token>
</authentication>
</soap:Header>
<soap:Body>
<!-- Petición: obtener libro por ID -->
<getLibro>
<libroId>5</libroId>
</getLibro>
</soap:Body>
</soap:Envelope>
<?xml version="1.0"?>
<soap:Envelope>
<soap:Body>
<getLibroResponse>
<libro>
<id>5</id>
<titulo>El Quijote</titulo>
<autor>Miguel de Cervantes</autor>
<isbn>978-8424117524</isbn>
<disponible>true</disponible>
</libro>
</getLibroResponse>
</soap:Body>
</soap:Envelope>
💡 Interpretación del mensaje SOAP:
"Estimado Sistema Receptor: Le adjunto en este sobre formal mi petición. Me identifico con el usuario 'biblioteca_admin' y token 'abc123xyz789'. Solicito cortésmente la información del objeto Libro, que contiene el título 'El Quijote' y el identificador numérico '5'. Atentamente, Sistema Emisor".
¿Por qué existe aún? (Casos de Uso)
Si estás haciendo tu biblioteca desde cero hoy, probablemente NO usarás SOAP para tu propia API. Pero podrías tener que usarlo si tu biblioteca necesita conectarse con terceros:
Sistemas Bancarios/Pagos
Muchos bancos antiguos usan SOAP por sus estándares de seguridad (WS-Security) y transacciones atómicas (ACID).
Gobierno y Hacienda
Si tu biblioteca tiene que reportar impuestos o facturas a un sistema gubernamental, es muy probable que ese sistema estatal (hecho hace 15 años) solo acepte SOAP.
Sistemas Legacy (Heredados)
Si tu biblioteca universitaria debe conectarse a una base de datos central creada en el 2005 ("Mainframe"), esa conexión será vía SOAP.
Sector Salud
Hospitales y sistemas de salud usan SOAP para intercambiar historiales médicos (estándar HL7) de manera segura y auditada.
📚2. Ejemplo en tu Sistema de Biblioteca
Imagina este escenario real:
1Tu App Móvil (REST)
El alumno usa la App para reservar un libro. La App habla con tu Django usando REST (JSON). Es rápido y ligero.
POST /api/reservas/ HTTP/1.1
Content-Type: application/json
{
"libro_id": 5,
"usuario_id": 123,
"fecha_reserva": "2026-02-02"
}
2El Cobro de Multas (SOAP)
El alumno debe una multa. Tu sistema Django necesita reportar esa deuda al sistema financiero central de la Universidad para bloquear su matrícula.
- El sistema financiero es viejo y estricto.
- Tu Django tendrá que armar un paquete SOAP (XML) y enviarlo al servidor de la universidad.
- El servidor de la universidad responde con otro XML confirmando la recepción.
<soap:Envelope>
<soap:Body>
<reportarMulta>
<alumnoId>123</alumnoId>
<monto>50.00</monto>
<concepto>Retraso devolución libro</concepto>
<fecha>2026-02-02</fecha>
</reportarMulta>
</soap:Body>
</soap:Envelope>
Flujo Completo del Sistema
(Usuario Final)
Usa REST/JSON
(Tu Sistema)
Maneja ambos
(Legacy System)
Solo acepta SOAP/XML
⚔️3. REST vs SOAP: Comparación Detallada
Tabla Comparativa Completa
| Característica | REST (Lo que usas ahora) | SOAP (Lo "corporativo") |
|---|---|---|
| Formato | JSON (generalmente), también XML, HTML, texto | XML (siempre, no hay opciones) |
| Filosofía | Flexible, fácil de leer, adaptable | Estricto, basado en reglas rígidas |
| Peso | Ligero (gasta pocos datos, ideal móviles) | Pesado (mucho texto extra, verbose) |
| Definición | Documentación (OpenAPI/Swagger) opcional | Contrato estricto (WSDL) obligatorio |
| Uso común | Apps móviles, Web modernas, APIs públicas | Bancos, Gobierno, Enterprise, B2B |
| Velocidad | ⭐⭐⭐⭐⭐ Rápido | ⭐⭐⭐ Más lento |
| Curva de aprendizaje | ⭐⭐⭐⭐⭐ Fácil | ⭐⭐ Complejo |
| Seguridad | HTTPS + tokens (OAuth2, JWT) | WS-Security integrado |
| Estado | Stateless (sin estado entre peticiones) | Puede mantener estado (stateful) |
| Transacciones | Hay que implementarlas manualmente | ACID nativo (todo o nada) |
| Caché | ✅ Excelente soporte HTTP | ❌ No soporta caché |
| Verbos HTTP | GET, POST, PUT, DELETE, PATCH | Solo POST (todo por XML) |
| Popularidad 2026 | 📈 85% del mercado | 📉 15% (sistemas legacy) |
| Ejemplo típico | Instagram, Twitter, GitHub API | SWIFT (transferencias bancarias) |
Comparación Visual: Mismo Request
🚀 REST Request
GET /api/libro/5 HTTP/1.1 Host: biblioteca.com Authorization: Bearer abc123 Accept: application/json
Tamaño: ~80 bytes
Tiempo: ~50ms
Legibilidad: ⭐⭐⭐⭐⭐
📋 SOAP Request
<soap:Envelope...>
<soap:Header>
<auth>abc123</auth>
</soap:Header>
<soap:Body>
<getLibro>
<id>5</id>
</getLibro>
</soap:Body>
</soap:Envelope>
Tamaño: ~300 bytes
Tiempo: ~150ms
Legibilidad: ⭐⭐⭐
🔒4. Seguridad: ¿SOAP es más "autenticado"?
Respuesta directa:
Tu intuición no está mal encaminada, pero la palabra correcta no es "más autentificado", sino más estandarizado en seguridad.
🛡️ SOAP (WS-Security)
Tiene estándares de seguridad integrados en su propia estructura (llamado WS-Security).
Capacidades de seguridad:
- ✅ Cifrar el mensaje completo o solo partes de él
- ✅ Firmas digitales estrictas para garantizar identidad
- ✅ Es muy difícil de alterar sin romper el protocolo
- ✅ Autenticación a nivel de mensaje (no solo transporte)
- ✅ Certificados X.509 integrados
- ✅ Timestamps y expiración de mensajes
🏦 Por eso los bancos y gobiernos lo aman:
Es muy difícil de hackear porque la seguridad viene "de fábrica". No depende de que el programador la implemente correctamente.
🔐 REST (Seguridad por Transporte)
Depende de la seguridad del transporte (HTTPS/TLS). Para autenticación usa tokens.
Métodos de autenticación REST:
- JWT (JSON Web Tokens) - El más popular
- OAuth2 - Usado por Google, Facebook, GitHub
- API Keys - Simple pero menos seguro
- Basic Auth - Usuario y contraseña (solo con HTTPS)
- Bearer Tokens - Tokens de acceso
💡 Veredicto:
Es igual de seguro para el 99% de las aplicaciones modernas, pero la seguridad se implementa "por encima" (HTTPS), no viene "dentro" del mensaje como en SOAP.
Comparación de Seguridad
| Aspecto de Seguridad | SOAP | REST |
|---|---|---|
| Cifrado | WS-Security (cifrado de mensaje completo o parcial) | HTTPS/TLS (cifrado de transporte) |
| Autenticación | WS-Security, certificados X.509, SAML | JWT, OAuth2, API Keys, Basic Auth |
| Firma Digital | ✅ Integrada (XML Signature) | ⚠️ Opcional (hay que implementarla) |
| Integridad del Mensaje | ✅ Garantizada por diseño | ✅ Con HTTPS correctamente configurado |
| No Repudio | ✅ Soporte nativo | ⚠️ Hay que implementar |
| Auditoría | ✅ Cada mensaje es trazable | ⚠️ Depende de logs del servidor |
| Nivel de Seguridad | ⭐⭐⭐⭐⭐ Máximo (nivel empresarial) | ⭐⭐⭐⭐ Alto (suficiente para mayoría) |
| Complejidad de Implementación | ⭐⭐ Alta | ⭐⭐⭐⭐⭐ Baja |
En resumen: SOAP tiene seguridad de nivel empresarial "de fábrica". REST es seguro, pero depende de cómo tú configures el servidor y el HTTPS.
🎯5. ¿Cuál te "genera mejor"? (¿Cuál deberías usar?)
No hay uno mejor que el otro en absoluto, depende de qué estás construyendo
🌳 Árbol de Decisión Interactivo
Responde estas preguntas para saber qué usar:
❓ ¿Tu aplicación es para usuarios finales (app móvil o web)?
SÍ → Usa REST ✅
Las apps modernas necesitan velocidad, bajo consumo de datos, y facilidad de uso
❓ ¿Estás conectando con sistemas bancarios, financieros o gubernamentales?
SÍ → Usa SOAP ⚠️ (o lo que ellos requieran)
Estos sectores tienen estándares establecidos con SOAP desde hace décadas
❓ ¿Necesitas transacciones ACID garantizadas al 100%?
SÍ → SOAP es mejor 🔒
ACID = Atomicidad, Consistencia, Aislamiento, Durabilidad
❓ ¿Quieres que otros desarrolladores usen tu API fácilmente?
SÍ → Usa REST 🚀
REST es mucho más fácil de aprender, documentar y usar
❓ ¿Estás creando microservicios internos de tu empresa?
SÍ → Usa REST 💡
Los microservicios modernos funcionan mejor con REST por su ligereza
🚀 Usa REST si:
- ✅ Estás creando una app móvil o página web moderna (SPA)
- ✅ Necesitas velocidad y que la aplicación cargue rápido
- ✅ Quieres que otros desarrolladores se conecten fácilmente a tu API
- ✅ Estás trabajando con Microservicios
- ✅ Tu equipo está aprendiendo desarrollo web
- ✅ Necesitas escalabilidad horizontal (muchos usuarios simultáneos)
- ✅ Trabajas con tecnologías modernas (Node.js, Python, Ruby, Go)
- ✅ Quieres aprovechar el caché HTTP
- ✅ Necesitas soporte para múltiples formatos (JSON, XML, CSV)
🏛️ Mantén o usa SOAP si:
- ⚠️ Estás conectando con sistemas bancarios, financieros o gubernamentales antiguos
- ⚠️ Necesitas transacciones ACID garantizadas
- ⚠️ Ejemplo: Si falla el pago, se debe cancelar el envío y devolver dinero automáticamente
- ⚠️ Necesitas un contrato formal estricto (WSDL)
- ⚠️ Trabajas con sistemas legacy (antiguos) que solo soportan SOAP
- ⚠️ Necesitas seguridad de nivel empresarial integrada (WS-Security)
- ⚠️ Requieres mensajería asíncrona confiable con garantía de entrega
- ⚠️ El cliente/socio comercial exige SOAP por política
- ⚠️ Necesitas auditoría completa de cada transacción
🌍6. Casos de Uso Reales
Ejemplos del Mundo Real
SOAP en Acción
🏦 Caso 1: Transferencia Internacional (SWIFT)
Contexto: Transferir $10,000 USD de México a España
Por qué SOAP:
- Necesita garantía de transacción (ACID)
- Si falla, debe revertirse automáticamente
- Requiere auditoría completa y trazabilidad
- Firmas digitales obligatorias
- Estándar internacional establecido
Resultado: SOAP es la única opción viable
🏛️ Caso 2: Facturación Electrónica SAT (México)
Contexto: Enviar facturas al sistema del SAT
Por qué SOAP:
- Regulación gubernamental estricta
- Sistema legacy desde 2004
- WSDL definido por el gobierno
- Certificados digitales SAT obligatorios
- No hay alternativa, es SOAP o nada
Resultado: No tienes opción, debes usar SOAP
✈️ Caso 3: Reservas de Vuelos (Amadeus GDS)
Contexto: Conectar agencia de viajes con aerolíneas
Por qué SOAP:
- Protocolo de industria desde los 90s
- Cientos de aerolíneas ya integradas
- Transacciones críticas (no puede fallar)
- Cambiar sería extremadamente costoso
Resultado: Industria completa usa SOAP
REST en Acción
📱 Caso 1: App de Instagram
Contexto: Millones de usuarios subiendo fotos diariamente
Por qué REST:
- Necesita ser ultra rápido
- Bajo consumo de datos móviles
- JSON es ligero y fácil de parsear
- Múltiples plataformas (iOS, Android, Web)
- Caché HTTP para optimizar carga
Resultado: REST es perfecto para esto
🗺️ Caso 2: Google Maps API
Contexto: Desarrolladores de todo el mundo usan la API
Por qué REST:
- Fácil de integrar en cualquier lenguaje
- Documentación simple y clara
- Respuestas JSON fáciles de consumir
- Millones de requests por segundo
- Excelente experiencia de desarrollador
Resultado: API pública más usada del mundo
🛒 Caso 3: E-commerce (Amazon, Mercado Libre)
Contexto: Tienda online con millones de productos
Por qué REST:
- Catálogo gigante que se actualiza constantemente
- Necesita ser escalable horizontalmente
- Múltiples clientes (web, móvil, apps de terceros)
- Búsquedas y filtros complejos
- Caché agresivo para productos populares
Resultado: REST permite crecer sin límites
🐛7. Problema Común: DEBUG = False
Error típico en Django:
26 | DEBUG = False 27 | 28 | ALLOWED_HOSTS = [] # ← Este es el problema
¿Por qué falla?
El problema es que tienes DEBUG = False en la línea 26,
pero ALLOWED_HOSTS = [] en la línea 28.
¿Por qué es necesario?
Cuando DEBUG = False (modo producción), Django requiere que definas
ALLOWED_HOSTS por seguridad, para prevenir ataques de tipo
"HTTP Host Header". Esto evita que el servidor responda a solicitudes
maliciosas con hosts falsos.
✅ Solución: Dos opciones
Opción 1: Modo Desarrollo
DEBUG = True ALLOWED_HOSTS = []
Usa esto cuando:
- Estás desarrollando localmente
- Necesitas ver errores detallados
- Estás en tu computadora personal
Opción 2: Modo Producción
DEBUG = False
ALLOWED_HOSTS = [
'localhost',
'127.0.0.1',
'tudominio.com',
'*' # Solo para testing, NO en producción real
]
Usa esto cuando:
- Despliegas en servidor
- Usas Docker
- Ya está en producción
⚠️ Advertencia de Seguridad
NUNCA uses ALLOWED_HOSTS = ['*'] en producción real.
Especifica siempre los dominios exactos:
ALLOWED_HOSTS = [
'biblioteca.miempresa.com',
'www.biblioteca.miempresa.com',
]
🎓8. Conclusión y Recomendaciones
Conclusión para tu proyecto de Biblioteca
En tu sistema de biblioteca con Django y Docker:
- ✅ Quédate con REST para todo lo nuevo que construyas
- ⚠️ Entiende SOAP solo como una herramienta que usarás si te ves obligado a conectarte con un sistema externo viejo o muy burocrático
Recomendaciones Finales
Para Apps Modernas
Usa: REST + JSON
Es el estándar actual. 80% del mercado lo usa.
Para Sistemas Financieros
Usa: SOAP + XML
Obligatorio en banca y gobierno. No hay elección.
Para Integraciones B2B
Depende del socio
Pregunta qué prefieren. Adapta tu sistema.
Para Aprender
Aprende ambos
En este proyecto tienes REST y SOAP implementados.
¿Qué librería de Python usar para SOAP?
Si algún día necesitas conectar Django con un servicio SOAP, estas son las mejores opciones:
1. Zeep (Recomendado) 🏆
pip install zeep
from zeep import Client
# Conectar al servicio SOAP
client = Client('http://ejemplo.com/servicio?wsdl')
# Llamar a un método
resultado = client.service.obtenerLibro(libro_id=5)
print(resultado)
Ventajas: Moderno, rápido, bien documentado
2. Spyne (Para crear servicios SOAP)
pip install spyne # Ya lo usas en tu proyecto para crear el servicio SOAP # Archivo: libros/soap_services.py
Uso: Para crear APIs SOAP en Django
3. suds-py3 (Alternativa)
pip install suds-py3
from suds.client import Client
client = Client('http://ejemplo.com/servicio?wsdl')
Nota: Más antiguo, pero aún funciona
"Si estás generando aplicaciones SOAP hoy en día para un proyecto nuevo y sencillo, probablemente te estás complicando la vida innecesariamente; REST (con Django REST Framework) es mucho más rápido de desarrollar y mantener."
— Principio de pragmatismo en desarrollo
📊 Estadísticas del Mercado 2026
| Métrica | REST | SOAP |
|---|---|---|
| Nuevos proyectos | 85% | 15% |
| APIs públicas | 95% | 5% |
| Sector financiero | 30% | 70% |
| Startups | 99% | 1% |
| Empresas Fortune 500 | 60% | 40% |
📝Resumen Ejecutivo
🚀 REST
Lo que debes saber:
- Usa JSON (ligero)
- Basado en HTTP
- Fácil de aprender
- Perfecto para apps modernas
- 80%+ del mercado actual
→ Tu elección por defecto
📋 SOAP
Lo que debes saber:
- Usa XML (pesado)
- Protocolo estricto
- Complejo pero seguro
- Para bancos y gobierno
- 15-20% del mercado
→ Solo si te lo exigen
🎓 Es importante Saber Para esta Unidad 3
Debes saber explicar:
- ✅ Diferencias entre SOAP y REST
- ✅ Cuándo usar cada uno
- ✅ Ventajas y desventajas
- ✅ Aspectos de seguridad
- ✅ Ejemplos de uso real