WSDL - Guide rapide

WSDL signifie Web Services Description Language. C'est le format standard pour décrire un service Web. WSDL a été développé conjointement par Microsoft et IBM.

Caractéristiques de WSDL

  • WSDL est un protocole basé sur XML pour l'échange d'informations dans des environnements décentralisés et distribués.

  • Les définitions WSDL décrivent comment accéder à un service Web et quelles opérations il effectuera.

  • WSDL est un langage pour décrire comment s'interfacer avec des services basés sur XML.

  • WSDL fait partie intégrante de Universal Description, Discovery, and Integration (UDDI), un registre mondial des entreprises basé sur XML.

  • WSDL est le langage utilisé par UDDI.

  • WSDL est prononcé comme «wiz-dull» et épelé comme «WSD-L».

Utilisation WSDL

WSDL est souvent utilisé en combinaison avec SOAP et XML Schema pour fournir des services Web sur Internet. Un programme client se connectant à un service Web peut lire le WSDL pour déterminer les fonctions disponibles sur le serveur. Tous les types de données spéciaux utilisés sont incorporés dans le fichier WSDL sous la forme de schéma XML. Le client peut alors utiliser SOAP pour appeler en fait l'une des fonctions répertoriées dans le WSDL.

Histoire de WSDL

WSDL 1.1 a été soumis en tant que note du W3C par Ariba, IBM et Microsoft pour la description des services pour l'activité XML du W3C sur les protocoles XML en mars 2001.

WSDL 1.1 n'a pas été approuvé par le World Wide Web Consortium (W3C), mais il vient de publier une ébauche pour la version 2.0 qui sera une recommandation (une norme officielle), et donc approuvée par le W3C.

WSDL décompose les services Web en trois éléments spécifiques et identifiables qui peuvent être combinés ou réutilisés une fois définis.

Les trois principaux éléments de WSDL qui peuvent être définis séparément sont:

  • Types
  • Operations
  • Binding

Un document WSDL comporte divers éléments, mais ils sont contenus dans ces trois éléments principaux, qui peuvent être développés en tant que documents séparés, puis ils peuvent être combinés ou réutilisés pour former des fichiers WSDL complets.

Éléments WSDL

Un document WSDL contient les éléments suivants -

  • Definition- C'est l'élément racine de tous les documents WSDL. Il définit le nom du service Web, déclare plusieurs espaces de noms utilisés dans le reste du document et contient tous les éléments de service décrits ici.

  • Data types - Les types de données à utiliser dans les messages sont sous la forme de schémas XML.

  • Message - Il s'agit d'une définition abstraite des données, sous la forme d'un message présenté soit sous la forme d'un document entier, soit sous forme d'arguments à mapper sur une invocation de méthode.

  • Operation - C'est la définition abstraite de l'opération pour un message, telle que la dénomination d'une méthode, d'une file d'attente de messages ou d'un processus métier, qui acceptera et traitera le message.

  • Port type- Il s'agit d'un ensemble abstrait d'opérations mappées sur un ou plusieurs points d'extrémité, définissant la collection d'opérations pour une liaison; la collection d'opérations, car elle est abstraite, peut être mappée à plusieurs transports via diverses liaisons.

  • Binding - C'est le protocole concret et les formats de données pour les opérations et les messages définis pour un type de port particulier.

  • Port - Il s'agit d'une combinaison d'une liaison et d'une adresse réseau, fournissant l'adresse cible de la communication de service.

  • Service- Il s'agit d'un ensemble de points de terminaison associés englobant les définitions de service dans le fichier; les services mappent la liaison au port et incluent toutes les définitions d'extensibilité.

En plus de ces éléments majeurs, la spécification WSDL définit également les éléments utilitaires suivants:

  • Documentation - Cet élément est utilisé pour fournir une documentation lisible par l'homme et peut être inclus dans tout autre élément WSDL.

  • Import - Cet élément est utilisé pour importer d'autres documents WSDL ou schémas XML.

NOTE - Les composants WSDL sont généralement générés automatiquement à l'aide d'outils prenant en charge les services Web.

