Tutoriel WSDL : explication du Web Service Description Language

Différentes technologies entrent en jeu lorsque l’on travaille avec des Web services. C’est notamment le cas de SOAP et de REST, mais surtout du langage de description WSDL. Celui-ci permet de décrire les fonctionnalités d’un service Web afin que d’autres participants au réseau puissent utiliser les services. Comment fonctionne ce langage, à quoi sert le fichier WSDL exactement et quelles sont ses connexions avec les autres langages ?

Que signifie WSDL ?

WSDL signifie Web Service Description Language. Il s’agit donc d’un métalangage permettant de décrire en détail les services Web. Un service Web est un service mis à disposition des clients par un serveur via Internet (ou un autre réseau). Les services Web sont multiplateformes, c’est-à-dire qu’ils fonctionnent avec les systèmes et les applications les plus divers. Pour qu’un client puisse s’informer sur les possibilités et les processus du service Web, un fichier WSDL est disponible sur le serveur. Les détails contenus dans le fichier permettent au client de savoir comment consulter le service Web.

Le WSDL est basé sur l’Extensible Markup Language (XML) ou le schéma XML (XSD). Cela signifie que le WSDL utilise des éléments XML.

Remarque

Le WSDL est normalisé par le World Wide Web Consortium (W3C).

Structure et propriétés du WSDL

Pour décrire les services Web, WSDL utilise des descriptions abstraites et concrètes. Alors que la description abstraite concerne l’étendue des fonctionnalités du service, la description concrète porte quant à elle sur des données claires telles que le protocole de transfert. Le document (c’est-à-dire le fichier WSDL) dispose d’une structure hiérarchique. Les informations y sont donc présentées sous une forme imbriquée.

Le WSDL reprend six éléments principaux du XML :

  • types : les types de messages ;
  • messages : la description des données à transmettre ;
  • interface : les opérations abstraites décrivant la communication entre le serveur et le client (dans une ancienne version du standard, cet élément s’appelait portType) ;
  • binding : les informations sur le protocole de transport utilisé ;
  • endpoint : les informations sur l’interface de communication, habituellement sous la forme d’une URI (dans une ancienne version du standard, cet élément s’appelait port) ;
  • service : les points d’accès du service Web.

Lorsque l’on remplit tous les éléments dans le fichier, le client obtient toutes les informations nécessaires pour utiliser le service Web. C’est la raison pour laquelle un service Web est multiplateformes. En effet, les différents systèmes reçoivent ce langage commun via le fichier WSDL.

WSDL : exemple

Nous allons maintenant regarder la structure d’un fichier WSDL de plus près à travers un exemple. Le code suivant doit servir pour un service Web qui renvoie à un simple « 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>

Dans cet exemple de texte source, on identifie clairement les différents éléments d’un fichier WSDL. L’introduction qui contient également une référence au WSDL et à XSD est suivie par les descriptions abstraites types, messages et interface. La seconde partie est finalement composée des descriptions concrètes, endpoint étant intégré dans service.