WSDL - Guía rápida

WSDL son las siglas de Web Services Description Language. Es el formato estándar para describir un servicio web. WSDL fue desarrollado conjuntamente por Microsoft e IBM.

Características de WSDL

  • WSDL es un protocolo basado en XML para el intercambio de información en entornos descentralizados y distribuidos.

  • Las definiciones de WSDL describen cómo acceder a un servicio web y qué operaciones realizará.

  • WSDL es un lenguaje para describir cómo interactuar con servicios basados ​​en XML.

  • WSDL es una parte integral de Universal Description, Discovery e Integration (UDDI), un registro de empresas mundial basado en XML.

  • WSDL es el lenguaje que usa UDDI.

  • WSDL se pronuncia como 'wiz-dull' y se deletrea como 'WSD-L'.

Uso de WSDL

WSDL se utiliza a menudo en combinación con SOAP y XML Schema para proporcionar servicios web a través de Internet. Un programa cliente que se conecta a un servicio web puede leer el WSDL para determinar qué funciones están disponibles en el servidor. Todos los tipos de datos especiales utilizados se incrustan en el archivo WSDL en forma de esquema XML. A continuación, el cliente puede utilizar SOAP para llamar a una de las funciones enumeradas en el WSDL.

Historia de WSDL

WSDL 1.1 fue presentado como una nota del W3C por Ariba, IBM y Microsoft para describir los servicios para la actividad XML del W3C en protocolos XML en marzo de 2001.

WSDL 1.1 no ha sido respaldado por el World Wide Web Consortium (W3C), sin embargo, acaba de publicar un borrador para la versión 2.0 que será una recomendación (un estándar oficial) y, por lo tanto, respaldado por el W3C.

WSDL divide los servicios web en tres elementos identificables específicos que se pueden combinar o reutilizar una vez definidos.

Los tres elementos principales de WSDL que se pueden definir por separado son:

  • Types
  • Operations
  • Binding

Un documento WSDL tiene varios elementos, pero están contenidos dentro de estos tres elementos principales, que se pueden desarrollar como documentos separados y luego se pueden combinar o reutilizar para formar archivos WSDL completos.

Elementos WSDL

Un documento WSDL contiene los siguientes elementos:

  • Definition- Es el elemento raíz de todos los documentos WSDL. Define el nombre del servicio web, declara varios espacios de nombres utilizados en el resto del documento y contiene todos los elementos de servicio descritos aquí.

  • Data types - Los tipos de datos que se utilizarán en los mensajes están en forma de esquemas XML.

  • Message - Es una definición abstracta de los datos, en forma de un mensaje presentado como un documento completo o como argumentos para ser mapeados a una invocación de método.

  • Operation - Es la definición abstracta de la operación de un mensaje, como nombrar un método, una cola de mensajes o un proceso de negocio, que aceptará y procesará el mensaje.

  • Port type- Es un conjunto abstracto de operaciones correlacionadas con uno o más puntos extremos, que define la colección de operaciones para una vinculación; la colección de operaciones, ya que es abstracta, se puede asignar a varios transportes a través de varios enlaces.

  • Binding - Es el protocolo concreto y los formatos de datos para las operaciones y mensajes definidos para un tipo de puerto en particular.

  • Port - Es una combinación de un enlace y una dirección de red, que proporciona la dirección de destino de la comunicación del servicio.

  • Service- Es una colección de puntos finales relacionados que abarcan las definiciones de servicio en el archivo; los servicios asignan el enlace al puerto e incluyen cualquier definición de extensibilidad.

Además de estos elementos principales, la especificación WSDL también define los siguientes elementos de utilidad:

  • Documentation - Este elemento se utiliza para proporcionar documentación legible por humanos y se puede incluir dentro de cualquier otro elemento WSDL.

  • Import - Este elemento se utiliza para importar otros documentos WSDL o esquemas XML.

NOTE - Las partes WSDL generalmente se generan automáticamente utilizando herramientas compatibles con servicios web.

La estructura del documento WSDL

La estructura principal de un documento WSDL se ve así:

<definitions>
   <types>
      definition of types........
   </types>

   <message>
      definition of a message....
   </message>

   <portType>
      <operation>
         definition of a operation.......  
      </operation>
   </portType>

   <binding>
      definition of a binding....
   </binding>

   <service>
      definition of a service....
   </service>
</definitions>

Un documento WSDL también puede contener otros elementos, como elementos de extensión y un elemento de servicio que hace posible agrupar las definiciones de varios servicios web en un solo documento WSDL.

Continúe para analizar un ejemplo de documento WSDL.

A continuación se muestra un archivo WSDL que se proporciona para demostrar un programa WSDL simple.

Supongamos que el servicio proporciona una única función disponible públicamente, llamada sayHello . Esta función espera un parámetro de cadena única y devuelve un saludo de cadena única. Por ejemplo, si pasa el parámetro mundo , la función de servicio sayHello devuelve el saludo "¡Hola, mundo!".

Ejemplo

Contenido del archivo HelloService.wsdl -

<definitions name = "HelloService"
   targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns = "http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
 
   <message name = "SayHelloRequest">
      <part name = "firstName" type = "xsd:string"/>
   </message>
	
   <message name = "SayHelloResponse">
      <part name = "greeting" type = "xsd:string"/>
   </message>

   <portType name = "Hello_PortType">
      <operation name = "sayHello">
         <input message = "tns:SayHelloRequest"/>
         <output message = "tns:SayHelloResponse"/>
      </operation>
   </portType>

   <binding name = "Hello_Binding" type = "tns:Hello_PortType">
      <soap:binding style = "rpc"
         transport = "http://schemas.xmlsoap.org/soap/http"/>
      <operation name = "sayHello">
         <soap:operation soapAction = "sayHello"/>
         <input>
            <soap:body
               encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
               namespace = "urn:examples:helloservice"
               use = "encoded"/>
         </input>
		
         <output>
            <soap:body
               encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
               namespace = "urn:examples:helloservice"
               use = "encoded"/>
         </output>
      </operation>
   </binding>

   <service name = "Hello_Service">
      <documentation>WSDL File for HelloService</documentation>
      <port binding = "tns:Hello_Binding" name = "Hello_Port">
         <soap:address
            location = "http://www.examples.com/SayHello/" />
      </port>
   </service>
</definitions>

Análisis de ejemplo

  • Definitions - HelloService

  • Type - Utilizando tipos de datos integrados y definidos en XMLSchema.

  • Message -

    • sayHelloRequest - parámetro firstName

    • sayHelloresponse - valor de retorno del saludo

  • Port Type - Operación sayHello que consiste en un servicio de solicitud y respuesta.

  • Binding - Dirección para utilizar el protocolo de transporte SOAP HTTP.

  • Service - Servicio disponible en http://www.examples.com/SayHello/

  • Port - Asocia el enlace con la URI http://www.examples.com/SayHello/ donde se puede acceder al servicio en ejecución.

los <definitions>El elemento debe ser el elemento raíz de todos los documentos WSDL. Define el nombre del servicio web.

Aquí está el fragmento de código del último capítulo que usa el elemento de definiciones .

<definitions name="HelloService"
   targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   ................................................
</definitions>

Del ejemplo anterior, podemos concluir que las definiciones :

  • es un contenedor de todos los demás elementos.

  • especifica que este documento se llama HelloService .

  • especifica un atributo targetNamespace . El targetNamespace es una convención de esquema XML que permite el documento WSDL para referirse a sí mismo. En este ejemplo, hemos especificado un targetNamespace de http://www.examples.com/wsdl/HelloService.wsdl

  • especifica un espacio de nombres predeterminado: xmlns = http: //schemas.xmlsoap.org/wsdl/. Por lo tanto, se supone que todos los elementos sin un prefijo de espacio de nombres, como message o portType , forman parte del espacio de nombres WSDL predeterminado.

  • especifica numerosos espacios de nombres que se utilizan en el resto del documento.

NOTE- La especificación del espacio de nombres no requiere que el documento esté presente en la ubicación dada. El punto importante es que especifique un valor que sea único, diferente de todos los demás espacios de nombres que están definidos.

