En el ámbito de los servicios web, hay varias te­c­no­lo­gías que de­sem­pe­ñan un papel muy im­po­r­ta­n­te. Además de SOAP y REST, nos referimos sobre todo al lenguaje de­s­cri­p­ti­vo WSDL, que describe las funciones de un servicio web para que el resto de pa­r­ti­ci­pa­n­tes de la red puedan uti­li­zar­lo. Te contamos cómo funciona, para qué sirve exac­ta­me­n­te el archivo WSDL y de qué forma se relaciona esta notación con otros lenguajes.

¿Qué significa WSDL?

WSDL son las siglas de web service de­s­cri­p­tion language o lenguaje de de­s­cri­p­ción de servicios web. Se trata de un me­ta­le­n­gua­je que permite describir los servicios web de manera integral. Un servicio web es, a su vez, un servicio que un servidor pro­po­r­cio­na a los clientes a través de Internet (u otra red). Este proceso se lleva a cabo al margen de la pla­ta­fo­r­ma, esto es, entre los sistemas y apli­ca­cio­nes más diversos. Para que el cliente pueda conocer los pro­ce­di­mie­n­tos y po­si­bi­li­da­des del servicio web, un archivo WSDL en el servidor web contiene la in­fo­r­ma­ción que indica al cliente cómo llamar al servicio web.

WSDL se basa en el lenguaje XML (ex­te­n­si­ble markup language) o lenguaje de marcado ex­te­n­si­ble, así como en el lenguaje XML Schema (XSD). En otras palabras, WSDL utiliza elementos XML.

Hecho

WSDL está es­ta­n­da­ri­za­do por el Consorcio World Wide Web (W3C).

Es­tru­c­tu­ra y pro­pie­da­des del WSDL

WSDL emplea de­s­cri­p­cio­nes ab­s­tra­c­tas y concretas para definir los servicios web. Mientras que las de­s­cri­p­cio­nes ab­s­tra­c­tas se refieren a la fu­n­cio­na­li­dad del servicio, las de­s­cri­p­cio­nes concretas comunican datos es­pe­cí­fi­cos, como el protocolo de tra­n­s­mi­sión. El documento (es decir, el archivo WSDL) tiene una es­tru­c­tu­ra je­rá­r­qui­ca. Por lo tanto, la in­fo­r­ma­ción está anidada.

WSDL recurre a seis elementos pri­n­ci­pa­les de XML:

  • types: tipos de datos
  • message: de­s­cri­p­ción de los datos a tra­n­s­fe­rir
  • interface: ope­ra­cio­nes ab­s­tra­c­tas que describen la co­mu­ni­ca­ción entre el servidor y el cliente (aún se llamaba portType en una versión anterior del estándar)
  • binding: in­fo­r­ma­ción sobre el protocolo de tra­n­s­po­r­te utilizado
  • endpoint: in­fo­r­ma­ción sobre la interfaz de co­mu­ni­ca­ción, ge­ne­ra­l­me­n­te en forma de un URI (aún se de­no­mi­na­ba port en una versión anterior del estándar)
  • service: puntos de acceso del servicio web

Si el archivo incluye todos estos elementos, el cliente obtiene toda la in­fo­r­ma­ción necesaria para acceder al servicio web. El que todos los sistemas obtengan el mismo lenguaje por medio del archivo WSDL es lo que hace que los servicios web sean mu­l­ti­pla­ta­fo­r­ma.

Ejemplo de archivo WSLD

A co­n­ti­nua­ción, te mostramos la es­tru­c­tu­ra de un archivo WSDL con más detalle en un documento de muestra. El siguiente código es para un servicio web que produce un clásico “Hello World”.

<?xml version="1.0"?>
<definitions name="HelloWorld"
targetNamespace="http://example.com/helloworld.wsdl"
xmlns:tns="http://example.com/helloworld.wsdl"
xmlns:xsd1="http://example.com/helloworld.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
    <types>
        <schema targetNamespace="http://example.com/helloworld.xsd"
            xmlns="http://www.w3.org/2000/10/XMLSchema">
            <element name="HelloWordElement">
                <complexType>
                    <all>
                        <element name="worldRequest" type="string"/>
                    </all>
                </complexType>
            </element>
</schema>
</types>
<message name = "HelloWorldRequest">
<part name = "name" type = "xsd:string"/>
</message>
<message name = "HelloWorldResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<interface name = "HelloWorld_Interface">
<operation name = "sayHelloWorld">
<input message = "tns:HelloWorldRequest"/>
<output message = "tns:HelloWorldResponse"/>
</operation>
</interface>
<binding name = "HelloWorld_Binding" type = "tns:HelloWorld_Interface">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHelloWorld">
<soap:operation soapAction = "sayHelloWorld"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloworld"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloworld"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_World">
<documentation>WSDL File for HelloWorld</documentation>
<endpoint binding = "tns:HelloWorld_Binding" name = "HelloWorld_Endpoint">
<soap:address
location = "http://www.example.com/HelloWorld/" />
</endpoint>
</service>
</definitions>

En este ejemplo de código fuente, se aprecian bien los co­m­po­ne­n­tes in­di­vi­dua­les del archivo WSDL. Después de una in­tro­du­c­ción inicial, que también incluye una re­fe­re­n­cia a WSDL y XSD, siguen los tipos de de­s­cri­p­cio­nes ab­s­tra­c­tas: types, messages e interface. Fi­na­l­me­n­te, la segunda mitad consiste en de­s­cri­p­cio­nes concretas, con el endpoint integrado en el service.

Ir al menú principal