1 Architecture Orientée Services Décrire un Service avec WSDL Master 1 Informatique
Introduction SOAP permet l échange de messages entre différents processus, mais : - Comment formaliser les messages échangés par les processus? - De quelle manière sont-ils décrits afin d être compréhensibles par chacun des processus qui interviennent dans l échange? - Comment sont-ils transférés via l Internet? - Existe-t-il des logiciels pour gérer ces descriptions? => WSDL (Web Service Description Language) répond à la problématique par l approche de la description de services - permet de décrire des services échangés entre partenaires via l utilisation de standards Web (protocoles de transport, format de message) - Issu de plusieurs travaux d IBM et Microsoft - proposition d une spécification commune d appuyant sur le format XML - langage extensible et indépendant des formats des messages - le document de spécification décrit les liaisons mettant en œuvre des services Web définis en format WSDL en conjonction avec les protocoles SOAP et HTTP GET/ POST ainsi que le format de données MIME 2
3 Principaux Concepts (1/2) WSDL introduit quelques concepts essentiels à sa compréhension : - types (types) : définition des types de données qui structurent les messages avec un système de typage (ex : schémas XML) - messages (messages) : définition typée abstraite des données échangées entre les nœuds de communication - opérations (operations) : description abstraite d ensembles cohérents de messages (messages en entrée, messages en sortie) formant les unités d interaction avec le service Web - types de ports (port types) : ensembles abstraits d opérations prises en charge par un ou plusieurs nœuds de communication - liaisons (bindings) : protocoles concrets et formats de message pour chaque type de port - ports (ports) : nœuds de communication particuliers, chacun étant défini comme une combinaison entre une liaison et une adresse réseau - services (services) : ensemble des ports permettant l accès aux services
4 Principaux Concepts (2/2) Pour la description des données transportées dans les messages, WSDL s appuie sur un système de définition de types existants, sans chercher à en introduire un nouveau - fait appel à la spécification XML Schéma en tant que système de typage canonique (mais reste extensible) L association des types de données, des messages et des opérations avec les formats de message et les protocoles de transport est réalisée par un mécanisme de «liaison» (binding) - En standard, WSDL décrit 3 liaisons particulières : - liaison vers protocole SOAP 1.1 - liaison vers protocole HTTP GET/POST - liaison vers le format de données MIME - Attention : ces liaisons ne sont pas exclusives, d autres liaisons peuvent être conçues et formalisées
WSDL dans le monde «réel» Spécification WSDL : - Brique de base nécessaire à la définition et réutilisation de services Web - Rôle pivot dans une archi de services Web - seule la présence d un contrat WSDL permet d affirmer que l on met en oeuvre un service Web (SOAP seul ne suffit pas) - WSDL extensible : peut s appuyer sur d autres protocoles que SOAP - cohabitation possible de ports alternatifs Couche de description de service WSDL permet donc de publier les caractéristiques fonctionnelles et techniques d un service Web, éléments importants d un contrat de service - publication à petite (Intranet) et grande échelle (Internet) possible 5
6 Structure d un document WSDL Structure document WSDL Un document WSDL est tout d abord un document XML. Il peut (voir figure 10-1). Un document WSDL est tout d abord un document XML - Racine : élément definitions - Constitué d un ensemble d éléments définis par la spécification - les espaces de noms (voir diapo suivante) ne sont pas toujours présents : leur présence dépend des liaisons définies dans le doc. ainsi que le typage de données retenu <definitions> <types> </types> <message> </message> <porttype> </porttype> <binding> </binding> </definitions>
Un document WSDL est constitué d un ensemble d éléments définis par la spécification. Selon les options de conception retenues pour décrire le(s) service(s), plusieurs ensembles distincts d éléments peuvent être utilisés, associés à des espaces de noms distincts (voir tableau 10-1). Espaces de noms utilisés Tableau 10-1. Espaces de noms utilisés dans un document WSDL Préfixe URI de l espace de noms Description wsdl soap http mime soapenc soapenv xsi xsd http://schemas.xmlsoap.org/wsdl/ http://schemas.xmlsoap.org/ wsdl/soap/ http://schemas.xmlsoap.org/ wsdl/http/ http://schemas.xmlsoap.org/ wsdl/mime/ http://schemas.xmlsoap.org/ soap/encoding/ http://schemas.xmlsoap.org/ soap/envelope/ http://www.w3.org/2000/10/xml Schema-instance http://www.w3.org/2000/10/ XMLSchema Spécifie l espace de noms WSDL du framework de définition de service. Spécifie l espace de noms WSDL en cas d utilisation de la liaison WSDL SOAP (voir ci-après la section consacrée à cette liaison). Spécifie l espace de noms WSDL en cas d utilisation de la liaison WSDL HTTP GET/POST (voir ci-après la section consacrée à cette liaison). Spécifie l espace de noms WSDL en cas d utilisation de la liaison WSDL MIME (voir ci-après la section consacrée à cette liaison). Spécifie l espace de noms d encodage décrit dans le protocole SOAP 1.1 (voir ci-après la section consacrée à la liaison WSDL SOAP). Spécifie l espace de noms d enveloppe décrit dans le protocole SOAP 1.1 (voir ci-après la section consacrée à la liaison WSDL SOAP). Spécifie l espace de noms instance décrit dans la spécification XML Schema (si cette spécification est utilisée pour définir les types de données). Spécifie l espace de noms schéma décrit dans la spécification XML Schema (si cette spécification est utilisée pour définir les types de données). tns Divers Spécifie, par convention, l espace de noms propre au document WSDL (tns = this namespace). Défini par le concepteur du document. Divers Tout autre URI est considéré comme dépendant du contexte d utilisation ou du programme utilisateur. 7
8 <soap:address location="http://api.google.com/search/beta2"/> Noms </port> et liens entre fragments de </service> documents </definitions> (1/3) Élément racine definitions - espace de nom particulier via attribut targetnamespace (optionnel) Noms et liens entre fragments de documents À l élément racine definitions du document WSDL peut être associé un espa optionnel via l attribut targetnamespace. Dans notre exemple, cet attribu urn:googlesearch. Les générateurs de documents WSDL le fixent générale débute par la constante http://tempuri.org/ par défaut. Le concepteur du document pour le rendre particulier à ce document. Cet attribut est de type URI et doit être - attribut URI obligatoirement absolu - ex : targetnamespace="urn:googlesearch" - possible d importer un ou plusieurs fragments de documents - balise import - espace de nom particulier avec namespace - Tous les éléments de cette collection de définitions peuvent être importés : réalisé service, via l utilisation port, message, de la liaison balise et import type de de port la manière suivante : Il est possible d importer un ou plusieurs fragments de documents dans un doc <definitions... > <import namespace="uri" location="uri"/> </definitions>
Noms et liens entre fragments de documents (2/3) Faculté d importation de fragments très importante : réutilisation de définitions de services - Exemple WSDL d importation à 3 niveaux pour le service de cotation d actions (Stock Quote Service) - 1er document (.xsd) : schéma XML décrivant les types de données manipulées par les messages associés à ce service - 2ème document (.wsdl) : fournit la définition abstraite d une opération de recherche de la valeur courante d une action passée en paramètre (GetLastTradePrice) - s appuie sur des messages qui manipulent les types de données définis dans le 1er document - 3ème document (.wsdl) : permet d exposer l implémentation concrète du service - définit d une part la liaison de l opération GetLastTradePrice décrite dans dans le 2nd document au protocole de transport SOAP - et d autre part l adresse Internet d accès au service 9
Noms et liens entre fragments de documents (3/3) À l utilisation, le consommateur final ne doit accéder directement qu au dernier document qui lui fournit l adresse d accès au service - mais les 2 premiers documents doivent être accessibles (sinon erreur) La spécification UDDI fait largement appel à cette capacité - Les 2 premiers documents représentent un service type (tmodel) - Le 3ème document constitue un modèle de liaison (Binding Template) permettant de relier le service type abstrait à un service métier concret 10
11 Éléments de définition Chacun des éléments d une définition WSDL peut être décrit via l utilisation du sous-élé documentation. Cet élément optionnel, qui peut être constitué par du texte ou d autres éléments, p ainsi de documenter la description d un service. Éléments de définition (1/6) Les types de données Types L élément de données types du document WSDL contient la description des types de données manipulées - les Élément messages. types du document WSDL contient la description des types de La données spécification manipulées XML Schema dans constitue les message le système canonique de typage des données de la spécific WSDL. - La Cependant, spécification cette XML spécification Schema constitue prévoit l utilisation le système possible canonique d autres de typage systèmes des de typa données. données En effet, de la le spécification schéma XML WSDL des documents WSDL définit l élément types de la ma suivante : - Extension possible avec any et espace de noms ##other <element name="types" type="wsdl (Web Services Description Language):typesType"/> <complextype name="typestype"> <complexcontent> <extension base="wsdl (Web Services Description Language):documented"> <sequence> <any namespace="##other" minoccurs="0" maxoccurs="unbounded"/> </sequence> </extension> </complexcontent> </complextype> - L élément types situé directement sous la racine (definitions) dans la hiérarchie du document WSDL
</types> Après cette modification (notons sa conformité à plusieurs des recommandations WS précédemment), Éléments le préfixe soapenc de peut être définition retiré de l élément definitions (2/6) de la descript car il n a plus de raison d être. Pour être complet, il convient également de réexaminer attributs use et encodingstyle dans les liaisons : ils sont eux aussi soumis à des recom Les particulières messages du WS-I, lesquelles sont présentées plus loin dans ce chapitre. - Représentent une unité logique d information Les messages - Constitués d un ensemble de parties logiques (part) Un - message chacune représente de ces parties une unité est associée logique d échange au type de d information. son contenu, lequel Il est constitué est défini d un e parties dans logiques l élément (parts). typeschacune de ces parties est associée au type de son contenu, lequ dans l élément types. - Éléments message situés directement sous l élément racine du doc WSDL Les éléments message sont situés directement sous l élément racine du document WSDL <definitions... > <message name="nmtoken"> <part name="nmtoken" element="qname"? type="qname"?/> </message> </definitions> - Nom de message unique dans l ensemble des noms de messages du doc - attribut name : unique parmi les parties du message - attribut element : référence un élément de schéma XML par un nom qualifié - attribut type : référence un simpletype ou complextype de schéma XML 12
- Une opération est un ensemble de messages qui constitue une unité d interaction (transmission primitive) avec le service Web - 4 types d opérations sont prises en charge (voir cours préc.) : - interaction sens unique - requête/réponse - demande de réponse - notification 13 literal dans une liaison SOAP, alors la description WSDL doit utiliser l attribut element pour définir l de l élément message. Recommandation R2205 : lorsque, dans une description WSDL, l attribut element est utilisé pour d partie d un élément message, la valeur de l attribut element doit référencer une définition d élément. Éléments de définition (3/6) Les types de ports Les types de ports - Définissent un ensemble d opérations abstraites et indiquent les messages Le impliqué type de dans port définit ces opérations un ensemble d opérations abstraites et indique les messages impli ces opérations. Cet élément se situe comme suit dans la hiérarchie du document WSDL : - Tout comme les autres éléments, il se situe après la racine du doc WSDL <definitions... > <porttype name="nmtoken"> <operation name="nmtoken"... /> </porttype> </definitions>
élément part dans l élément message qui contient le résultat de l appel. Cet élément part peut cependant représenter un type complexe. Éléments de définition (4/6) Les liaisons Les liaisons - Décrivent la relation entre les opérations définies dans un type de port et les protocoles et formats de message qui prendront en charge les échanges représentée ainsi définis de la manière suivante : La description de la relation entre les opérations définies dans un type de port et les protocoles e formats de message qui prendront en charge les échanges ainsi définis est effectuée par l intermé diaire de la définition d éléments de liaison. La structure générique de ces éléments de liaison es <binding name="nmtoken" type="qname"> <operation name="nmtoken"> <input name="nmtoken"> </input> <output name="nmtoken"> </output> <fault name="nmtoken"> </fault> </operation> </binding> Comme - Selon nous le type l avons d interaction, vu précédemment, input/output/fault les éléments input sont et présents output sont ou non présents ou non selon l type - Unicité d interaction du nom mis obligatoire en œuvre par (plusieurs l opération. liaisons De même, possibles les éléments pour un fault doc WSDL) éventuels ne son présents que pour les interactions de type requête/réponse ou demande de réponse. Le documen WSDL - Attention peut spécifier : différentes liaisons : aussi l unicité du nom de liaison est-elle obligatoire. L lien -avec une le type liaison de port ne peut pris en mettre charge en par oeuvre la liaison qu un est indiqué et un seul via l attribut protocole type de la liaison. Le nommage - aucune d une URI opération ne doit n est être référencée pas forcément dans unique. une Aussi liaison faut-il préciser également le nom d 14
<service name="googlesearchservice"> 15 Recommandation R2401 : une description WSDL ne doit utiliser que la liaison SOAP telle qu elle es spécification WSDL 1.1 à la section 3 «SOAP Binding» (voir http://www.w3.org/tr/2001/note-wsdl-200 Lorsque la version 1.2 de WSDL sera disponible et implémentée, elle ne pourra être utilisée dans version du profil. Dans cette optique, une nouvelle version du profil sera vraisemblablement introd Éléments de définition (5/6) Les Les ports ports - Un port définit un nœud noeud de de communication, et et donc donc un un URI, URI, pour pour une une liaison liaison partic document particulière WSDL, cet élément se décrit ainsi : <port name="nmtoken" binding="qname"> </port> La portée du nommage d un port s étend à l ensemble du document WSDL dans leq La liaison associée à ce port est repérée via l attribut binding du port. Des éléments - portée du nommage d un port : ensemble du doc WSDL - binding : définit la liaison associée à ce port peuvent être ajoutés sous l élément port. - À cet élément s applique 2 règles importantes : À - cet un élément port ne doit s appliquent pas comporter également plus d un deux URI règles importantes : - un aucune port ne information doit pas comporter de liaison autre plus d un qu une URI adresse ; ne peut être fournie aucune information de liaison autre qu une adresse ne peut être fournie. Dans notre exemple, le service Web nommé GoogleSearchService propose un port n SearchPort, associé à la liaison nommée GoogleSearchBinding. Ce port correspond a Internet http://api.google.com/search/beta2 offert par Google :
</port> </service> Éléments de définition (6/6) Les services Un service est matérialisé dans un document WSDL de la manière suivante : Les services <service name="nmtoken"> <port... /> </service> - Portée du nommage du service : tout le document Comme pour le port, la portée du nommage d un service s étend à l ensemble du docume - Un service peut regrouper plusieurs ports - mais ne peuvent communiquer entre eux - un même type de port peut être desservi par différents ports si URI différente ou utilisation de liaisons différentes - ex : même service via Intranet ou Internet selon position application client - Mise en oeuvre de ports alternatifs - ex : visiteur médical utilisant un système de prise de commandes soit dans les locaux de l entreprise, soit chez le client ou directement de chez lui => possible d utiliser une seule application : il suffit que cette application soit capable de sélectionner le port adapté en fonction du contexte - Internet : protocole SOAP ou HTTP GET/POST - Intranet : Java/RMI ou Corba/IIOP 16
e Page 304 Mardi, 24. juin 2003 2:19 14 DEUXIÈME PARTIE Exemple document WSDL <?xml version="1.0"?> <!-- WSDL description of the Google Web APIs. Technologies The Google des Web services APIs are Web in beta release. All interfaces are subject Service change Web proposé as we refine par Google and extend (ex. de our 2002) APIs. Please see the terms of use DEUXIÈME PARTIE - Définitions for more et espaces information. de noms --> utilisés par le service Définitions et espaces de noms utilisés par le service : <?xml version="1.0"?> <definitions <!-- WSDL description name="urn:googlesearch" of the Web APIs. The Google targetnamespace="urn:googlesearch" Web APIs are in beta release. All interfaces are subj change as xmlns:typens="urn:googlesearch" we refine and extend our APIs. Please see the terms of for more xmlns:xsd="http://www.w3.org/2001/xmlschema" information. --> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" Définitions et espaces xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" de noms utilisés par le service : xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" <definitions xmlns="http://schemas.xmlsoap.org/wsdl/"> name="urn:googlesearch" targetnamespace="urn:googlesearch" Définition des types xmlns:typens="urn:googlesearch" de données utilisées dans les messages : <!-- Types for xmlns:xsd="http://www.w3.org/2001/xmlschema" search - result elements, directory categories --> <types> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" <xsd:schema xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/ xmlns="http://www.w3.org/2001/xmlschema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 17
targetnamespace="urn:googlesearch" xmlns:typens="urn:googlesearch" xmlns:xsd="http://www.w3.org/2001/xmlschema" Exemple xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" document WSDL xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" </xsd:complextype> xmlns="http://schemas.xmlsoap.org/wsdl/"> <xsd:complextype name="resultelementarray"> <xsd:complexcontent> <!-- Types for <xsd:restriction search - result base="soapenc:array"> elements, directory categories --> <types> <xsd:attribute ref="soapenc:arraytype" wsdl:arraytype="typens:resultelement[]"/> <xsd:schema xmlns="http://www.w3.org/2001/xmlschema" </xsd:restriction> targetnamespace="urn:googlesearch"> </xsd:complexcontent> <xsd:complextype </xsd:complextype> name="googlesearchresult"> <xsd:complextype <xsd:all> name="directorycategoryarray"> <xsd:complexcontent> <xsd:element name="documentfiltering" type="xsd:boolean"/> <xsd:element <xsd:restriction name="searchcomments" base="soapenc:array"> type="xsd:string"/> <xsd:element <xsd:attribute name="estimatedtotalresultscount" ref="soapenc:arraytype" type="xsd:int"/> <xsd:element wsdl:arraytype="typens:directorycategory[]"/> name="estimateisexact" type="xsd:boolean"/> <xsd:element </xsd:restriction> name="resultelements" type="typens:resultelementarray"/> </xsd:complexcontent> <xsd:element name="searchquery" type="xsd:string"/> </xsd:complextype> <xsd:element name="startindex" type="xsd:int"/> <xsd:element name="endindex" type="xsd:int"/> <xsd:complextype name="directorycategory"> <xsd:element name="searchtips" type="xsd:string"/> <xsd:all> <xsd:element name="directorycategories" type="typens:directorycategory <xsd:element name="fullviewablename" Array"/> type="xsd:string"/> <xsd:element name="searchtime" name="specialencoding" type="xsd:double"/> type="xsd:string"/> </xsd:all> </xsd:complextype> </xsd:schema> <xsd:complextype name="resultelement"> </types> <xsd:all> <xsd:element name="summary" type="xsd:string"/> -Définition Définition des types des de types données de utilisées données dans les utilisées messages par : les messages (extrait) 18 Décrire un service avec WSDL CHAPITRE 10 30
306 <xsd:element name="fullviewablename" <xsd:element name="specialencoding" </xsd:all> Exemple </xsd:complextype> document WSDL </xsd:schema> </types> Définition - des messages des messages mis en œuvre dans mis les en opérations oeuvres : dans les opérations 19 type="xsd:string"/> type="xsd:string"/> <!-- Messages for Google Web APIs - cached page, search, spelling. --> <message name="dogetcachedpage"> <part name="key" type="xsd:string"/> <part name="url" type="xsd:string"/> </message> <message name="dogetcachedpageresponse"> <part name="return" type="xsd:base64binary"/> </message> <message name="dospellingsuggestion"> <part name="key" type="xsd:string"/> <part name="phrase" type="xsd:string"/> </message> <message name="dospellingsuggestionresponse"> <part name="return" type="xsd:string"/> </message> Technologies <message name="dogooglesearch"> des services Web <part name="key" type="xsd:string"/> DEUXIÈME <part PARTIE name="q" type="xsd:string"/> <part name="start" type="xsd:int"/> <part name="maxresults" type="xsd:int"/> <part <part name="filter" name="lr" type="xsd:boolean"/> <part name="restrict" name="ie" type="xsd:string"/> <part name="safesearch" type="xsd:boolean"/> ard.livre Page 306 Mardi, 24. juin 2003 2:19 14 type="xsd:string"/> type="xsd:string"/> <part name="oe" type="xsd:string"/> </message> <message name="dogooglesearchresponse"> <part name="return" type="typens:googlesearchresult"/> </message>
</message> <message name="dogooglesearchresponse"> Exemple <part name="return" document type="typens:googlesearchresult"/> WSDL </message> Définition de l unique type de port et des opérations associées : - Définition de l unique type de port et des opérations associées <!-- Port for Google Web APIs, "GoogleSearch" --> <porttype name="googlesearchport"> <operation name="dogetcachedpage"> <input message="typens:dogetcachedpage"/> <output message="typens:dogetcachedpageresponse"/> </operation> <operation name="dospellingsuggestion"> <input message="typens:dospellingsuggestion"/> <output message="typens:dospellingsuggestionresponse"/> </operation> <operation name="dogooglesearch"> <input message="typens:dogooglesearch"/> <output message="typens:dogooglesearchresponse"/> </operation> </porttype> Définition de l unique liaison vers un protocole de transport, SOAP dans le cas pré <!-- Binding for Google Web APIs - RPC, SOAP over HTTP --> 20
</operation> <operation name="dogooglesearch"> <input message="typens:dogooglesearch"/> Exemple document WSDL <output message="typens:dogooglesearchresponse"/> </input> </operation> </porttype> <output> - Définition de <soap:body l unique use="encoded" liaison vers un protocole de transport, ici SOAP (extrait) Définition : de l unique liaison namespace="urn:googlesearch" vers un protocole de transport, SOAP dans le cas présent : <!-- Binding for Google encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> Web APIs - RPC, SOAP over HTTP --> <binding </output> name="googlesearchbinding" type="typens:googlesearchport"> <soap:binding </operation> style="rpc" <operation name="dogooglesearch"> transport="http://schemas.xmlsoap.org/soap/http"/> <operation <soap:operation name="dogetcachedpage"> soapaction="urn:googlesearchaction"/> <soap:operation <input> soapaction="urn:googlesearchaction"/> <input> <soap:body use="encoded" <soap:body use="encoded" namespace="urn:googlesearch" namespace="urn:googlesearch" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </input> <output> <output> <soap:body <soap:body use="encoded" use="encoded" namespace="urn:googlesearch" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <operation name="dospellingsuggestion"> <soap:operation soapaction="urn:googlesearchaction"/> <input> <soap:body use="encoded" 21 Définition du service et de son point d accès correspondant : CHAPITRE
22 <soap:body use="encoded" namespace="urn:googlesearch" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" Exemple document WSDL </output> </operation> </binding> - Définition du service et de son point d accès correspondant : Définition du service et de son point d accès correspondant : <!-- Endpoint for Google Web APIs --> <service name="googlesearchservice"> <port name="googlesearchport" binding="typens:googlesearchbinding"> <soap:address location="http://api.google.com/search/beta2"/> </port> </service> </definitions> Noms et liens entre fragments de documents À l élément racine definitions du document WSDL peut être associé un espace de optionnel via l attribut targetnamespace. Dans notre exemple, cet attribut est urn:googlesearch. Les générateurs de documents WSDL le fixent généralement à débute par la constante http://tempuri.org/ par défaut. Le concepteur du document doit en pour le rendre particulier à ce document. Cet attribut est de type URI et doit être obligat
320 Liaisons Technologies des services standards Web DEUXIÈME PARTIE WSDL décrit 2 liaisons standards à des protocoles de transport - liaison avec protocole SOAP (étudié) - liaison avec protocole HTTP GET/POST (non étudié) La liaison décrit comment sont associés ces protocoles et formats de message aux abstractions q sont les messages, les opérations et les types de port que nous venons d étudier. L utilisation de c éléments d extensibilité dans le cadre des liaisons n est pas exclusive (extension possible dans cadre de la gestion de la qualité de service, de la coordination et la corrélation de messages, la gestion de transactions ). Les différents points d accroche des éléments d extensibilité dans structure d un document WSDL sont prévus par la spécification (voir tableau de la spécificatio La liaison décrit comment sont associés ces protocoles et formats de message http://www.w3.org/tr/2001/note-wsdl-20010315#a3). aux abstractions que sont les messages, les opérations et les types de port que nous venons de voir - les éléments d extensibilité utilisés pour décrire ces liaisons sont spécifiques à chaque technologie liée Les éléments d extensibilité utilisés pour décrire ces liaisons sont spécifiques à chaque technolog liée. Ils sont rattachés à un espace de noms distinct de celui du document. Un élément d extensibil n est par défaut pas obligatoire dans le cadre d une communication. Dans le cas contraire, cela d être précisé via le booléen wsdl:required. - ils sont rattachés à un espace de noms distinct de celui du document Par exemple, le fragment d élément de liaison suivant exprime le fait que la présence d un en-t - si SOAP wsdl:required, spécifique est élément obligatoire obligatoire dans le cadre particulier de la communication de ce message (Cal - ex. backheader) fragment : élément de liaison exprimant présence en-tête SOAP obligatoire : <input> <soap:header wsdl:required="true" message="tns:callbackheader" part="callbackheader" use="literal"/> <soap:body use="literal"/> </input> 23
SOAP vont être décrits dans les sections qui suivent. 24 Liaison La liaison avec avec le protocole SOAP protocole SOAP Afin d illustrer le fonctionnement concret de la liaison avec le protocole SOAP, nous a œuvre le modèle du service de Google et présenter le résultat de l interaction avec.google.com/search/beta2. L exemple ci-après représente le résultat de l utilisation de Ex. concret : mise en oeuvre du modèle du service de Google niveau du protocole HTTP. L interaction a consisté à émettre une requête dogoogle => résultat de l utilisation de ce service au niveau du protocole HTTP chaîne de caractères Web Services passée en paramètre. Le nombre maximal d éléme -renvoyé émission a été requête volontairement dogooglesearch réduit à 1. avec La requête String «Web est émise Services» à partir en du param programme cli -fourni réception dans le nb kit élément de Google. max : 1 - Texte Voici le (formaté) texte (formaté) du message du message SOAP SOAP de requête de requête émis émis vers vers le serveur le serveur Google de Google : POST /search/beta2 HTTP/1.0 Host: api.google.com Content-Type: text/xml; charset=utf-8 Content-Length: 868 SOAPAction: "urn:googlesearchaction" <?xml version='1.0' encoding='utf-8'?> <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/xmlschema-instance" xmlns:xsd="http://www.w3.org/1999/xmlschema"> <SOAP-ENV:Body> - (suite diapo suivante)
ivre Page 321 Mardi, 24. juin 2003 2:19 14 Liaison avec protocole SOAP Décrire un service avec WSD CHAPITRE <ns1:dogooglesearch xmlns:ns1="urn:googlesearch" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <key xsi:type="xsd:string">mykey</key> <q xsi:type="xsd:string">web Services</q> <start xsi:type="xsd:int">0</start> <maxresults xsi:type="xsd:int">1</maxresults> <filter xsi:type="xsd:boolean">true</filter> <restrict xsi:type="xsd:string"></restrict> <safesearch xsi:type="xsd:boolean">false</safesearch> <lr xsi:type="xsd:string"></lr> <ie xsi:type="xsd:string">latin1</ie> <oe xsi:type="xsd:string">latin1</oe> </ns1:dogooglesearch> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Et voici le texte (formaté) du message SOAP de réponse renvoyé par le serveur de Go requête précédente : HTTP/1.1 200 OK 25
26 <lr xsi:type="xsd:string"></lr> <ie xsi:type="xsd:string">latin1</ie> <oe xsi:type="xsd:string">latin1</oe> Liaison avec protocole SOAP </ns1:dogooglesearch> </SOAP-ENV:Body> </SOAP-ENV:Envelope> - Texte (formaté) du message SOAP de réponse par le serveur Google à la requête précédente : Et voici le texte (formaté) du message SOAP de réponse renvoyé par le serv requête précédente : HTTP/1.1 200 OK Date: Tue, 21 May 2002 09:37:05 GMT Server: e h c a p a Content-Length: 3806 Connection: close Content-Type: text/xml; charset=utf-8 <?xml version='1.0' encoding='utf-8'?> <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/xmlschema-instance" xmlns:xsd="http://www.w3.org/1999/xmlschema"> <SOAP-ENV:Body> Voici maintenant le message de réponse dogooglesearchresponse au message de req Cette réponse comprend un type de données complexe GoogleSearchResult.
27 <?xml version='1.0' encoding='utf-8'?> <SOAP-ENV:Envelope Liaison avec protocole SOAP xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/xmlschema-instance" xmlns:xsd="http://www.w3.org/1999/xmlschema"> <SOAP-ENV:Body> Voici - maintenant Message le de message réponse de réponse dogooglesearchresponse dogooglesearchresponse au au message message de de requête requête dogooglesearch Cette réponse dogooglesearch comprend un : type de données complexe GoogleSearchResult. <ns1:dogooglesearchresponse xmlns:ns1="urn:googlesearch" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="ns1:googlesearchresult"> <documentfiltering xsi:type="xsd:boolean">false</documentfiltering> <estimatedtotalresultscount xsi:type="xsd:int">5480000</estimatedtotalresultscount> <directorycategories xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:array" ns2:arraytype="ns1:directorycategory[1]"> <item xsi:type="ns1:directorycategory"> <specialencoding xsi:type="xsd:string"></specialencoding> <fullviewablenamexsi:type="xsd:string">top/computers/programming /Internet/Web_Services </fullviewablename> </item> </directorycategories> <searchtime xsi:type="xsd:double">0.061899</searchtime>
2 Technologies des services Web DEUXIÈME PARTIE 322 Liaison avec protocole SOAP Technologies des services Web Voici DEUXIÈME le tableau PARTIE d éléments du résultat de la recherche. Ce tableau est bien limité à un é type de données complexe ResultElement) comme demandé dans les critères de la rech moteur Voici le de tableau Google. d éléments du résultat de la recherche. Ce tableau est bien limité à un élément (du - Tableau d éléments du résultat de la recherche (bien limité à 1) : <resultelements <resultelements xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:array" xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" ns3:arraytype="ns1:resultelement[1]"> type de données complexe ResultElement) comme demandé dans les critères de la recherche sur le moteur de Google. xsi:type="ns3:array" ns3:arraytype="ns1:resultelement[1]"> Premier élément du tableau (item de coordonnée 0 du tableau ResultElement) : - Premier élément du tableau (suite diapo suivante) : <item <item xsi:type="ns1:resultelement"> <cachedsize xsi:type="xsd:string">14k</cachedsize> <hostname xsi:type="xsd:string"></hostname> <snippet <hostname xsi:type="xsd:string"> xsi:type="xsd:string"></hostname> <b>...</b> <snippet xsi:type="xsd:string"> <b>web</b> <b>...</b> <b>services</b> Activity. <b>web</b> <b>...</b> Working <b>services</b> Drafts In Progress. Drafts produced Activity. by the <b>web</b> <b>...</b> <b>services</b><br> Working Drafts In Progress. Drafts produced by the Architecture Working Group. <b>web</b> <b>web</b> <b>services</b> Architecture <b>services</b><br> Requirements. <b>...</b> Architecture Working Group. </snippet> <b>web</b> <b>services</b> Premier élément du tableau (item de coordonnée 0 du tableau ResultElement) : <directorycategory xsi:type="ns1:directorycategory"> 28
<b>web</b> <b>services</b><br> Architecture Working Group. <b>web</b> <b>services</b> Liaison avec protocole SOAP Architecture Requirements. <b>...</b> </snippet> <directorycategory xsi:type="ns1:directorycategory"> <specialencoding xsi:type="xsd:string"></specialencoding> <fullviewablename xsi:type="xsd:string"></fullviewablename> </directorycategory> <relatedinformationpresent xsi:type="xsd:boolean">true </relatedinformationpresent> <directorytitle xsi:type="xsd:string"></directorytitle> <summary xsi:type="xsd:string"></summary> <URL xsi:type="xsd:string">http://www.w3.org/2002/ws/</url> <title xsi:type="xsd:string" ><b>web</b> <b>services</b></title> </item> </resultelements> <endindex xsi:type="xsd:int">2</endindex> <searchtips xsi:type="xsd:string"></searchtips> <searchcomments xsi:type="xsd:string"></searchcomments> <startindex xsi:type="xsd:int">1</startindex> <estimateisexact xsi:type="xsd:boolean">false</estimateisexact> <searchquery xsi:type="xsd:string">web Services</searchQuery> </return> </ns1:dogooglesearchresponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 29