Les services web: vue d'ensemble
1
Les Services Web, c'est quoi?
La technologie des services web affiche les mêmes intentions que les
architectures les plus anciennes en terme d'accès distant, comme les
moniteurs TP.
C'est la possibilité d'invoquer une fonction distante. En l'occurrence,
sur un serveur web distant puisque le protocole de base est HTTP
On dispose d'une infrastructure souple basée sur XML pour les
systèmes distribués hétérogènes
2
Les Services Web, c'est quoi?
Ils sont accessibles via le web par des protocoles bien connus
Ils sont décrits à partir de XML
Ils interagissent via XML
Ils sont localisables à partir de registres
Ils sont entièrement transversaux aux plates-formes et très
faiblement couplés
3
Les Services Web, c'est quoi?
Ils introduisent un nouveau modèle de développement basé sur ce
que l'on appelle les architectures orientées services
Une architecture orientée services se focalise sur une décomposition
plus abstraite dans la résolution des problèmes.
On parle de résolution dirigée par les services.
Un service résout un problème donné
Les services peuvent être combinés pour résoudre des problèmes de
plus en plus complexes
4
Les Services Web, c'est quoi?
Les tâches associées à la manipulation des services web sont :
Interroger un annuaire : qui fournit des choses dont on ne connaît pas forcément
la nature, le rôle ou le contenu
Négocier avec les fournisseurs potentiels de ces choses pour connaître :
Nature exacte du service fourni
Qualité/coût/etc.
Interagir avec le service du fournisseur choisi pour :
Connaître les modalités d'interaction
Introduire le service dans ma chaîne de traitements
Eventuellement composer des services
Eventuellement publier mes propres services
5
Les Services Web, c'est quoi?
L'avantage essentiel des services web concerne le fait que le client
consommateur n'a pas besoin de connaître l'identité du fournisseur du
service
Le client doit simplement exprimer son besoin
Face à un besoin, plusieurs fournisseurs de services peuvent exister
Chacun ayant des caractéristiques de coût, de performance, de fiabilité,
etc.
Le client choisit le fournisseur (le service) correspondant le mieux à ses
besoins.
6
Les usages
Les services web pour représenter des applications sophistiquées
bien délimitées et sans forte interactivité.
Par exemple, une application qui donne les données de la météo
peut être idéalement représentée par un service.
Les services web sont adaptés pour l'assemblage de composants
faiblement couplés.
Ils sont définis de façon indépendante, mais peuvent interagir.
Les services web sont adaptés à la représentation d'application
orientées messages.
Les mécanismes d'invocation asynchrone des applications orientées
messages sont en font de bonnes candidates aux services web
7
Les technologies
Les éléments techniques utilisés sont différents puisque imposés
par le Web et XML
L'architecture des Web Services repose essentiellement sur les
technologies suivantes :
SOAP - Simple Object Access Protocol
Protocole pour la communication entre Web Services
WSDL - Web Service Description Language
Langage de description de l'interface du Web Service
UDDI - Universal Description, Discovery and Integration
Annuaire pour le référencement du Web Service
8
Les technologies
Un Web Service est une application déployée sur un serveur Web
(serveur d'objets).
Supporter des Web Services apporte une interopérabilité
certaine et une grande flexibilité puisqu'il s'agit de coopération
entre objets distants par le biais du Web (TCP/IP - HTTP).
9
Les technologies
Pile de protocole
Document XML décrivant le service afin de
WSDL
rendre la solution des Web Services générique
Protocole basé sur le standard XML pour
SOAP
l'échange de données structurées entre des
applications réseaux
Couche réseau
HTTP
(HyperText Transfer Protocol)
Couches de base permettant l'interopérabilité des Web
Services
10
Les technologies
■Afin d'être découvert, un service doit être publié.
■Au dessus de ces trois couches de base viennent se
greffer deux couches UDDI :
Découverte de services UDDI
Publication de services UDDI
■On publie notre service via le document WSDL auprès
de notre annuaire UDDI.
■Une application cliente peut découvrir et accéder à notre
service lors de son exécution via un annuaire UDDI.
11
Le protocole SOAP
Rôle
Assure les appels de procédures à distance au dessus d'un protocole
de transport
Fonctionnement côté Client
Ouverture d'une connexion HTTP
Requête SOAP est un document XML décrivant :
une méthode à invoquer sur une machine distante
les paramètres de la méthode
Fonctionnement côté Serveur SOAP
Récupère la requête
Exécute la méthode avec les paramètres
Renvoie une réponse SOAP (document XML) au client
12
Le protocole SOAP
Service Requestor Service Provider
Demandeur de service Fournisseur de service
Requête SOAP
Serveur SOAP
Client HTTP dispatcheur
TOMCAT
Réponse SOAP
réseau implémentation
13
Le langage WSDL
Une interface qui cache le détail de l'implémentation du service,
permettant une utilisation indépendante :
de la plate-forme utilisée
du langage utilisé
Le fichier WSDL est au format XML et regroupe toutes les
informations nécessaires pour interagir avec le Web Service :
les méthodes
les paramètres et valeurs retournées
le protocole de transport utilisé
la localisation du service
Documents WSDL, générés par les outils de développement
favorisent une intégration rapide du service
14
Le langage WSDL
2 types de documents WSDL :
le document WSDL décrivant l'interface du service
le document WSDL décrivant l'implémentation du service
Documents indispensables au déploiement de Web Services
Publication et recherche de services au sein de l'annuaire UDDI se
font via ces 2 types de document WSDL
Pour l'accès à un service particulier, un client se voit retourné l'URL du
fichier WSDL décrivant l'implémentation du service.
Seul l'emplacement de ce fichier WSDL est indiqué puisque ce dernier
référence l'autre document WSDL décrivant l'interface de mise en
œuvre du service.
15
Annuaire UDDI
Rôle
Spécification pour la définition d'un service de registre
Fournisseur
Déclaration du fournisseur
Enregistrement de ses Web Services disponibles
Client
Requête de recherche de Web Services (SOAP)
Mise en relation avec le Web Service d'un fournisseur
16
Le fournisseur de services
publication Annuaire UDDI
WSDL
description
Service Description du service
Provider
déploiement serveur web Servlet
SOAP
implémentation
17
SOAP
18
SOAP, c'est quoi?
SOAP est un protocole de transmission de messages.
Il définit un ensemble de règles pour structurer des messages
principalement pour exécuter des dialogues requête-réponse de
type RPC (Remote Procedure Call).
Il n'est pas lié à un protocole particulier mais HTTP est populaire.
Il n'est pas non plus lié à un système d'exploitation ni à un langage
de programmation, donc, théoriquement, les clients et serveurs de
ces dialogues peuvent tourner sur n'importe quelle plate-forme et
être écrits dans n'importe quel langage du moment qu'ils puissent
formuler et comprendre des messages SOAP.
19
SOAP, c'est quoi?
Pour comprendre, imaginons une base de données très simple
d'une entreprise, comprenant une table spécifiant :
le numéro de référence,
le nom,
le numéro de téléphone des employés.
On désire mettre en place un service qui permet à d'autres
systèmes de la compagnie de consulter ces données.
Le service retourne un nom et un numéro de téléphone (un tableau
de chaînes de caractères à deux éléments) pour un numéro de
référence d'employé donné (un entier).
Voici la signature Java de ce service :
String[] getEmployeeDetails ( int employeeNumber );
20
SOAP, c'est quoi?
L'approche SOAP consiste :
à encapsuler la logique de requête de la base de données du service
(i.e. implémentation), dans une méthode Java par exemple
puis démarrer un thread qui écoute les requêtes adressées à ce
service (un écouteur ou listener), ces requêtes étant formulées dans
un format SOAP et contenant le nom du service et les paramètres
requis.
Le listener décode la requête SOAP entrante et la transforme en un
appel de la méthode vers l'objet concerné.
Il récupère le résultat de l'appel de la méthode, l'encode dans un
message SOAP (la réponse) et le renvoie au demandeur.
Cela donne:
21
Les points forts
Protocole de communication entre applications
Basé sur XML et les namespaces.
Communication par le Web (HTTP / SMTP / …)
Indépendant de la plateforme (windows, unix, mac, …)
Simple et extensible
22
Les principes
Permet d'envoyer des messages XML entre deux machines.
Les messages sont « emballés » dans une enveloppe SOAP
L'enveloppe SOAP est une grammaire prédéfinie
La grammaire du message dépend de l'application
Enveloppe repose sur Le message est
une grammaire SOAP dépendant de
identique pour tous les l'application puisqu'il
messages indique la méthode et
les paramètres
23
Les principes
Modèle pour le RPC :
Message Request invoque une méthode d'un objet distant
Message Response renvoie le résultat de son exécution
Encodage de types de données des langages de programmation,
comme :
Tableaux,
Enregistrements,
…
A noter que cela est hérité du modèle des schémas XML qui
permettent la représentation de structures de données
arbitrairement complexes (arbres, pointeurs, ...)
24
Les principes
Utilisable avec des protocoles :
Synchrones : HTTP,
Asynchrones : SMTP, JMS, …
Gestion des erreurs (SOAP Fault)
Entêtes (SOAP Header) :
utilisation de méta-données pour un ou plusieurs destinataires du
message qui peuvent chacun modifier les entêtes (audit, suivi, etc.).
Une spec du w3c (SOAP 1.2)
plus de modularité
mais aussi plus de complexité.
25
Les messages SOAP: présentation
<soap:Envelope
xmlns:soap=http://www.w3.org/2001/12/soap-envelope
soap:encodingStyle=http://www.w3.org/2001/12/soap-encoding>
<soap:Header>
…
</soap:Header>
<soap:Body>
…
<soap:Fault>
…
</soap:Fault>
</soap:Body>
</soap:Envelope>
26
Les messages SOAP: présentation
Un message SOAP valide est un document XML correctement formé.
Le prologue XML peut être présent, mais dans ce cas, ne doit contenir
qu'une déclaration XML (c-à-d. qu'il ne doit contenir ni référence à un
DTD, ni instruction XML).
Le message doit utiliser l'enveloppe SOAP et les namespaces
d'encodage SOAP, et doit avoir la forme suivante:
Une déclaration XML (optionnelle)
Une Enveloppe SOAP (l'élément racine) qui est composée de :
Une En-tête SOAP (optionnel)
Un Corps SOAP
27
Les messages SOAP: exemple
Un dialogue RPC encodé par SOAP contient un message de requête
et un message de réponse.
Considérons la méthode d'un service simple qui double la valeur
d'un entier donné dont voici la signature Java :
int doubleAnInteger ( int numberToDouble );
28
Les messages SOAP: exemple
Voici un exemple de requête SOAP sur un service définissant la
méthode décrite précédemment :
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doubleAnInteger
xmlns:ns1="urn:MySoapServices">
<param1 xsi:type="xsd:int">123</param1>
</ns1:doubleAnInteger>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
29
Les messages SOAP: exemple
Voici un exemple de réponse SOAP sur un service définissant la méthode
décrite précédemment :
<?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>
<ns1:doubleAnIntegerResponse
xmlns:ns1="urn:MySoapServices"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:int">246</return>
</ns1:doubleAnIntegerResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
30
Les messages SOAP: le prologue
Le prologue XML contient seulement une déclaration XML
‹?xml version="1.0" encoding="UTF-8" ?>
spécifiant la version de XML et l'encodage des caractères du
message XML.
31
Les messages SOAP: l'enveloppe
La balise de l'Enveloppe SOAP ‹SOAP-ENV:Envelope ... > dans le
message de requête spécifie tout d'abord le style d'encodage.
Cette balise est optionnelle comme c'est le cas dans le message
de réponse.
L'Enveloppe SOAP contient également des définitions de
namespaces.
Les identifiants des namespaces sont standards et la
spécification SOAP demande à ce que ces namespaces soient
définis correctement ou pas du tout (c-à-d qu'un message SOAP
dans lequel manquent des définitions de namespaces est correct
et peut être exploité mais un message contenant des définitions
incorrectes, c-à-d non standards, est mauvais et refusé).
32
Les messages SOAP: l'entête
Il n'y a pas de tag header (en-tête) SOAP dans cet exemple.
Les en-têtes SOAP sont optionnelles et sont typiquement utilisées
pour transmettre des données d'authentification ou de gestion de
session.
A noter que l'authentification et la gestion de session sont en
dehors du cadre du protocole SOAP, même si les concepteurs de
SOAP autorisent une certaine flexibilité dans la transmission de
messages SOAP, de telle façon que les personnes qui les
implémentent puissent inclure de telles informations.
33
Le messages SOAP: le corps
La balise SOAP Body (le corps) ‹SOAP-ENV:Body> encapsule une unique
balise de méthode qui porte le nom de la méthode elle-même
‹ns1:doubleAnInteger ... > (ou, le même nom suivi du mot
"Response" dans le cas du message de réponse).
La balise de la méthode reçoit typiquement le namespace
correspondant au nom du service, dans notre cas urn:MySoapServices
pour assurer l'unicité (un service web, qui peut contenir n'importe
quel nombre de méthodes nommées différemment, a un nom de
service unique à l'URL sur laquelle il est accessible)
34
Les messages SOAP: le corps
La balise de méthode encapsule à son tour n'importe quel nombre de
paramètres comme par exemple la balise ‹param1 ... >
Les noms des balises de paramètres peuvent être de n'importe quel
nom qui peut être autogénérés ou défini explicitement
Dans le message de réponse, il n'y a qu'une seule balise de paramètre
(représentant la valeur de retour de la méthode).
Elle porte le nom ‹return>
35
Les messages SOAP: compléments
L'une des caractéristiques les plus intéressantes du protocole
SOAP est sa capacité à gérer des paramètres de tout niveau de
complexité.
Cette capacité est directement déduite du modèle des schémas
XML et consiste à traiter des types primitifs (entier, chaîne de
caractères etc...), des tableaux et structures et toutes
combinaisons de ceux-ci.
Voyons pour finir, à quoi ressemblent les dialogues SOAP pour des
méthodes avec des types de paramètres et de retour complexes.
36
Les messages SOAP: compléments
Dans les transparents suivants, nous donnons le dialogue résultant
de l'appel de la version initiale de getEmployeeDetails comme
décrite précédemment.
Dans cette version, le client envoie un entier (l'identification de
l'employé) et reçoit un tableau de chaînes de caractères à deux
éléments contenant :
le nom de l'employé
et le numéro de téléphone
Dans la balise ‹return> du message de réponse, nous avons le type
de la structure complexe (le tableau de chaines), à savoir :
xsi:type="ns2:Array" ns2:arrayType="xsd:string[2]"
37
Les messages SOAP: compléments
Voici un exemple de requête SOAP pour notre nouveau service :
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:getEmployeeDetails
xmlns:ns1="urn:MySoapServices">
<param1 xsi:type="xsd:int">1016577</param1>
</ns1:getEmployeeDetails>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
38
Les messages SOAP: compléments
Voici un exemple de requête SOAP pour notre nouveau service :
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<ns1:getEmployeeDetailsResponse
xmlns:ns1="urn:MySoapServices"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return
xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns2:Array"
ns2:arrayType="xsd:string[2]">
<item xsi:type="xsd:string">Bill Posters</item>
<item xsi:type="xsd:string">+1-212-7370194</item>
</return>
</ns1:getEmployeeDetailsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
39
Style RPC ou DOC
Style RPC
Appels de procédures distants
Paramètres proches des types des langages de programmation
Degré élevé d'automatisation
Style DOC
Echanges de messages conformes à des schémas arbitraires (Ex:
Demande d'achat).
Plus d'expressivité
Encouragé par .Net
40
Synchrone ou Asynchrone
Aujourd'hui : beaucoup de services synchrones,
au dessus d'HTTP.
Pas de garanties de service (timeout ?)
Plus robuste : Echanges asynchrones
SMTP, JMS, …
Garanties de service (Exactly Once)
41
Architecture technique côté client
Les messages envoyés au serveur seront des requêtes SOAP-XML
enveloppées dans des requêtes HTTP.
De même, les réponses du serveur sont des réponses HTTP qui
renferment des réponses SOAP-XML.
Du côté client, pour ne pas prendre en charge la sérialisation
SOAP et l'encodage HTTP, nous utilisons un package SOAP
spécifique.
Nous invoquons ensuite le service, simplement en invoquant la
méthode appropriée du package SOAP (typiquement en spécifiant
l'URL du service, le nom du service et tous les paramètres requis).
Le premier travail d'un package est de sérialiser l' invocation de
ce service en requête SOAP. Il doit ensuite encoder ce message
dans une requête HTTP et l'envoyer à l'URL spécifiée.
42
Architecture technique côté client
Nous verrons la façon dont le serveur traite la requête, mais pour
l'heure, il nous renvoie le message encodé HTTP contenant la
réponse SOAP.
Nous nous reposons sur le même package SOAP pour exécuter
l'inverse de ce qui fut fait au stade de la requête, c'est-à-dire
que le package décode le message HTTP et extrait le message
SOAP, ensuite désérialise le message SOAP et obtient la valeur
de retour de l'appel de la méthode.
Cette valeur de retour trouvée est ensuite passée comme valeur
de retour à l'invocation originale de la méthode par le code
client.
43