WebServices / SOAP
Les spécifications WebService
Web Service Description Language
WSDL (Web Service Description Language) est un standard en cours de développement par le W3C. La version 1.1 du standard a été publiée sous la forme d'une note, mais elle n'a jamais été finalisée par le W3C. Cependant, elle a été employée dans beaucoup d'implémentations WebServices et c'est la raison pour laquelle c'est cette version qui est utilisée dans le profil basique.
WSDL est en fait un langage de description basé sur XML et qui permet de décrire:
- les Web services.
- l’utilisation de leurs opérations.
Pour ce faire, le langage définit 4 éléments principaux qui sont:
- portType: cet élément décrit le WebService, les actions qu'il peut exécuter et les messages qui lui sont associés. Il peut être comparé aux prototypes des fonctions dans un langage de programmation traditionnel.
- message: cet élément définit les données d'une action et peut être constitué de plusieurs parties. Il peut être comparé aux arguments d'une fonction dans un langage de programmation traditionnel.
- types: cet élément décrit les types des données utilisées par le WebService en utilisant des XML Schema. Il doit absolument se placer au début d'après le profil basique.
- binding: cet élément définit le format des messages et le protocole de communication utilisé pour chaque WebService.
Description d'un simple Web Service glossaire:
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <!-- Définition d'un message getTermRequest contenant une chaîne de caractères term --> <wsdl:message name="getTermRequest"> <wsdl:part name="term" type="xs:string"/> </wsdl:message> <!-- Définition d'un message getTermResponse contenant une chaîne de caractères value --> <wsdl:message name="getTermResponse"> <wsdl:part name="value" type="xs:string"/> </wsdl:message> <!-- Description du WebService glossaryTerms contenant une opération (action) qui prend en entrée un message getTermRequest et retourne un message getTermResponse --> <wsdl:portType name="glossaryTerms"> <wsdl:operation name="getTerm"> <!-- On peut rajouter une description textuelle de l'opération --> <wsdl:documentation .... /> <wsdl:input message="getTermRequest"/> <wsdl:output message="getTermResponse"/> </wsdl:operation> </wsdl:portType> <!-- Association de l’accès SOAP pour le WebService glossaryTerms --> <wsdl:binding type="glossaryTerms" name="b1"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation> <soap:operation soapAction="http://www.example.com/getTerm"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> </wsdl:definitions>
Ici, on crée d'abord deux messages
(getTermRequest
/getTermResponse
) qui seront utilisés pour les
paramètres d'entrée et de sortie d'une action de recherche dans un glossaire
(getTerm
). On définit ensuite le WebService de glossaire
(glossaryTerms
) en spécifiant les actions qu'il est capable d'effectuer
(uniquement l'action getTerm
ici). On notera ici que la seule action
spécifiée est une action de type requête/réponse (il en existe 3 autres types prévus
par WSDL).
Enfin, on associe le WebService avec un protocole d'accès. Ici, on utilise SOAP en conjonction avec HTTP (attribut style à la valeur "document", en opposition à la valeur "rpc"). Pour chaque opération définie dans le WebService auparavant, on associe l'URL d'accès à cette opération, ainsi que la façon dont les paramètres d'entrée et de sortie de l'opération sont codés (ici, de manière claire [literal] en opposition à une manière codée [encoded]).
Universal Description Discovery & Integration
UDDI (Universal Description Discovery and Integration) est un standard adopté dans sa version 2 par l'organisme OASIS (Organization for the Advancement of Structured Information Standards) en 2001.
Le but de ce standard est de fournir des fonctionnalité d'annuaires des WebServices afin de pouvoir les découvrir et les utiliser via un mécanisme centralisé pouvant regrouper les WebServices de plusieurs entreprises. Il repose sur SOAP pour sa partie d'échange de messages, et sur WSDL pour sa partir de description des services de l'annuaire. Il existe 3 types d'annuaire définis:
- Pages blanches: ces annuaires contiennent la liste des informations nécessaires pour contacter des personnes ou entités physiques liées au WebServices présent dans les autres annuaires (ex: le nom de l'entreprise qui détient tel WebService).
- Pages jaunes: ces annuaires contiennent la liste des Web Services, qui y sont décrit via le standard WSDL.
- Pages vertes: ces annuaires contiennent des informations techniques précises sur les services fournis sous la forme de texte compréhensible par l'être humain.
Il n'est pas utile de comprendre de manière technique le fonctionnement du protocole UDDI, car cela n'apporte que peu de chose dans la compréhension du fonctionnement des WebServices. Il est plus intéressant de voir comment les annuaires UDDI s'intègrent dans un environnement WebService, comme le montre l'exemple suivant:
Ici, un fournisseur WebService (Service Provider) s'inscrit initialement auprès de
l'annuaire UDDI (Service Broker) en se servant du protocole WSDL pour décrire ses
fonctionnalités. Une fois cette étape effectuer, n'importe quel client, comme celui
présenté sur le dessin (Service Requester) peut interroger l'annuaire UDDI afin de
trouver le fournisseur WebService adéquate pour exécuter une action voulue. Une fois le
WebService trouvé, le client n'a plus qu'à lui envoyer la demande d'exécution de
l'action à l'aide du protocole SOAP afin que celui-ci s'y emploi et envoie la réponse au
client.
Cela donne alors une liaison totalement indépendante et dynamique entre les clients et les
fournisseurs de services Web.