TUTORIELS 
Introduction à WSDL

Page 1 | 2

Le WSDL est le langage de description de web services, permettant aux applications les utilisant d'auto-configurer les échanges entre eux.
 (13 novembre 2002)
 

Exemple
Voici
un exemple type de fichier WSDL 1.1:

<?xml version="1.0" encoding="UTF-8" ?>
<definitions>
  <message name="getTermRequest">
    <part name="term" type="xs:string"/>
  </message>
  <message name="getTermResponse">
    <part name="term" type="xs:string"/>
  </message>
  <portType name="glossaryTerms">
    <operation name="getTerm">
      <input message="getTermRequest"/>
      <output message="getTermResponse"/>
    </operation>
  </portType>
</definitions>



Pas à pas
Nous allons construire une petite application WSDL, en définissant plusieurs morceaux et en utilisant la fonction import pour les lier.

Déclaration de portType:
Un port est simplement une suite d'opérations. De nombreux langages de programmation appellent cela une bibliothèque, un module ou une classe, mais dans le monde de l'échange de messages, les points de connexion sont des ports, et la définition abstraite d'un port est appellée Type de Port.
Ici, nous créons la définition abstraite d'une procédure helloWorld, en WSDL.

(Fichier porttype.wsdl)
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:tns="uri:perso" targetNamespace="uri:perso" xmlns="http://schemas.xmlsoap.org/wsdl/">

  <types/>

  <message name="helloWorldRequete">
    <part name="name" type="s:nimporte"/>
  </message>

  <message name="helloWorldReponse">
    <part name="helloWorldResult" type="s:nimporte"/>
  </message>

  <portType name="tutorielPort">
    <operation name="helloWorld">
      <input message="tns:helloWorldRequete"/>
      <output message="tns:helloWorldReponse"/>
    </operation>
  </portType>
</definitions>

En clair, nous définissons une opération helloWorld pour le port tutoriel de l'espace de nom uri:perso. Cette opération à un message d'entrée appellé Requete et un message de sortie appellé Reponse. L'interface n'est pas typée pour garder l'exemple simple et pour montrer que cela peut être fait de cette manière. Les types additionnels seront définis dans l'élément vide <types/>.

Rattachement du port à SOAP:
Les types de ports sont indépendants du protocole. Ici, nous utiliserons des requêtes SOAP de type RPC via HTTP avec un encodage SOAP:

(fichier binding.wsdl)
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="uri:perso" targetNamespace="uri:perso" xmlns="http://schemas.xmlsoap.org/wsdl/">

  <import namespace="uri:perso" location="porttype.wsdl"/>

  <binding name="tutorielSoap" type="tns:tutorielPort">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="helloWorld">
      <soap:operation style="rpc"/>
      <input>
        <soap:body use="encoded" namespace="uri:tutoriel" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded" namespace="uri:tutoriel" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
  </binding>
</definitions>

La première chose que fait cette définition est d'importer le type de port défini précédemment. Puis il défini une liaison SOAP à l'aide d'HTTP avec le style RPC. Les corps des messages d'entrée et de sortie sont définis avec le bon encodage et espace de nom.

Définition du service:
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="uri:diy" targetNamespace="uri:perso" xmlns="http://schemas.xmlsoap.org/wsdl/">

  <import namespace="uri:perso" location="binding.wsdl"/>

  <service name="tutoriel">
    <documentation>
      Explication complète du fonctionnement du service...
    </documentation>

    <port name="tutorielPort" binding="tns:tutorielSoap">
      <soap:address location="http://195.68.34.117/"/>
    </port>
  </service>
</definitions>

Nous importons une fois de plus le fichier précédemment créé, puis un service est défini avec une seule occurence de type abstrait tutorielPort, qui est lié à la liaison tutorielSOAP. Enfin, on donne l'information sur l'URL du point final (endpoint).
Notez bien que si on ne trouve qu'un seul élément documentation dans notre documentation, il faudra normalement y avoir pour chaque élément...

L'implémentation est aussi relativement aisée, avec PHP, .NET ou autre.

Implémentations en ligne
Voici enfin un exemple d'application WSDL 1.1: une méthode de récupération des données de Yahoo! Finance au format XML, en provenance de XMLToday. Bien entendu, ce n'est ici qu'un exemple d'application, et nous déconseillons l'utilisation de données en provencnce de Yahoo! sans leur accord...

De son coté, Google propose un kit complet pour accéder à son API, dont un fichier WSDL.

Ces exemples sont longs et compliqués, certes, mais il faut noter que dans la plupart des cas, les documents WSDL sont générés par des outils plutôt que rédigés à la main.

Conclusion
La complétion du standard WSDL est pour un bonne part crucial dans la propagation des Web Services: cette vision indépendante du système facilitera l'interopérabilité, à la fois en faisant la liaison entre technologies middleware telles que CORBA, J2EE ou DCOM, et facilitant l'implementation client/serveur par la possibilité donnée aux développeurs d'utiliser le meilleur de chaque technologie.

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page