Dif­fé­rentes tech­no­lo­gies 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 des­crip­tion WSDL. Celui-ci permet de décrire les fonc­tion­na­li­tés d’un service Web afin que d’autres par­ti­ci­pants au réseau puissent utiliser les services. Comment fonc­tionne ce langage, à quoi sert le fichier WSDL exac­te­ment et quelles sont ses con­nexions avec les autres langages ?

Que signifie WSDL ?

WSDL signifie Web Service Des­crip­tion Language. Il s’agit donc d’un mé­ta­lan­gage per­met­tant de décrire en détail les services Web. Un service Web est un service mis à dis­po­si­tion des clients par un serveur via Internet (ou un autre réseau). Les services Web sont mul­ti­pla­te­formes, c’est-à-dire qu’ils fonc­tion­nent avec les systèmes et les ap­pli­ca­tions les plus divers. Pour qu’un client puisse s’informer sur les pos­si­bi­li­tés et les processus du service Web, un fichier WSDL est dis­po­nible sur le serveur. Les détails contenus dans le fichier per­met­tent au client de savoir comment consulter le service Web.

Le WSDL est basé sur l’Ex­ten­sible 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 Con­sor­tium (W3C).

Structure et pro­prié­tés du WSDL

Pour décrire les services Web, WSDL utilise des des­crip­tions abs­traites et concrètes. Alors que la des­crip­tion abstraite concerne l’étendue des fonc­tion­na­li­tés du service, la des­crip­tion 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é­rar­chique. Les in­for­ma­tions y sont donc pré­sen­tées sous une forme imbriquée.

Le WSDL reprend six éléments prin­ci­paux du XML :

  • types : les types de messages ;
  • messages : la des­crip­tion des données à trans­mettre ;
  • interface : les opé­ra­tions abs­traites décrivant la com­mu­ni­ca­tion entre le serveur et le client (dans une ancienne version du standard, cet élément s’appelait portType) ;
  • binding : les in­for­ma­tions sur le protocole de transport utilisé ;
  • endpoint : les in­for­ma­tions sur l’interface de com­mu­ni­ca­tion, ha­bi­tuel­le­ment 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 in­for­ma­tions né­ces­saires pour utiliser le service Web. C’est la raison pour laquelle un service Web est mul­ti­pla­te­formes. En effet, les dif­fé­rents systèmes reçoivent ce langage commun via le fichier WSDL.

WSDL : exemple

Nous allons main­te­nant 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 clai­re­ment les dif­fé­rents éléments d’un fichier WSDL. L’in­tro­duc­tion qui contient également une référence au WSDL et à XSD est suivie par les des­crip­tions abs­traites types, messages et interface. La seconde partie est fi­na­le­ment composée des des­crip­tions concrètes, endpoint étant intégré dans service.

Aller au menu principal