Cours 5 : Les Web Services et WSDL Mars 2011 - Version 1.0 - Les technologies XML Cours 5 : Les Web Services et WSDL Mars 2011 - Version 1.0 -
Pour remédier à cet état de fait il a été normaliser un langage: WSDL Web Services – WSDL Comme on l’a vu avec XML RPC il est souvent difficile rien qu’à lecture d’un document XML : De déterminer les paramètres à lui fournir De connaître la structure du document en retour De connaître les éventuels code erreur D’anticiper les traitements effectués. Pour remédier à cet état de fait il a été normaliser un langage: WSDL
WSDL 1 est prévu pour fonctionner avec SOAP 1.1 Web Services – WSDL WSDL : Web Service Description Language Langage XML dédié à la description de tous les éléments nécessaires pour interagir avec un service réseau (ou service web). W3C WSDL 1 : http://www.w3.org/TR/wsdl WSDL 2 : http://www.w3.org/TR/2007/REC-wsdl20-20070626/ WSDL 1 est prévu pour fonctionner avec SOAP 1.1 WSDL 2 est prévu pour fonctionner avec SOAP 1.2
Web Services – WSDL un service réseau (service Web), WSDL est un langage XML qui permet de décrire: un service réseau (service Web), et comment l’ invoquer (localisation, paramètre, structure de retour, ..) Objectif : Décrire les services comme un ensemble d’opérations et de messages abstraits reliés à des protocoles et des serveurs réseaux Cet objectif se rapproche d’IDL pour CORBA. WSDL standardise les schémas XML utilisés pour établir une connexion entre émetteurs et récepteurs. Par conséquent, il est possible d’automatiser certaines opérations nécessaires à l’appel
Web Services – WSDL Un document WSDL est donc associé à un Web Service afin d’en décrire l’ensemble des éléments qu’il expose vers le monde extérieur : types de données (XSD) types de messages liaisons avec le protocole de transport et le format des messages (SOAP 1.X, HTTP Get et HTTP Post, ou encore MIME) Les services sont vus comme des ensembles de ports réseaux
Web Services – WSDL <types> <message> <portType> Contient les définition de types utilisant un système de typage (comme XSD). <message> Décrit les noms et types d’un ensemble de champs à transmettre (Paramêtres d’une invocation, valeur du retour, …) <portType> Décrit un ensemble d’opérations. Chaque opération a zero ou un message en entrée, zero ou plusieurs message de sortie ou de fautes <binding> Spécifie une liaison d’un <porttype> à un protocole concret (SOAP1.1, HTTP1.1, MIME, …). Un porttype peut avoir plusieurs liaisons ! <port> Spécifie un point d’entrée (endpoint) comme la combinaison d’un <binding> et d’une adresse réseau. <service> Une collection de points d’entrée (endpoint) relatifs.
Web Services – WSDL L’élément <types> contient les définition de types utilisant un système de typage (comme XSD). Exemple <types> <xsd:schema targetNamespace="http://exemple.com/personne.xsd" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:complexType name=“Personne”> <xsd:element name=“Nom” type=“xsd:string”> <xsd:element name=“Prenom” type=“xsd:string”> <xsd:element name=“Age” type=“xsd:float”> </complexType> </types>
Web Services – WSDL L’élément <message> décrit les noms et types d’un ensemble de champs à transmettre (Paramètres d’ invocation, valeur du retour, …) Exemple <message name="GetPersonne"> <part name="body" type="per:Personne"/> </message> <message name="AddPersonne"> <part name="Nom" type="xsd:string"/> <part name="Prenom" type="xsd:string"/> <part name="Age" type="xsd:float"/>
Web Services – WSDL L’élément <portType> décrit un ensemble d’opérations. Plusieurs types d’opérations One-way : Le point d’entrée reçoit un message (<input>). Request-response : Le point d’entrée reçoit un message (<input>) et retourne un message corrélé (<output>) ou un ou plusieurs messages d’erreur (<fault>). Solicit-response : Le point d’entrée envoie un message (<ouput>) et recoit un message corrélé (<input>) ou un ou plusieurs messages d’erreur (<fault>). Notification : Le point d’entrée envoie un message de notification (<ouput>) Paramètres Les champs des messages constituent les paramètres (in,out, inout) des opérations
Web Services – WSDL Element <portType> exemple : <portType name="CarnetAdresse"> <operation name="AddPersonne"> <input message="AddPersonneRequest"/> </operation> <operation name="GetPersonneParNom"> <input message="GetPersonneParNom Request"/> <output message=" GetPersonneParNom Response"/> </portType>
Web Services – WSDL L’élément <binding> spécifie La liaison d’un <portType> à un protocole concret (SOAP1.1, HTTP GET/POST, MIME, …). Un <portType> peut avoir plusieurs <binding> pour répondre à plusieurs protocoles. La balise suivante : <soap:binding transport="uri" style="soap_style" /> précise que le binding est de type SOAP. La balise <transport> définit le type de transport http://schemas.xmlsoap.org/soap/http pour utiliser SOAP/HTTP
Web Services – WSDL La balise <style> définit la façon dont sont créer les messages SOAP de toutes les opérations rpc : Encodage RPC défini par SOAP RPC document : Encodage sous forme d’élément XML c’est ce mode qui est utilisé par défaut. Pour chaque <operation> de <portType> : il faut préciser l’URI de l’opération : <soapAction> Il est aussi possible de repréciser la façon dont sont créés les messages SOAP : <style> Pour chaque message de chaque opération, il faut définir comment sera créé le message SOAP
Web Services – WSDL Exemple de binding sur SOAP et HTTP <binding type="CarnetAdresseBinding"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> <operation name="GetPersonneParNomOpe"> <soap:operation soapAction="http://exemple.com/ GetPersonneParNom " /> <input> <soap:body use="encoded" encodingStyle="schemas.xmlsoap.org/soap/encoding"/> </input> <output> </output> </operation> </binding>
L’élément <port> est associé à un <portType> Web Services – WSDL L’élément <port> est associé à un <portType> Dans le cadre de SOAP, un élément <port> à une adresse (qui correspond à l’adresse http) Exemple : <port name="CarnetAdressePort" binding="per:CarnetAdresseBinding "> <soap:address location="http://example.com/GetPersonneParNom"/> </port>
L’élément <service> définit l’ensemble des points d’entrées Web Services – WSDL L’élément <service> définit l’ensemble des points d’entrées Exemple : <service name=“CarnetAdresseService"> <port name=" CarnetAdressePort " binding="per:PersonnesBinding"> <soap:address location="http://example.com/GetPersonneParNom"/> </port> </service>
Web Services – WSDL <?xml version="1.0" ?> <definitions name="CarnetAdresse" targetNamespace="http://exemple.com/carnetAdresse.wsdl" xmlns:per="http://example.com/carnetAdresse.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <xsd:schema targetNamespace="http://exemple.com/personne.xsd" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:complexType name=“Personne”> <xsd:element name=“Nom” type=“xsd:string”> <xsd:element name=“Prenom” type=“xsd:string”> <xsd:element name=“Age” type=“xsd:float”> </complexType> </types> <message name="GetPersonne"> <part name="body" type="Personne"/> </message> <message name="AddPersonne"> <part name="Nom" type="xsd:string"/> <part name="Prenom" type="xsd:string"/> <part name="Age" type="xsd:float"/> <portType name="CarnetAdresse"> <operation name="AddPersonne"> <input message="AddPersonneRequest"/> </operation> <operation name="GetPersonneParNom"> <input message="GetPersonneParNom Request"/> <output message=" GetPersonneParNom Response"/> </portType>
Web Services – WSDL <binding type="CarnetAdresseBinding"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> <operation name="GetPersonneParNomOpe"> <soap:operation soapAction="http://exemple.com/ GetPersonneParNom " /> <input> <soap:body use="encoded" encodingStyle="schemas.xmlsoap.org/soap/encoding"/> </input> <output> </output> </operation> </binding> <service name=“CarnetAdresseService"> <port name=" CarnetAdressePort " binding="per:PersonnesBinding"> <soap:address location="http://example.com/GetPersonneParNom"/> </port> </service> </definitions>