La structure du document WSDL

La structure principale d'un document WSDL ressemble à ceci -

<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 document WSDL peut également contenir d'autres éléments, tels que des éléments d'extension et un élément de service permettant de regrouper les définitions de plusieurs services Web dans un seul document WSDL.

Poursuivez pour analyser un exemple de document WSDL.

Vous trouverez ci-dessous un fichier WSDL fourni pour illustrer un programme WSDL simple.

Supposons que le service fournisse une seule fonction accessible au public, appelée sayHello . Cette fonction attend un seul paramètre de chaîne et renvoie une seule chaîne de bienvenue. Par exemple, si vous passez le paramètre world , la fonction de service sayHello renvoie le message d' accueil "Hello, world!".

Exemple

Contenu du fichier 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>

Exemple d'analyse

  • Definitions - HelloService

  • Type - En utilisant des types de données intégrés et ils sont définis dans XMLSchema.

  • Message -

    • sayHelloRequest - paramètre firstName

    • sayHelloresponse - valeur de retour du message d'accueil

  • Port Type - opération sayHello qui consiste en une requête et un service de réponse.

  • Binding - Direction pour utiliser le protocole de transport SOAP HTTP.

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

  • Port - Associe la liaison à l'URI http://www.examples.com/SayHello/ où le service en cours d'exécution est accessible.

le <definitions>L'élément doit être l'élément racine de tous les documents WSDL. Il définit le nom du service Web.

Voici le morceau de code du dernier chapitre qui utilise l' élément de définitions .

<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>

À partir de l'exemple ci-dessus, nous pouvons conclure que les définitions -

  • est un conteneur de tous les autres éléments.

  • spécifie que ce document s'appelle HelloService .

  • spécifie un attribut targetNamespace . Le targetNamespace est une convention de schéma XML qui permet au document WSDL de se référer à lui - même. Dans cet exemple, nous avons spécifié un targetNamespace de http://www.examples.com/wsdl/HelloService.wsdl

  • spécifie un espace de noms par défaut: xmlns = http: //schemas.xmlsoap.org/wsdl/. Tous les éléments sans préfixe d'espace de noms, tels que message ou portType , sont donc supposés faire partie de l'espace de noms WSDL par défaut.

  • spécifie de nombreux espaces de noms qui sont utilisés dans le reste du document.

NOTE- La spécification d'espace de noms n'exige pas que le document soit présent à l'emplacement donné. Le point important est que vous spécifiez une valeur unique, différente de tous les autres espaces de noms définis.

Un service Web doit définir ses entrées et ses sorties et la manière dont elles sont mappées dans et hors des services. WSDL<types>element se charge de définir les types de données utilisés par le service Web. Les types sont des documents XML ou des parties de document.

  • L' élément types décrit tous les types de données utilisés entre le client et le serveur.

  • WSDL n'est pas exclusivement lié à un système de typage spécifique.

  • WSDL utilise la spécification de schéma XML W3C comme choix par défaut pour définir les types de données.

  • Si le service utilise uniquement des types simples intégrés au schéma XML, tels que des chaînes et des entiers, l' élément types n'est pas requis.

  • WSDL permet aux types d'être définis dans des éléments séparés afin que les types soient réutilisables avec plusieurs services Web.

Voici un morceau de code tiré de la spécification W3C. Ce code décrit comment un élément types peut être utilisé dans 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>

Les types de données résolvent le problème de l'identification des types de données et des formats que vous prévoyez d'utiliser avec vos services Web. Les informations de type sont partagées entre l'expéditeur et le destinataire. Les destinataires des messages doivent donc accéder aux informations que vous avez utilisées pour encoder vos données et doivent comprendre comment décoder les données.

le <message> L'élément décrit les données échangées entre les fournisseurs de services Web et les consommateurs.

  • Chaque service Web a deux messages: entrée et sortie.

  • L'entrée décrit les paramètres du service Web et la sortie décrit les données de retour du service Web.

  • Chaque message contient zéro ou plus <part> paramètres, un pour chaque paramètre de la fonction de service Web.

  • Chaque <part> paramètre associé à un type de béton défini dans le <types> élément de conteneur.