Un servicio web necesita definir sus entradas y salidas y cómo se asignan dentro y fuera de los servicios. WSDL<types>El elemento se encarga de definir los tipos de datos que utiliza el servicio web. Los tipos son documentos XML o partes de documentos.

  • El elemento de tipos describe todos los tipos de datos utilizados entre el cliente y el servidor.

  • WSDL no está vinculado exclusivamente a un sistema de escritura específico.

  • WSDL utiliza la especificación del esquema XML de W3C como su opción predeterminada para definir tipos de datos.

  • Si el servicio usa solo tipos simples integrados en el esquema XML, como cadenas y enteros, el elemento de tipos no es necesario.

  • WSDL permite que los tipos se definan en elementos separados para que los tipos sean reutilizables con múltiples servicios web.

Aquí hay un fragmento de código tomado de la especificación W3C. Este código describe cómo se puede utilizar un elemento de tipos dentro de un WSDL.

<types>
   <schema targetNamespace = "http://example.com/stockquote.xsd"
      xmlns = "http://www.w3.org/2000/10/XMLSchema">
		
      <element name = "TradePriceRequest">
         <complexType>
            <all>
               <element name = "tickerSymbol" type = "string"/>
            </all>
         </complexType>
      </element>
		
      <element name = "TradePrice">
         <complexType>
            <all>
               <element name = "price" type = "float"/>
            </all>
         </complexType>
      </element>
		
   </schema>
</types>

Los tipos de datos abordan el problema de identificar los tipos de datos y los formatos que pretende utilizar con sus servicios web. La información de tipo se comparte entre el remitente y el receptor. Por lo tanto, los destinatarios de los mensajes necesitan acceder a la información que utilizó para codificar sus datos y deben comprender cómo decodificar los datos.

los <message> El elemento describe los datos que se intercambian entre los proveedores de servicios web y los consumidores.

  • Cada servicio web tiene dos mensajes: entrada y salida.

  • La entrada describe los parámetros del servicio web y la salida describe los datos de retorno del servicio web.

  • Cada mensaje contiene cero o más <part> parámetros, uno para cada parámetro de la función del servicio web.

  • Cada <part> parámetro se asocia con un tipo concreto definido en el <types> elemento contenedor.

Tomemos un fragmento de código del capítulo Ejemplo de WSDL:

<message name = "SayHelloRequest">
   <part name = "firstName" type = "xsd:string"/>
</message>

<message name = "SayHelloResponse">
   <part name = "greeting" type = "xsd:string"/>
</message>

Aquí, se definen dos elementos de mensaje. El primero representa un mensaje de solicitud SayHelloRequest y el segundo representa un mensaje de respuesta SayHelloResponse .

Cada uno de estos mensajes contiene un solo elemento de parte. Para la solicitud, la parte especifica los parámetros de la función; en este caso, especificamos un único parámetro firstName . Para la respuesta, la parte especifica los valores de retorno de la función; en este caso, especificamos un único valor de retorno de saludo.

los <portType> El elemento combina varios elementos de mensaje para formar una operación completa de ida o de ida y vuelta.

Por ejemplo, un <portType>puede combinar una solicitud y un mensaje de respuesta en una sola operación de solicitud / respuesta. Esto se usa más comúnmente en los servicios SOAP. Un portType puede definir varias operaciones.

Tomemos un fragmento de código del capítulo Ejemplo de WSDL:

<portType name = "Hello_PortType">
   <operation name = "sayHello">
      <input message = "tns:SayHelloRequest"/>
      <output message = "tns:SayHelloResponse"/>
   </operation>
</portType>
  • El elemento portType define una sola operación, llamada sayHello .

  • La operación consta de un único mensaje de entrada SayHelloRequest y un

  • mensaje de salida SayHelloResponse .

Patrones de operación

WSDL admite cuatro patrones básicos de funcionamiento:

De una sola mano

El servicio recibe un mensaje. Por tanto, la operación tiene un único elemento de entrada . La gramática para una operación unidireccional es:

<wsdl:definitions .... > 
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken">
         <wsdl:input name = "nmtoken"? message = "qname"/>
      </wsdl:operation>
   </wsdl:portType >
</wsdl:definitions>

Solicitar respuesta

