SOAP (Simple Object Access Protocol)
Definición
SOAP es un protocolo de mensajería basado en XML que permite la comunicación estructurada entre aplicaciones distribuidas en red. Fue desarrollado inicialmente por Microsoft y adoptado por la W3C como estándar. Se usa sobre todo en servicios web que requieren seguridad y confiabilidad.
Características principales
- Basado en XML para estructurar mensajes.
- Usa principalmente HTTP/HTTPS como transporte (también SMTP, JMS, etc.).
- Extensible mediante cabeceras personalizadas.
- Estándar formal que asegura interoperabilidad.
- Compatible con especificaciones WS-* (WS-Security, WS-ReliableMessaging, etc.).
Estructura de un mensaje SOAP
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<m:GetUserRequest xmlns:m="http://example.com/users">
<m:UserId>123</m:UserId>
</m:GetUserRequest>
</soap:Body>
<soap:Fault>
</soap:Fault>
</soap:Envelope>
Ejemplo de uso
Petición (request)
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUserRequest xmlns="http://example.com/usuarios">
<UserId>1</UserId>
</GetUserRequest>
</soap:Body>
</soap:Envelope>
Respuesta (response)
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUserResponse xmlns="http://example.com/usuarios">
<User>
<Id>1</Id>
<Nombre>Emilio</Nombre>
<Email>emilio@example.com</Email>
</User>
</GetUserResponse>
</soap:Body>
</soap:Envelope>
Ventajas de SOAP
- Altamente estandarizado e interoperable.
- Seguridad integrada mediante WS-Security.
- Manejo robusto de errores con Fault.
- Soporte para múltiples protocolos de transporte.
- Ideal para entornos empresariales críticos.
Desventajas de SOAP
- Más complejo y pesado que REST.
- Uso de XML hace que sea más verboso.
- Curva de aprendizaje mayor.
- Menos flexible y requiere contratos WSDL estrictos.
SOAP vs REST
| Aspecto | SOAP | REST |
|---|---|---|
| Naturaleza | Protocolo | Estilo arquitectónico |
| Formato | XML | JSON, XML, YAML, etc. |
| Transportes | HTTP, SMTP, JMS, etc. | Solo HTTP |
| Complejidad | Alta, con contratos WSDL | Baja, simple |
| Seguridad | WS-Security integrado | Depende de HTTPS, JWT, OAuth |
| Uso típico | Banca, seguros, sistemas críticos | APIs públicas, web y móviles |