Que Es SOAP?
SOAP (Simple Object Access Protocol) es un protocolo de mensajeria para intercambiar datos estructurados. Usa XML para formateo de mensajes y tipicamente corre sobre HTTP, aunque puede usar otros protocolos como SMTP.
SOAP fue la tecnologia dominante antes de REST. Mientras las APIs nuevas usan REST o GraphQL, SOAP sigue siendo critico en ambientes enterprise.
Donde Se Sigue Usando SOAP
- Banca y finanzas — procesamiento de pagos, comunicacion interbancaria
- Salud — integraciones HL7/FHIR, reclamos de seguros
- Gobierno — declaracion de impuestos, reportes regulatorios
- Enterprise — SAP, Salesforce SOAP API, sistemas CRM/ERP legacy
- Telecomunicaciones — aprovisionamiento, sistemas de facturacion
SOAP vs. REST
| Caracteristica | SOAP | REST |
|---|---|---|
| Formato | Solo XML | JSON, XML, otros |
| Contrato | Requerido (WSDL) | Opcional (OpenAPI) |
| Seguridad | WS-Security (integrado) | HTTPS + custom |
| Manejo de errores | SOAP Faults | Status codes HTTP |
| Curva de aprendizaje | Alta | Baja |
Estructura del Mensaje SOAP
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:usr="http://example.com/users">
<soap:Header>
<usr:AuthToken>token123</usr:AuthToken>
</soap:Header>
<soap:Body>
<usr:GetUser>
<usr:userId>42</usr:userId>
</usr:GetUser>
</soap:Body>
</soap:Envelope>
SOAP Faults (Respuestas de Error)
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Usuario no encontrado</faultstring>
<detail>
<errorCode>USER_404</errorCode>
</detail>
</soap:Fault>
WSDL — El Contrato
WSDL define todo sobre el servicio SOAP: tipos, mensajes, operaciones, bindings y endpoints.
https://api.example.com/UserService?wsdl
Testing de Servicios SOAP
Usando SoapUI
- Importar WSDL: File > New SOAP Project
- SoapUI auto-genera requests de ejemplo
- Modificar valores XML y enviar
- Agregar aserciones para validacion
- Crear suites de test y tests data-driven
Usando cURL
curl -X POST \
-H "Content-Type: text/xml; charset=utf-8" \
-H "SOAPAction: http://example.com/GetUser" \
-d '<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUser xmlns="http://example.com/users">
<userId>42</userId>
</GetUser>
</soap:Body>
</soap:Envelope>' \
https://api.example.com/UserService
Escenarios de Test SOAP
| Categoria | Tests |
|---|---|
| Funcional | Requests validos para cada operacion |
| Validacion | Elementos faltantes, tipos incorrectos, XML invalido |
| Seguridad | WS-Security, tokens expirados, inyeccion SQL/XML |
| Faults | Codigos de fault, strings y detalles |
| Conformidad WSDL | Response coincide con schema del WSDL |
| Performance | Tiempo de respuesta bajo carga |
Tests de Validacion XML
| Test | Esperado |
|---|---|
| XML bien formado | Tags sin cerrar deben fallar |
| Validacion de schema | Elementos deben coincidir con tipos WSDL |
| Errores de namespace | Namespace incorrecto retorna fault |
| Elementos requeridos vacios | Retorna fault de validacion |
| Inyeccion XML | Tags <script> deben ser escapados/rechazados |
| Ataque XXE | Referencias a entidades externas bloqueadas |
Ejercicio Practico
- Explora un servicio SOAP publico: Importa el WSDL en SoapUI o usa cURL.
- Testea con cURL: Envia un request SOAP y parsea la respuesta XML.
- Testing de errores: Envia XML malformado y elementos faltantes.
- Compara SOAP y REST: Si una API ofrece ambas interfaces, compara tamano y complejidad.
Puntos Clave
- SOAP usa mensajes XML con estructura estricta Envelope/Header/Body y contratos WSDL
- Mientras REST domina APIs nuevas, SOAP sigue siendo critico en banca, salud y gobierno
- WSDL es el contrato completo de la API — define operaciones, mensajes, tipos y endpoints
- SoapUI es la herramienta estandar; cURL funciona para requests simples
- SOAP Faults son el mecanismo de error — testea codigos de fault y detalles
- Vulnerabilidades XML (XXE, inyeccion) deben testearse ademas de seguridad estandar