El servicio recibe un mensaje y envía una respuesta. Por tanto, la operación tiene un elemento de entrada , seguido de un elemento de salida . Para encapsular errores, también se puede especificar un elemento de falla opcional . La gramática para una operación de solicitud-respuesta es:

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
         <wsdl:input name = "nmtoken"? message = "qname"/>
         <wsdl:output name = "nmtoken"? message = "qname"/>
         <wsdl:fault name = "nmtoken" message = "qname"/>*
      </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

Solicitar-respuesta

El servicio envía un mensaje y recibe una respuesta. Por tanto, la operación tiene un elemento de salida , seguido de un elemento de entrada . Para encapsular errores, también se puede especificar un elemento de falla opcional . La gramática para una operación de solicitud-respuesta es:

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
         <wsdl:output name = "nmtoken"? message = "qname"/>
         <wsdl:input name = "nmtoken"? message = "qname"/>
         <wsdl:fault name = "nmtoken" message = "qname"/>*
      </wsdl:operation>
   </wsdl:portType >
</wsdl:definitions>

Notificación

El servicio envía un mensaje. Por tanto, la operación tiene un único elemento de salida . A continuación se muestra la gramática para una operación de notificación:

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken">
         <wsdl:output name = "nmtoken"? message = "qname"/>
      </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

los <binding>El elemento proporciona detalles específicos sobre cómo se transmitirá realmente una operación portType a través del cable.

  • Los enlaces pueden estar disponibles a través de varios transportes, incluidos HTTP GET, HTTP POST o SOAP.

  • Los enlaces proporcionan información concreta sobre qué protocolo se está utilizando para transferir operaciones portType .

  • Los enlaces proporcionan información sobre la ubicación del servicio.

  • Para el protocolo SOAP, el enlace es <soap:binding>y el transporte son mensajes SOAP sobre el protocolo HTTP.

  • Puede especificar varios enlaces para un solo portType .

El elemento de enlace tiene dos atributos: nombre y tipo de atributo.

<binding name = "Hello_Binding" type = "tns:Hello_PortType">

El atributo de nombre define el nombre del enlace, y el atributo de tipo apunta al puerto para el enlace, en este caso el puerto "tns: Hello_PortType".

Enlace SOAP

WSDL 1.1 incluye extensiones integradas para SOAP 1.1. Le permite especificar detalles específicos de SOAP, incluidos los encabezados SOAP, los estilos de codificación SOAP y el encabezado HTTP SOAPAction. Los elementos de la extensión SOAP incluyen lo siguiente:

  • soap:binding
  • soap:operation
  • soap:body

jabón: vinculante

Este elemento indica que el enlace estará disponible a través de SOAP. El atributo de estilo indica el estilo general del formato de mensaje SOAP. Un valor de estilo de rpc especifica un formato RPC.

El atributo de transporte indica el transporte de los mensajes SOAP. El valor http://schemas.xmlsoap.org/soap/http indica el transporte SOAP HTTP, mientras que http://schemas.xmlsoap.org/soap/smtp indica el transporte SOAP SMTP.

jabón: operación

Este elemento indica la vinculación de una operación específica a una implementación SOAP específica. El atributo soapAction especifica que el encabezado HTTP SOAPAction se utilizará para identificar el servicio.

jabón: cuerpo

Este elemento le permite especificar los detalles de los mensajes de entrada y salida. En el caso de HelloWorld, el elemento body especifica el estilo de codificación SOAP y el espacio de nombres URN asociado con el servicio especificado.

Aquí está el fragmento de código del capítulo Ejemplo:

<binding name = "Hello_Binding" type = "tns:Hello_PortType">
   <soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
   <operation name = "sayHello">
      <soap:operation soapAction = "sayHello"/>
			
      <input>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </input>
			
      <output>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </output>
   </operation>
</binding>

UN <port> El elemento define un punto final individual especificando una única dirección para un enlace.

Aquí está la gramática para especificar un puerto:

