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

CaracteristicaSOAPREST
FormatoSolo XMLJSON, XML, otros
ContratoRequerido (WSDL)Opcional (OpenAPI)
SeguridadWS-Security (integrado)HTTPS + custom
Manejo de erroresSOAP FaultsStatus codes HTTP
Curva de aprendizajeAltaBaja

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

  1. Importar WSDL: File > New SOAP Project
  2. SoapUI auto-genera requests de ejemplo
  3. Modificar valores XML y enviar
  4. Agregar aserciones para validacion
  5. 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

CategoriaTests
FuncionalRequests validos para cada operacion
ValidacionElementos faltantes, tipos incorrectos, XML invalido
SeguridadWS-Security, tokens expirados, inyeccion SQL/XML
FaultsCodigos de fault, strings y detalles
Conformidad WSDLResponse coincide con schema del WSDL
PerformanceTiempo de respuesta bajo carga

Tests de Validacion XML

TestEsperado
XML bien formadoTags sin cerrar deben fallar
Validacion de schemaElementos deben coincidir con tipos WSDL
Errores de namespaceNamespace incorrecto retorna fault
Elementos requeridos vaciosRetorna fault de validacion
Inyeccion XMLTags <script> deben ser escapados/rechazados
Ataque XXEReferencias a entidades externas bloqueadas

Ejercicio Practico

  1. Explora un servicio SOAP publico: Importa el WSDL en SoapUI o usa cURL.
  2. Testea con cURL: Envia un request SOAP y parsea la respuesta XML.
  3. Testing de errores: Envia XML malformado y elementos faltantes.
  4. 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