Prenons un morceau de code du chapitre Exemple WSDL -

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

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

Ici, deux éléments de message sont définis. Le premier représente un message de requête SayHelloRequest et le second un message de réponse SayHelloResponse .

Chacun de ces messages contient un seul élément partiel. Pour la demande, la partie spécifie les paramètres de la fonction; dans ce cas, nous spécifions un seul paramètre firstName . Pour la réponse, la partie spécifie les valeurs de retour de la fonction; dans ce cas, nous spécifions une seule valeur de retour de salutation.

le <portType> element combine plusieurs éléments de message pour former une opération complète unidirectionnelle ou aller-retour.

Par exemple, un <portType>peut combiner une demande et un message de réponse en une seule opération de demande / réponse. Ceci est le plus couramment utilisé dans les services SOAP. Un portType peut définir plusieurs opérations.

Prenons un morceau de code du chapitre Exemple WSDL -

<portType name = "Hello_PortType">
   <operation name = "sayHello">
      <input message = "tns:SayHelloRequest"/>
      <output message = "tns:SayHelloResponse"/>
   </operation>
</portType>
  • L'élément portType définit une seule opération, appelée sayHello .

  • L'opération se compose d'un seul message d'entrée SayHelloRequest et d'un

  • message de sortie SayHelloResponse .

Modèles de fonctionnement

WSDL prend en charge quatre modèles de fonctionnement de base -

Une manière

Le service reçoit un message. L'opération a donc un seul élément d' entrée . La grammaire pour une opération unidirectionnelle est -

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

Demande de réponse

Le service reçoit un message et envoie une réponse. L'opération a donc un élément d' entrée , suivi d'un élément de sortie . Pour encapsuler les erreurs, un élément fault facultatif peut également être spécifié. La grammaire pour une opération de demande-réponse est -

<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>

Sollicitation-réponse

Le service envoie un message et reçoit une réponse. L'opération a donc un élément de sortie , suivi d'un élément d' entrée . Pour encapsuler les erreurs, un élément fault facultatif peut également être spécifié. La grammaire pour une opération de sollicitation-réponse est -

<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>

Notification

Le service envoie un message. L'opération a donc un seul élément de sortie . Voici la grammaire pour une opération de notification -

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

le <binding>L'élément fournit des détails spécifiques sur la manière dont une opération portType sera réellement transmise sur le câble.

  • Les liaisons peuvent être rendues disponibles via plusieurs transports, notamment HTTP GET, HTTP POST ou SOAP.

  • Les liaisons fournissent des informations concrètes sur le protocole utilisé pour transférer les opérations portType .

  • Les liaisons fournissent des informations sur l'emplacement du service.

  • Pour le protocole SOAP, la liaison est <soap:binding>, et le transport est des messages SOAP au-dessus du protocole HTTP.

  • Vous pouvez spécifier plusieurs liaisons pour un seul portType .

L'élément de liaison a deux attributs: l'attribut de nom et de type .

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

L' attribut name définit le nom de la liaison et l'attribut type pointe vers le port pour la liaison, dans ce cas le port "tns: Hello_PortType".

Reliure SOAP

WSDL 1.1 inclut des extensions intégrées pour SOAP 1.1. Il vous permet de spécifier des détails spécifiques à SOAP, notamment les en-têtes SOAP, les styles de codage SOAP et l'en-tête HTTP SOAPAction. Les éléments d'extension SOAP incluent les éléments suivants -

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

savon: reliure

Cet élément indique que la liaison sera rendue disponible via SOAP. L' attribut style indique le style général du format de message SOAP. Une valeur de style de rpc spécifie un format RPC.

L' attribut de transport indique le transport des messages SOAP. La valeur http://schemas.xmlsoap.org/soap/http indique le transport SOAP HTTP, tandis que http://schemas.xmlsoap.org/soap/smtp indique le transport SOAP SMTP.

savon: opération

