Definicion
Antes de que REST dominara el panorama de APIs, SOAP (Simple Object Access Protocol) era la forma estándar de comunicación entre sistemas empresariales. Es un protocolo construido sobre XML que define exactamente cómo estructurar mensajes, manejar errores e implementar seguridad. A pesar de la palabra “Simple” en su nombre, SOAP es en realidad bastante complejo - pero esa complejidad habilita características que protocolos más simples carecen.
SOAP adopta una filosofía diferente a REST. Mientras REST es flexible y deja a los desarrolladores tomar muchas decisiones, SOAP es prescriptivo - te dice exactamente cómo debe funcionar todo. Cada mensaje SOAP tiene una estructura de sobre con un header (para metadatos como autenticación) y un body (para los datos reales). El manejo de errores sigue un formato específico. La seguridad puede construirse dentro del mensaje mismo, no solo en el transporte. Esta rigidez es tanto la fortaleza como la debilidad de SOAP.
Para sistemas empresariales que necesitan contratos formales, soporte de transacciones y seguridad avanzada, SOAP sigue siendo relevante. Bancos, sistemas de salud y agencias gubernamentales frecuentemente requieren las características que SOAP proporciona: encriptación a nivel de mensaje (no solo a nivel de transporte), firmas digitales en elementos individuales, garantías de entrega confiable y contratos de servicio formales. Cuando absolutamente necesitas estas garantías, SOAP las entrega - pero pagas en complejidad y verbosidad.
Ejemplo
Sistemas de reserva de aerolíneas: Los Global Distribution Systems (GDS) que impulsan las reservas de aerolíneas usan SOAP. Cuando buscas vuelos en Expedia, hay buenas probabilidades de que mensajes SOAP estén volando entre sistemas para verificar disponibilidad y precios.
Pasarelas de pago: Muchos sistemas de pago empresariales usan SOAP para procesamiento de tarjetas. Los contratos estrictos y características de seguridad ayudan a proteger datos financieros y asegurar cumplimiento con requisitos PCI-DSS.
Interoperabilidad en salud: HL7 y otros estándares de salud frecuentemente usan SOAP para intercambiar registros de pacientes. La capacidad de firmar elementos individuales del mensaje ayuda a cumplir requisitos HIPAA.
Buses de servicio empresarial: Grandes organizaciones usan servicios SOAP como la columna vertebral de su arquitectura de integración. Sistemas SAP, Oracle y Microsoft comúnmente exponen interfaces SOAP.
Analogia
La Carta Legal Certificada: SOAP es como enviar una carta certificada a través de un bufete de abogados. Hay un sobre formal con secciones específicas para direcciones y contenidos. Obtienes prueba de entrega, verificación de firma y sellos a prueba de manipulaciones. Es más trabajo que un email casual, pero cuando hay mucho en juego, quieres esas garantías.
La Valija Diplomática: Los diplomáticos internacionales envían documentos sensibles en valijas diplomáticas con protocolos específicos: selladas, cadena de custodia documentada, empaquetado a prueba de manipulaciones. Las características WS-Security de SOAP proporcionan protecciones similares para mensajes digitales.
El Historial Médico: El historial de un paciente sigue un formato específico que cada doctor entiende. Hay secciones designadas para historia, signos vitales, medicamentos y notas. Los mensajes SOAP tienen una estructura similarmente rígida que asegura que todos los interpreten de la misma manera.
El Contrato Legal: Un contrato legal tiene secciones requeridas específicas: partes involucradas, términos, firmas, fechas. No puedes simplemente escribir un contrato como quieras - debe seguir ciertas convenciones para ser legalmente vinculante. SOAP impone convenciones similares para mensajes de API.
Code Example
<!-- Petición SOAP -->
POST /api/soap [HTTP/1.1](https://reference.apios.info/es/terms/http-1-1/)
Content-Type: text/xml
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<auth:Token>abc123</auth:Token>
</soap:Header>
<soap:Body>
<m:GetUserRequest xmlns:m="http://example.com/users">
<m:UserId>123</m:UserId>
</m:GetUserRequest>
</soap:Body>
</soap:Envelope>
<!-- Respuesta SOAP -->
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<m:GetUserResponse xmlns:m="http://example.com/users">
<m:User>
<m:Id>123</m:Id>
<m:Name>Alicia</m:Name>
</m:User>
</m:GetUserResponse>
</soap:Body>
</soap:Envelope>
Notas de Seguridad
- SOAP soporta WS-Security para seguridad a nivel de mensaje incluyendo encriptación, firmas digitales y timestamps.
- Siempre valida XML contra el esquema WSDL, usa HTTPS, implementa expiración de mensajes para prevenir ataques de repetición, y sanea todas las entradas XML para prevenir ataques XXE (XML External Entity)..