WSDL (Web Services Description Language) es un lenguaje basado en XML utilizado para describir servicios web. Espera definir la ubicación de un servicio y las operaciones que éste expone. Al estructurar un archivo WSDL, se definen de manera clara los tipos de datos, los mensajes que se intercambian entre el cliente y el servidor y la lógica de operación asociada a dichos mensajes. En este artículo, se explicará paso a paso cómo crear un WSDL que incluya campos de entrada tales como usuario, password, source, target y text y que retorne un campo de salida denominado respuesta.
El elemento raíz del documento WSDL se denomina definitions. Este elemento contiene los atributos necesarios para definir el espacio de nombres, el nombre del servicio y las referencias a otros esquemas XML. Es aquí donde se especifica el targetNamespace que identifica de forma única el servicio.
La sección types se utiliza para definir los tipos de datos utilizados por el servicio. Para nuestro caso, se deben definir los campos de entrada (usuario, password, source, target, text) y el campo de salida (respuesta). Esto se logra mediante la integración de un esquema XML (XSD) que especifica tanto tipos simples como complejos.
Un mensje en WSDL representa la definición de los datos que se intercambian. Cada mensaje se compone de uno o más parts que definen los elementos de entrada o salida. Para nuestro servicio, tendremos dos mensajes importantes: uno para la solicitud y otro para la respuesta.
La sección portType se encarga de definir las operaciones disponibles en el servicio web. Aquí se especifica qué mensajes se utilizan en cada operación, relacionando la entrada y la salida.
El binding describe cómo se envían los mensajes definidos por el portType. Se definen detalles de la comunicación como el protocolo y el estilo de intercambio, en este caso, SOAP sobre HTTP con mensajes en formato literal.
Finalmente, la sección service especifica la dirección donde se encuentra el servicio web, enlazando el binding a un puerto físico mediante el elemento port. Es en esta parte donde se configura la URL de acceso al servicio.
A continuación, se muestra un ejemplo completo de un WSDL que incluye los campos de entrada usuario, password, source, target, text y el campo de salida respuesta. Este ejemplo combina elementos esenciales de diversos enfoques y puede adaptarse a diferentes necesidades específicas.
<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/MyService"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="MyService"
targetNamespace="http://example.com/MyService">
<types>
<xsd:schema targetNamespace="http://example.com/MyService">
<xsd:element name="usuario" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
<xsd:element name="source" type="xsd:string"/>
<xsd:element name="target" type="xsd:string"/>
<xsd:element name="text" type="xsd:string"/>
<xsd:element name="respuesta" type="xsd:string"/>
<xsd:complexType name="RequestType">
<xsd:sequence>
<xsd:element name="usuario" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
<xsd:element name="source" type="xsd:string"/>
<xsd:element name="target" type="xsd:string"/>
<xsd:element name="text" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ResponseType">
<xsd:sequence>
<xsd:element name="respuesta" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
<message name="RequestMessage">
<part name="parameters" element="tns:RequestType"/>
</message>
<message name="ResponseMessage">
<part name="parameters" element="tns:ResponseType"/>
</message>
<portType name="MyServicePortType">
<operation name="procesarSolicitud">
<input message="tns:RequestMessage"/>
<output message="tns:ResponseMessage"/>
</operation>
</portType>
<binding name="MyServiceBinding" type="tns:MyServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="procesarSolicitud">
<soap:operation soapAction="http://example.com/MyService/procesarSolicitud"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MyService">
<port name="MyServicePort" binding="tns:MyServiceBinding">
<soap:address location="http://localhost:8080/MyService"/>
</port>
</service>
</definitions>
Componente | Descripción |
---|---|
definitions | Elemento raíz que define el servicio web y establece el espacio de nombres y otros atributos globales. |
types | Define los tipos de datos y estructuras (utilizando XSD) que utilizarán los mensajes, incluyendo campos de entrada y salida. |
message | Establece los mensajes de solicitud y respuesta mediante partes asociadas a los tipos definidos. |
portType | Define las operaciones disponibles en el servicio web y relaciona los mensajes de entrada y salida a cada una. |
binding | Configura el protocolo de comunicación, estableciendo cómo se envían los mensajes (p.ej., SOAP sobre HTTP). |
service | Especifica la URL o endpoint donde el servicio está disponible para los clientes web. |
El esquema XML (XSD) es crucial para el WSDL, pues define los tipos de datos que serán intercambiados. En el ejemplo anterior, se crea un tipo complejo RequestType que agrupa los campos usuario, password, source, target y text. De igual manera, se define un ResponseType para el campo de salida respuesta. Estos esquemas garantizan que tanto el cliente como el servidor manejen correctamente la validación de los datos.
La comunicación entre cliente y servidor se realiza mediante SOAP. En el binding del WSDL se establece:
El ejemplo proporcionado es un punto de partida que puede ser adaptado según las particularidades de cada implementación. Es importante actualizar el targetNamespace y la dirección del servicio (soap:address) para reflejar las condiciones reales de despliegue. Asimismo, se pueden incluir elementos adicionales en el WSDL para soportar características avanzadas de seguridad y transacciones, según sea necesario.
La construcción de un WSDL adecuado implica una cuidadosa definición de los componentes esenciales:
Para mayor profundización en el tema y ampliar tus conocimientos sobre WSDL, consulta los siguientes recursos:
Si deseas explorar más sobre temas relacionados con WSDL y servicios web, te recomendamos las siguientes búsquedas: