Upload
albert-astier
View
114
Download
0
Embed Size (px)
Citation preview
1
Les technologies XMLLes technologies XML
Cours 5 : Cours 5 : Les Web Services et WSDLLes Web Services et WSDL
Mars 2011 Mars 2011
- Version 1.0 - - Version 1.0 -
2
Web Services – 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
3
Web Services – WSDLWeb Services – WSDL
WSDL : Web Service Description Language WSDL : Web Service Description Language Langage Langage XML dédié à la description de tous les éléments XML dédié à la description de tous les éléments nécessaires pour interagir avec un service réseau (ou nécessaires pour interagir avec un service réseau (ou service web).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
4
Web Services – WSDLWeb Services – WSDL
WSDL est un langage XML qui permet de décrire:WSDL est un langage XML qui permet de décrire:un service réseau (service Web),un service réseau (service Web),et comment l’ invoquer (localisation, paramètre, structure de et comment l’ invoquer (localisation, paramètre, structure de retour, ..)retour, ..)
Objectif :Objectif :Décrire les services comme un ensemble d’opérations et de Décrire les services comme un ensemble d’opérations et de messages abstraits reliés à des protocoles et des serveurs messages abstraits reliés à des protocoles et des serveurs réseauxréseauxCet objectif se rapproche d’IDL pour CORBA.Cet objectif se rapproche d’IDL pour CORBA.
WSDL standardise les schémas XML utilisés pour établir une WSDL standardise les schémas XML utilisés pour établir une connexion entre émetteurs et récepteurs. Par conséquent, il est connexion entre émetteurs et récepteurs. Par conséquent, il est possible d’automatiser certaines opérations nécessaires à l’appelpossible d’automatiser certaines opérations nécessaires à l’appel
5
Web Services – WSDLWeb Services – WSDL
Un document WSDL est donc associé à un Web Un document WSDL est donc associé à un Web Service afin d’en décrire l’ensemble des Service afin d’en décrire l’ensemble des éléments qu’il expose vers le monde extérieur :éléments qu’il expose vers le monde extérieur :
types de données (XSD)types de données (XSD)
types de messagestypes de messages
liaisons avec le protocole de transport et le format des liaisons avec le protocole de transport et le format des messages (SOAP 1.X, HTTP Get et HTTP Post, ou encore messages (SOAP 1.X, HTTP Get et HTTP Post, ou encore MIME)MIME)
Les services sont vus comme des ensembles de ports Les services sont vus comme des ensembles de ports réseauxréseaux
6
Web Services – WSDLWeb Services – WSDL
<types>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.
7
Web Services – WSDLWeb 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: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></complexType></types>
8
Web Services – WSDLWeb 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"/>
</message>
9
Web Services – WSDLWeb Services – WSDL
L’élément <portType> décrit un ensemble d’opérations.
Plusieurs types d’opérationsOne-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ètresLes champs des messages constituent les paramètres (in,out, inout) des opérations
10
Web Services – WSDLWeb Services – WSDL
Element <portType> exemple :Element <portType> exemple :
<portType name="CarnetAdresse"><portType name="CarnetAdresse">
<operation name="AddPersonne"><operation name="AddPersonne">
<input message="AddPersonneRequest"/><input message="AddPersonneRequest"/>
</operation></operation>
<operation name="GetPersonneParNom"><operation name="GetPersonneParNom">
<input<input message="GetPersonneParNom message="GetPersonneParNom Request"/>Request"/>
<output message=" GetPersonneParNom <output message=" GetPersonneParNom Response"/>Response"/>
</operation></operation>
</portType></portType>
11
Web Services – WSDLWeb 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
12
Web Services – WSDLWeb 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> :Pour chaque <operation> de <portType> :
il faut préciser l’URI de l’opération : <soapAction>il faut préciser l’URI de l’opération : <soapAction>
Il est aussi possible de repréciser la façon dont sont Il est aussi possible de repréciser la façon dont sont créés les messages SOAP : <style>créés les messages SOAP : <style>
Pour chaque message de chaque opération, il faut définir Pour chaque message de chaque opération, il faut définir comment sera créé le message SOAPcomment sera créé le message SOAP
13
Web Services – WSDLWeb Services – WSDL
Exemple de binding sur SOAP et HTTP
<binding type="<binding type="CarnetAdresseCarnetAdresseBinding">Binding"><soap:binding <soap:binding
transport="http://schemas.xmlsoap.org/soap/http"transport="http://schemas.xmlsoap.org/soap/http"style="rpc" />style="rpc" />
<operation name="<operation name="GetPersonneParNomOpeGetPersonneParNomOpe">"><soap:operation soapAction="http://exemple.com/ <soap:operation soapAction="http://exemple.com/ GetPersonneParNomGetPersonneParNom " />" />
<input><input><soap:body use="encoded" <soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>encodingStyle="schemas.xmlsoap.org/soap/encoding"/>
</input></input> <output><output>
<soap:body use="encoded" <soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>encodingStyle="schemas.xmlsoap.org/soap/encoding"/> </output></output>
</operation></operation></binding></binding>
14
Web Services – WSDLWeb Services – WSDL
L’élément <port> est associé à un <portType>L’élément <port> est associé à un <portType>
Dans le cadre de SOAP, un élément <port> à Dans le cadre de SOAP, un élément <port> à une adresse (qui correspond à l’adresse http)une adresse (qui correspond à l’adresse http)
Exemple : Exemple : <port name="CarnetAdressePort" <port name="CarnetAdressePort" binding="per:CarnetAdressebinding="per:CarnetAdresseBindingBinding "> ">
<soap:address <soap:address location="http://example.com/GetPersonneParNlocation="http://example.com/GetPersonneParNom"/>om"/> </port></port>
15
Web Services – WSDLWeb Services – WSDL
L’élément <service> définit l’ensemble des L’élément <service> définit l’ensemble des points d’entréespoints d’entrées
Exemple :Exemple :<<serviceservice name=“CarnetAdresseService"> name=“CarnetAdresseService">
<port name=" <port name=" CarnetAdressePortCarnetAdressePort " " binding="per:PersonnesBinding"> binding="per:PersonnesBinding">
<soap:address <soap:address location="http://example.com/GetPersonneParNom"/>location="http://example.com/GetPersonneParNom"/> </port></port>
<</service/service>>
16
Web Services – WSDLWeb Services – WSDL
<?xml version="1.0" ?><definitions name="CarnetAdresse" targetNamespace="http://exemple.com/carnetAdresse.wsdl" xmlns:per="http://example.com/carnetAdresse.wsdl" <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/"> 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: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></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"/>
</message><portType name="CarnetAdresse"><portType name="CarnetAdresse">
<operation name="AddPersonne"><operation name="AddPersonne"><input message="AddPersonneRequest"/><input message="AddPersonneRequest"/></operation></operation>
<operation name="GetPersonneParNom"><operation name="GetPersonneParNom"><input<input message="GetPersonneParNom Request"/>message="GetPersonneParNom Request"/><output message=" GetPersonneParNom Response"/><output message=" GetPersonneParNom Response"/></operation></operation>
</portType></portType>
17
Web Services – WSDLWeb Services – WSDL
<binding type="<binding type="CarnetAdresseCarnetAdresseBinding">Binding"><soap:binding <soap:binding
transport="http://schemas.xmlsoap.org/soap/http"transport="http://schemas.xmlsoap.org/soap/http"style="rpc" />style="rpc" />
<operation name="<operation name="GetPersonneParNomOpeGetPersonneParNomOpe">"><soap:operation soapAction="http://exemple.com/ <soap:operation soapAction="http://exemple.com/ GetPersonneParNomGetPersonneParNom " /> " />
<input><input><soap:body use="encoded" <soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>encodingStyle="schemas.xmlsoap.org/soap/encoding"/> </input></input> <output><output>
<soap:body use="encoded" <soap:body use="encoded" encodingStyle="schemas.xmlsoap.org/soap/encoding"/>encodingStyle="schemas.xmlsoap.org/soap/encoding"/>
</output></output></operation></operation>
</binding></binding><service name=“CarnetAdresseService"><service name=“CarnetAdresseService">
<port name=" CarnetAdressePort " binding="per:PersonnesBinding"> <port name=" CarnetAdressePort " binding="per:PersonnesBinding"> <soap:address location="http://example.com/GetPersonneParNom"/><soap:address location="http://example.com/GetPersonneParNom"/>
</port></port></service></service>
</definitions>