Cet élément indique la liaison d'une opération spécifique à une implémentation SOAP spécifique. L' attribut soapAction spécifie que l'en-tête HTTP SOAPAction doit être utilisé pour identifier le service.

savon: corps

Cet élément vous permet de spécifier les détails des messages d'entrée et de sortie. Dans le cas de HelloWorld, l'élément body spécifie le style de codage SOAP et l'espace de noms URN associé au service spécifié.

Voici le morceau de code du chapitre Exemple -

<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>

UNE <port> L'élément définit un point de terminaison individuel en spécifiant une seule adresse pour une liaison.

Voici la grammaire pour spécifier un port -

<wsdl:definitions .... >
   <wsdl:service .... > *
      <wsdl:port name = "nmtoken" binding = "qname"> *
         <-- extensibility element (1) -->
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
  • L'élément port a deux attributs: nom et liaison .

  • L' attribut name fournit un nom unique parmi tous les ports définis dans le document WSDL englobant.

  • L'attribut de liaison fait référence à la liaison à l'aide des règles de liaison définies par WSDL.

  • Les éléments d'extensibilité de liaison sont utilisés pour spécifier les informations d'adresse pour le port.

  • Un port NE DOIT PAS spécifier plus d'une adresse.

  • Un port NE DOIT PAS spécifier d'informations de liaison autres que les informations d'adresse.

Voici un morceau de code du chapitre Exemple -

<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>

le <service>L'élément définit les ports pris en charge par le service Web. Pour chacun des protocoles pris en charge, il existe un élément de port. L'élément de service est une collection de ports.

  • Les clients de service Web peuvent apprendre ce qui suit à partir de l'élément de service:

    • où accéder au service,
    • via quel port pour accéder au service Web, et
    • comment les messages de communication sont définis.
  • L'élément de service comprend un élément de documentation pour fournir une documentation lisible par l'homme.

Voici un morceau de code du chapitre Exemple -

<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>

Les attributs de liaison de l' élément port associent l'adresse du service à un élément de liaison défini dans le service Web. Dans cet exemple, il s'agit de 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>

Nous avons couvert les bases de WSDL dans ce tutoriel. L'étape suivante consiste à apprendre SOAP, UDDI et les services Web.

Services Web

Les services Web sont des applications Web au standard ouvert (XML, SOAP, HTTP, etc.) qui interagissent avec d'autres applications Web dans le but d'échanger des données.

Pour en savoir plus sur les services Web, consultez le didacticiel sur les services Web.

UDDI

UDDI est une norme basée sur XML pour la description, la publication et la recherche de services Web.

Pour en savoir plus sur UDDI, visitez le didacticiel UDDI.

SAVON

SOAP est un protocole XML simple qui permet aux applications d'échanger des informations via HTTP.

Pour en savoir plus sur SOAP, consultez le didacticiel SOAP.

Si vous souhaitez répertorier votre entreprise, votre site Web ou vos livres en tant que ressource WSDL, veuillez contacter à [email protected]

Liste des spécifications WSDL

Specification Draft / Proposal W3C Recommendation
     
Remarque WSDL 1.1

15. mars 2001

 
Scénarios d'utilisation WSDL

04. juin 2002

 
Exigences WSDL

28. octobre 2002

 
Architecture WSDL

11. févr. 2004

 
Glossaire WSDL

11. févr. 2004

 
Scénarios d'utilisation WSDL

11. févr. 2004

 
Langage principal WSDL 1.2

11. juin 2003

 
Modèles de message WSDL 1.2

11. juin 2003

 
Liaisons WSDL 1.2

11. juin 2003

 
Apprêt WSDL 2.0

27. mars 2006

 
Langage principal WSDL 2.0

27. mars 2006

 
Compléments WSDL 2.0

27. mars 2006

 
Liaison SOAP 1.1 WSDL 2.0

27. mars 2006

 
Mappage RDF WSDL 2.0

18. mai 2006

 
WS Addressing Core  

9 mai 2006

WS adressant la liaison SOAP  

9 mai 2006

Architecture Web  

15. déc. 2004