<wsdl:definitions .... >
   <wsdl:service .... > *
      <wsdl:port name = "nmtoken" binding = "qname"> *
         <-- extensibility element (1) -->
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
  • El elemento de puerto tiene dos atributos: nombre y enlace .

  • El atributo de nombre proporciona un nombre exclusivo entre todos los puertos definidos en el documento WSDL adjunto.

  • El atributo de enlace se refiere al enlace que utiliza las reglas de enlace definidas por WSDL.

  • Los elementos de extensibilidad de enlace se utilizan para especificar la información de dirección para el puerto.

  • Un puerto NO DEBE especificar más de una dirección.

  • Un puerto NO DEBE especificar ninguna información vinculante que no sea la información de la dirección.

Aquí hay un fragmento de código del capítulo Ejemplo:

<service name = "Hello_Service">
   <documentation>WSDL File for HelloService</documentation>
   <port binding = "tns:Hello_Binding" name = "Hello_Port">
      <soap:address
         location = "http://www.examples.com/SayHello/">
   </port>
</service>

los <service>El elemento define los puertos admitidos por el servicio web. Para cada uno de los protocolos admitidos, hay un elemento de puerto. El elemento de servicio es una colección de puertos.

  • Los clientes de servicios web pueden aprender lo siguiente del elemento de servicio:

    • dónde acceder al servicio,
    • a través de qué puerto acceder al servicio web, y
    • cómo se definen los mensajes de comunicación.
  • El elemento de servicio incluye un elemento de documentación para proporcionar documentación legible por humanos.

Aquí hay un fragmento de código del capítulo Ejemplo:

<service name = "Hello_Service">
   <documentation>WSDL File for HelloService</documentation>
   <port binding = "tns:Hello_Binding" name = "Hello_Port">
      <soap:address
         location = "http://www.examples.com/SayHello/">
   </port>
</service>

Los atributos de enlace del elemento de puerto asocian la dirección del servicio con un elemento de enlace definido en el servicio web. En este ejemplo, esto es Hello_Binding

<binding name =" Hello_Binding" type = "tns:Hello_PortType">
   <soap:binding style = "rpc"
      transport = "http://schemas.xmlsoap.org/soap/http"/>
   <operation name = "sayHello">
      <soap:operation soapAction = "sayHello"/>
		
      <input>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </input>
			
      <output>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </output>
   </operation>
</binding>

Hemos cubierto los conceptos básicos de WSDL en este tutorial. El siguiente paso es aprender SOAP, UDDI y Web Services.

Servicios web

Los servicios web son aplicaciones web de estándar abierto (XML, SOAP, HTTP, etc.) que interactúan con otras aplicaciones web con el fin de intercambiar datos.

Para obtener más información sobre los servicios web, visite Tutorial de servicios web.

UDDI

UDDI es un estándar basado en XML para describir, publicar y encontrar servicios web.

Para obtener más información sobre UDDI, visite Tutorial de UDDI.

JABÓN

SOAP es un protocolo simple basado en XML que permite a las aplicaciones intercambiar información a través de HTTP.

Para obtener más información sobre SOAP, visite Tutorial de SOAP.

Si está interesado en incluir su empresa, sitio web o libros como recurso WSDL, póngase en contacto con [email protected]

Lista de especificaciones WSDL

Specification Draft / Proposal W3C Recommendation
     
WSDL 1.1 Nota

15 de marzo de 2001

 
Escenarios de uso de WSDL

04 de junio de 2002

 
Requisitos WSDL

28 de octubre de 2002

 
Arquitectura WSDL

11. febrero de 2004

 
Glosario WSDL

11. febrero de 2004

 
Escenarios de uso de WSDL

11. febrero de 2004

 
Lenguaje principal WSDL 1.2

11. junio de 2003

 
Patrones de mensajes WSDL 1.2

11. junio de 2003

 
Enlaces WSDL 1.2

11. junio de 2003

 
Imprimación WSDL 2.0

27 de marzo de 2006

 
Lenguaje principal WSDL 2.0

27 de marzo de 2006

 
Adjuntos WSDL 2.0

27 de marzo de 2006

 
Enlace WSDL 2.0 SOAP 1.1

27 de marzo de 2006

 
Asignación RDF de WSDL 2.0

18. de mayo de 2006

 
Núcleo de direccionamiento WS  

09 de mayo de 2006

WS Direccionamiento de enlaces SOAP  

09 de mayo de 2006

Arquitectura Web  

15. diciembre de 2004