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
|