SOAP WSDL

Integración Empresarial Jan 6, 2025 XML

Definicion

Imagina intentar integrarte con una API sin ninguna documentación - sin lista de endpoints, sin descripciones de parámetros, sin formatos de respuesta. Tendrías que adivinar y experimentar constantemente. WSDL (Web Services Description Language) elimina este problema para servicios SOAP proporcionando un contrato legible por máquinas que describe todo sobre el servicio con detalle exacto.

WSDL es un documento XML que sirve tanto como documentación como plano para integración. Describe qué operaciones están disponibles, qué tipos de datos aceptan y devuelven, cómo deben formatearse los mensajes, y dónde enviar las peticiones. La belleza de WSDL es que las herramientas pueden leerlo automáticamente y generar todo el código necesario para hablar con el servicio. Apuntas tu entorno de desarrollo a un archivo WSDL, y crea clases, métodos y estructuras de datos por ti.

Este enfoque de contrato primero fue revolucionario para el software empresarial. Antes de que REST se volviera dominante, los web services basados en WSDL impulsaban la mayoría de integraciones negocio a negocio. Bancos, sistemas de salud y servicios gubernamentales dependían (y muchos todavía dependen) de WSDL para asegurar que diferentes sistemas pudieran comunicarse con precisión. El equivalente moderno es OpenAPI (anteriormente Swagger), que sirve el mismo propósito para APIs REST, pero WSDL sigue siendo común en entornos empresariales donde se requieren contratos formales y tipado estricto.

Ejemplo

Integraciones bancarias: Cuando el software de contabilidad de tu empresa necesita conectarse a un banco para procesamiento de pagos, el banco proporciona un archivo WSDL. Tus desarrolladores lo importan, y sus herramientas generan todo el código necesario para crear peticiones de pago, manejar respuestas y procesar errores.

Intercambio de datos de salud: Los sistemas hospitalarios intercambian registros de pacientes usando servicios SOAP definidos por WSDL. El tipado estricto asegura que los IDs de pacientes, códigos de diagnóstico y listas de medicamentos estén formateados exactamente bien - crítico cuando hay vidas en juego.

Servicios gubernamentales: Los sistemas de declaración de impuestos, portales de registro de empresas y servicios sociales frecuentemente exponen interfaces SOAP/WSDL. El contrato formal asegura que los datos financieros se transmitan con formato preciso.

Sistemas empresariales legacy: Muchos sistemas SAP, Oracle e IBM exponen su funcionalidad a través de WSDL. Décadas de lógica de negocio viven detrás de estas interfaces, y las empresas se integran con ellas diariamente.

Analogia

El Plano Arquitectónico: Un WSDL es como los planos arquitectónicos de un edificio. Muestra cada habitación, cada puerta, cada ventana - todo lo que un contratista necesita para construir algo que conecte con ese edificio. Las herramientas de desarrollo son como contratistas que pueden leer el plano y construir la conexión automáticamente.

El Menú del Restaurante con Recetas Exactas: Imagina un menú de restaurante que no solo listara los platos sino que incluyera la receta exacta, medidas de ingredientes y requisitos de presentación. Eso es WSDL - no solo qué está disponible, sino exactamente cómo funciona todo.

Las Instrucciones del Formulario de Impuestos: Los formularios de impuestos vienen con instrucciones detalladas especificando exactamente qué número va dónde, en qué formato deben estar las fechas, y cómo manejar casos especiales. WSDL proporciona este nivel de precisión para llamadas a APIs.

Las Instrucciones del Set de LEGO: Cuando compras un set de LEGO, las instrucciones muestran exactamente qué piezas conectan dónde. WSDL es el manual de instrucciones para conectarse a un servicio SOAP - síguelo precisamente, y tu integración funciona.

Code Example


<!-- Estructura de Documento WSDL -->
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
             targetNamespace="http://example.com/account">

  <!-- Types: Estructuras de datos -->
  <types>
    <xsd:schema targetNamespace="http://example.com/account">
      <xsd:element name="GetBalanceRequest">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="accountId" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="GetBalanceResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="balance" type="xsd:decimal"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </types>

  <!-- Messages: Definiciones de entrada/salida -->
  <message name="GetBalanceRequestMsg">
    <part name="parameters" element="tns:GetBalanceRequest"/>
  </message>
  <message name="GetBalanceResponseMsg">
    <part name="parameters" element="tns:GetBalanceResponse"/>
  </message>

  <!-- Port Type: Operaciones -->
  <portType name="AccountServicePortType">
    <operation name="GetBalance">
      <input message="tns:GetBalanceRequestMsg"/>
      <output message="tns:GetBalanceResponseMsg"/>
    </operation>
  </portType>

  <!-- Binding: Detalles del protocolo SOAP -->
  <binding name="AccountServiceBinding" type="tns:AccountServicePortType">
    <soap:binding style="document"
                  transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetBalance">
      <soap:operation soapAction="http://example.com/GetBalance"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
    </operation>
  </binding>

  <!-- Service: URL del endpoint -->
  <service name="AccountService">
    <port name="AccountServicePort" binding="tns:AccountServiceBinding">
      <soap:address location="http://example.com/account-service"/>
    </port>
  </service>
</definitions>

Standards & RFCs