WSDL Introduction Structure d'un message WSDL Pratique Bibliographie et Webographie Grard-Michel Cochard cochard@u-picardie.fr Services Web WSDL (Web Service Description Language) Version du 24 fvrier 2007 Introduction L'intrt des services Web est, en particulier, leur indpendance des systmes informatiques et des technologies associes. Notamment, ce qu'est un service, comment il fonctionne doivent tre des informations accessibles sans effort. C'est le but de WSDL qui est un langage (WML bien sr) de description d'un service Web (ce que SOAP ne fait pas). En effet, WSDL rend plus aise l'criture (en particulier des interfaces) et la maintenance des services Web WSDL rend plus aise l'utilisation des services Web en rduisant la quantit de code (et en minimisant les erreurs possibles) ncessaire leur implmentation WSDL rend comprhensible l'volution d'un service Web puisqu'il fournit dynamiquement la description de chaque service. Toutefois le "versionning" n'est pas encore prvu. De plus en plus, les outils de cration de Web services incluent la possibilit d'diter le fichier de description en WSDL. Mais ce n'tait pas le cas des premiers outils. Bien entendu, comme le fichier WSDL est en XML, il peut tre dit l'aide d'un simple diteur de texte. Un des outils les plus populaires est WSIF (Web Service Invocation Framework) d'IBM qui est un paquetage Java pouvant tre tlcharg depuis le site http://alphaworks.ibm.com/tech/wsif . WSDL n'est pas actuellement une recommandation du W3C. Il n'est qu'un document de travail (WSDL 1.2), mais est quasi universellement utilis. Dans ce qui suit on indiquera indiffremment par WSDL le langage de description et le document dcrivant, avec ce langage, un service Web. Structure d'un fichier WSDL La structure d'un fichier WSDL comporte 5 parties principales contenues dans l'lment racine <definitions> <?xml version="1.0" encoding="utf-8"? ----------- > <wsdl:definitions> <wsdl:types> <!--dfinition des types abstraits de donnes --> </wsdl:types> <wsdl:message> <!--structure des messages --> </wsdl:message> <wsdl:portType> <!--Web Service Interface : dfinition d'un ensemble d'oprations --> </wsdl:portType> <wsdl:binding> <!--comment accder au service --> </wsdl:binding> <wsdl:service> <!--qui fournit le service --> </wsdl:service> </wsdl:definitions> Reprenons les diffrentes parties du fichier WSDL en les illustrant par un exemple inspir de http://msdn2.microsoft.com/en-us/library/ms996486.aspx types : cet lment dfinit les types de donnes utilises. Pour s'abstraire de tout systme ou de tout langage, il s'agit des types de donnes dfinies par XMLSchema. exemple : pour un service effectuant des calculs mathmatiques <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:y="http://example.org/math/" xmlns:ns="http://monsite.org/math/types/" targetNamespace="http://monsite.org/math/"> <types> <xsd:schema targetNamespace="http://monsite.org/math/types/" xmlns="http://monsite.org/math/types/"> <xsd:complexType name="In"> <xsd:sequence> <xsd:element name="X" type="xsd:double" /> <xsd:element name="Y" type="xsd:double" /> </xsd:sequence> <xsd:complexType> <xsd:complexType name="Out"> <xsd:sequence> <xsd:element name="resultat" type="xsd:double" /> </xsd:sequence> <xsd:complexType> <xsd:element name="Ajouter" type="In" /> <xsd:element name="AjouterResponse" type="Out" /> <xsd:element name="Soustraire" type="In" /> <xsd:element name="SoustraireResponse" type=""Out" /> <xsd:element name="Multiplier" type="In" /> <xsd:element name="MultiplierResponse" type="Out" /> <xsd:element name="Diviser" type="In" /> <xsd:element name="DiviserResponse" type="Out" /> </xsd:schema> </types> ----------- </definitions> message : cet lment dcrit les noms et les types des donnes changer exemple : <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:y="http://example.org/math/" xmlns:ns="http://monsite.org/math/types/" targetNamespace="http://monsite.org/math/"> ------------ <message name="AjouterMessage"> <part name="parameter" element="ns:Ajouter"/> </message> <message name="AjouterResponseMessage"> <part name="parameter" element="ns:AddResponse"/> </message> <message name="SoustraireMessage"> <part name="parameter" element="ns:Soustraire"/> </message> <message name="SoustraireResponseMessage"> <part name="parameter" element="ns:SoustraireResponse"/> </message> -------------- </definitions> portTYpe : dfinition d'un ensemble d'oprations exemple : <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:y="http://monsite.org/math/" xmlns:ns="http://monsite.org/math/types/" targetNamespace="http://monsite.org/math/"> ------------- <portType name="MathInterface"> <operation name="Ajouter"> <input message="y:AjouterMessage"/> <output message="y:AjouterResponseMessage"/> </operation> <operation name="Soustraire> <input message="y:SoustraireMessage"/> <output message="y:SoustraireResponseMessage"/> </operation> <operation name="Multiplier"> <input message="y:MultiplierMessage"/> <output message="y:MultiplierResponseMessage"/> </operation> <operation name="Diviser"> <input message="y:DiviserMessage"/> <output message="y:DiviserResponseMessage"/> </operation> </portType> --------------- </definitions> binding : dfinition du format des messages et du protocole utilis par chaque type de port. Un port est un point de terminaison de liaison (endpoint) compos d'une adresse Internet et d'un numro de port (comme 80 ou 90 ou 8080....) exemple : <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:y="http://monsite.org/math/" xmlns:ns="http://monsite.org/math/types/" targetNamespace="http://monsite.org/math/"> ------------- <binding name="MathSoapHttpBinding" type="y:MathInterface"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="Ajouter"> <soap:operation soapAction="http://monsite.org/math/#Ajouter" />> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> -------------- </binding> -------------- </definitions> Quelques commentaires : soap:binding indique qu'il s'agit d'une liaison SOAP 1.1 et que le message est de type "document" (il pourrait tre "rpc") ; soap:operation dfinit la valeur d'en-tte HTTP SOAPAction ; soap:body dfinit comment le "part" du message apparat dans la section Body du message SOAP (valeurs possibles : literal ou encoded) service : collection de endpoints exemple : <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:y="http://monsite.org/math/" xmlns:ns="http://monsite.org/math/types/" targetNamespace="http://monsite.org/math/"> ----------------- <service name="MathService"> <port name="MathEndpoint" binding="y:MathSoapHttpBinding"> <soap:address location="http://localhost/math/math.asmx"/> </port> </service> </definitions> Pratique Reprenons notre site de tests de services Web signal dans le chapitre 2 et l'exemple du cours de l'Euro en dallars US. Les onglets "View" ou "Analyze" permettent d'obtenir la description du service sous forme d'un fichier WSDL : Bibliographie et Webographie Ouvrages gnraux : James SNELL, Doug TISWELL, Pavel KULCHENKO, Programming Web Services with SOAP, O'Reilly Cyril VINCENT, XML et les services Web, ENI Editions, informatique technique Documents du W3C : http://www.w3.org/TR/2001/NOTE-wsdl-20010315 W3C Releases Three Web Services Description Language (WSDL) 1.2 Working Drafts. W3C Updates Web Services Description Language (WSDL) Version 2.0 Drafts. XML Schema for WSDL 2.0 Microsoft MSDN : http://msdn2.microsoft.com/en-us/library/ms996486.aspx (Understanding WSDL)