Vous êtes sur la page 1sur 73

Les architectures orientées services

Chapitre 5 :
Les Services Web SOAP

hamdi.aloulou@isima.u-monastir.tn
Introduction
› Il existe deux types de Services Web les plus connus :

– Les Services Web REST (aussi appelés Web API)

– Les Services Web SOAP (aussi appelés Big Web Services)

› Les services web se basent principalement sur le


protocole HTTP et les langages XML et JSON

2
REST VS SOAP

3
Services Web SOAP VS REST
Carte Postale Vs. Courrier

4
Services Web SOAP VS REST

<Envelope>
<Header/>
<Body>
<hello>
<name>ISIMa</name>
</hello>
</Body>
</Envelope>

SOAP
Client Serveur

GET http://localhost:8080/Bibliotheque/Livre/{id}

REST
Client Serveur
Services Web SOAP VS REST
SOAP
➔ Avantages
➔ Cible l’appel de service
➔ Standardisé
➔ Sécurité (WS-Security)

➔ Inconvénients
➔ Performances
➔ Complexité, lourdeur
Services Web SOAP VS REST
REST
➔ Avantages
➔ Cible l’appel de ressources
➔ Simplicité de mise en œuvre
➔ Lisibilité par un humain
➔ Repose sur les principes du web
➔ Représentations multiples (XML, JSON,…)

➔ Inconvénients
➔ Destiné pour la manipulation des ressouces
➔ Sécurité restreinte par l’emploi des méthodes HTTP
Le principe des services
web SOAP

16
Les services web SOAP
Service Oriented Architecture Protocol
› Un message SOAP
– Permet la transmission d’un message au format XML

– Va d’un nœud émetteur vers un nœud receveur

› SOAP s’appuie sur :


– XML et XML Schema pour la représentation des messages

– Les protocoles internet classiques pour la transmission des messages


HTTP, SMTP, JMS, FTP…
17
L’Idée des Services Web SOAP
› Web service : Un objet créé avec un langage quelconque / Une
classe avec des méthodes qui peuvent être invoqué à distance.

› Un client quelconque pour qu’il puisse invoqué les méthodes


il doit envoyer une requête SOAP.

› Une Requête SOAP c’est une requête HTTP mais avec le corps
de la requête contient un message XML avec une structure
bien défini.
18
L’Idée des Services Web SOAP
› Au niveau de serveur il y a des APIs qui sont capables de lire
ce message. (pour JAVA il y a par exemple JaxWS).

› La réponse est envoyée par une requête HTTP. Pareil dans le


corps de réponse j’envoie une message XML

› Donc SOAP consiste à échanger des messages XML entre les


applications.

19
L’Idée des Services Web SOAP
(POST)

(POST)

21
La méthode HTTP pour les Web Service SOAP
› SOAP:
– POST : La méthode utilisé pour envoyer la requête SOAP et recevoir
la réponse SOAP.

22
Web Service : Requête SOAP avec POST
POST /Nom_Script HTTP/1.0
Accect :text/html
Entête de la requête
Accept-Language : fr
User-Agent : Mozilla/4.0

***saut de ligne ***

<Envelope>
<Header/>
<Body>
<conversion>
<montant>12</montant>
</conversion>
</Body>
</Envelope>
23
Corps de la requête
Web Service : Réponse SOAP avec POST
HTTP/1.0 200 OK
Date : Wed, 05Feb18 16:42:30 GMT
Server : Apache/1.3.24 Entête de la réponse
Last-Modified : Wed 02Oct17 23:50:01 GMT
Content-Type : Text/html
Content-length : 4205

***saut de ligne ***

<Envelope>
<Header/>
<Body>
<conversionResponse>
<return>132.0</return>
</conversionResponse>
</Body>
</Envelope>
24
Corps de la réponse
Concepts des Services Web SOAP

› Le concept des Web Services s’articule actuellement autour

des trois concepts suivants :

– SOAP (Simple Object Access Protocol)

– WSDL (Web Services Description Language)

– UDDI (Universal Description, Discovery and Integration)

25
Concepts des Services Web SOAP
› Le concept des Web Services s’articule actuellement autour
des trois concepts suivants :
– SOAP (Simple Object Access Protocol)
› protocole d'échange inter-applications
› indépendant de toute plate-forme,
› basé sur le langage XML.
› Un appel SOAP est transporté dans le protocole HTTP.
– WSDL (Web Services Description Language)
– UDDI (Universal Description, Discovery and Integration)

26
Concepts des Services Web SOAP
› Le concept des Web Services s’articule actuellement autour
des trois concepts suivants :
– SOAP (Simple Object Access Protocol)
– WSDL (Web Services Description Language)
› Description au format XML des Web Services
› Pour qu’un client puisse faire appel à un WS, il a besoin de savoir
son nom, le nom des méthodes et les paramètres d’entré et de
sortie de chaque méthode. C’est la raison pour laquelle dans les
web services il y a ce qu’on appelle les WSDLs.
› Précise les méthodes pouvant être invoquées, leurs signatures et
le point d’accès (URL, port, etc..).
– UDDI (Universal Description, Discovery and Integration) 27
Concepts des Services Web SOAP
› Le concept des Web Services s’articule actuellement autour
des trois concepts suivants :
– SOAP (Simple Object Access Protocol)
– WSDL (Web Services Description Language)
– UDDI (Universal Description, Discovery and Integration)
› Annuaire de Web Services, permettant à la fois la
publication et la recherche des Web Services.
› UDDI se comporte lui-même comme un Web Service dont les
méthodes sont appelées via le protocole SOAP.
› On utilise l’annuaire dans le cas où on ne connait pas encore où se
trouve le WS. Si on a besoin d’un WS, et qu’on ne connait pas où
on va le trouver, on peut utiliser un annuaire pour récupérer
l’adresse des WS.
28
L’Idée des Services Web SOAP
2: J’ai trouvé! Voici le serveur
hébergeant ce service web Contrat
UDDI SOAP
(WSDL)
3: Quel est le format d’appel du
service que tu propose
un service web
1: Je cherche

XML 4: Voici mon contrat (WSDL)

Client Serveur
XML

5: J’ai compris comment invoquer ton


service. Je t’envoie un document XML
représentant ma requête SOAP WS

6: J’ai exécuté ta requête et je te retourne le résultat 29


(réponse SOAP)
Le protocole SOAP

30
Structure d’un message SOAP
Structure d’un message SOAP

PROTOCOLE HEADER Protocole de transport ex:


HTTP
PROTOCOLE BODY
SOAP Envelope Définit le document XML
comme un message SOAP
SOAP Header
Optionnelle: Stockage des
informations spécifiques à la
SOAP Body
PROTOCOLE BODY transaction

Contenant des données à


transporter
SOAP Fault
Gestion d’erreurs
31
Structure d’un document SOAP
› Dans SOAP, les messages sont vus comme des enveloppes où
l’application renferme les données à envoyer
› Soap:envelope (Fr. enveloppe) (obligatoire)
– Est l'élément racine d’un message SOAP.
› Soap:header (Fr. entête) (Optionnel)
– est une partie facultative qui peut contenir des informations comme des
identifiants.
› Soap:body (Fr. corps) (Obligatoire)
– est un container qui contient les méthodes et les paramètres qui seront
exécutés par le destinataire final / La réponse de la méthode invoquée
› Soap:fault (Fr. erreur) (Optionnel)
– est un élément facultatif défini dans le corps SOAP et qui est utilisé pour
reporter les erreurs. 32
Entête SOAP (Header)
› Paramètres annexes : Propriétés du message
– Informations d’authentification

– Informations liées aux transactions


<Envelope>
<Header>
<UsernameToken>
user
</UsernameToken>
<PasswordText>
hello123
</PasswordText>
</Header>
<Body><!-- data goes here --></Body>
</Envelope>
33
Corps SOAP (Body)
› Endroit où les données spécifiques à l’application, et qui
doivent être échangées, sont placées
› L’élément Body est obligatoire, mais peut être vide.
› Il peut contenir plusieurs fils (appelés des entrées), qui
peuvent être:
– Données spécifiques à l’application: information échangée
dans le WS. Représentée par une méthode et ses arguments
(requête) ou une ou plusieurs valeurs (réponses)
– Message d’erreur : utilisé en cas d’erreur.
› Un message SOAP contient des données ou un
message d’erreur, mais pas les deux à la fois.
34
Exemple de Message SOAP (Request)
<Envelope>
<env:Header/>
<env:Body>
<Commande>
<parfum>Fraise</parfum>
<quantite>16</quantite>
<livraison>
<adresse>8 bvd N.Bohr Villeurbanne</adresse>
<destination>M2TI</destination>
</livraison>
</commande>
</Body>
</Envelope> 35
Exemple de Message SOAP (Response)

<Envelope>
<Header/>
<Body>
<confirmation>
<heure>10h</heure>
</confirmation>
</Body>
</Envelope>

36
Fautes SOAP
› Utilisé lorsqu’une erreur survient
– En général dans une réponse à un message reçu auparavant

› Se place dans la partie Body

› Le contenu est une explication de l’erreur:


– Une valeur
– Une explication textuelle
– Un morceau de document spécifique à l’application
– Le rôle du nœud à l’origine de l’erreur
› Utile en présence de nœuds intermédiaires
37
Exemple de Faute SOAP

<Envelope>
<Body>
<Fault>
<Detail>
<ErrorDetails>
<ErrorCode>500</ErrorCode>
<ErrorMessage>Failed to locate method(ValidateCreditCard)</ErrorMessage>
</ErrorDetails>
</Detail>
</Fault>
</Body>
</Envelope>

38
Le fichier de description
WSDL

39
WSDL
Web Services Description Language
› C’est un langage décrivant comment s’interfacer avec des services
web basés sur XML.

› Décrit comment accéder à un service Web et quelle sont les


opérations qu’on pourra effectuer.

› Se compose d'un ensemble d'éléments décrivant les types de


données utilisés par le service, les messages que le service peut
recevoir, ainsi que les liaisons SOAP associées à chaque message.
40
WSDL
Structure d’un document WSDL
Definitions
Types Element

+ Message Part
Input

PortType + Operation Output

SOAPBinding SOAPOperation
Binding
Operation Input
Output
Documentation
Service

Port SOAPAddress

Structure d’un document WSDL 41


WSDL
Structure d’un document WSDL
<definitions>
<types>
définition des types........
</types>
<message>
définition d’un message....
</message>
<portType>
<operation>
définition d’une opération.......
</operation>
</portType>
<binding>
définition d’un binding....
</binding>
<service>
définition d’un service....
</service>
</definitions>
42
WSDL
Structure d’un document WSDL
› Un fichier WSDL contient donc les éléments.
– Definitions : C'est l'élément racine de tous les documents WSDL. Il
définit le nom du service Web, déclare plusieurs espaces de
noms utilisés dans le reste du document et contient tous les autres
éléments.
– Service : indique les adresses de port de chaque liaison.
– Port : représente un point d'accès de services défini par une adresse
réseau et une liaison.
– Binding : spécifie une liaison entre un <portType> et un protocole
concret (SOAP, HTTP...).
43
WSDL
Structure d’un document WSDL
› Un fichier WSDL contient donc les éléments.
– PortType : décrit un ensemble d'opérations. Chaque opération a zéro
ou un message en entrée, zéro ou plusieurs messages de sortie
ou d'erreurs.
– Operation : c'est la description d'une action (méthode) exposée
dans le port.
– Message : représente une définition abstraire (noms et types) des
données en entrée et en sortie de la méthode.
– Type : fournit la définition de types de données utilisés pour décrire
les messages échangés.
44
Exemple

45
Exemple

46
Exemple

47
Exercices

50
Exercice
› Qu’elle est l’usage classique de HTTP ?

› HTTP est-il classiquement un protocole d'appel de procédure


distante (justifiez votre réponse) ?

› Quelles sont les différentes méthodes offertes en HTTP ?

› Quels avantages voyez-vous à la réalisation de communications


SOAP en utilisant le protocole HTTP ?

› Quels sont les avantages de l’utilisation de XML pour représenter


la structure des messages échangés en SOAP ?
51
Exercice
Préciser le nom de la méthode invoquée et les paramètres d’appel de ce message SOAP
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" >
<env:Header/>
<env:Body>
<m:chargeReservation xmlns:m="http://travelcompany.example.org/">
<m:reservation xmlns:m="http://travelcompany.example.org/reservation">
<m:code>FT35ZBQ</m:code>
</m:reservation>
<o:creditCard xmlns:o="http://mycompany.example.com/financial">
<n:name xmlns:n="http://mycompany.example.com/employees">Åke
Jógvan Øyvind</n:name>
<o:number>123456789099999</o:number>
<o:expiration>2005-02</o:expiration>
</o:creditCard>
</m:chargeReservation>
</env:Body>
</env:Envelope>
52
Mise en pratique
Les Services Web SOAP

53
Mise en Œuvre avec JAVA
› Il existe trois méthodes différentes pour développer des
services Web SOAP avec JAVA :
– En utilisant l’API JAX-WS

– Avec la méthode Bottom Up sous Eclipse

– Avec la méthode Top Down sous Eclipse

54
L’API JAX-WS
Mise en pratique

55
Mise en Œuvre avec JAVA : JAX-WS
› JAX-WS permet de développer très simplement des services
web en Java.

› JAX-WS fournit un ensemble d'annotations pour mapper la


correspondance Java-WSDL. Il suffit pour cela d'annoter
directement les classes Java qui vont représenter le service
web.

56
Mise en Œuvre avec JAVA : JAX-WS
@WebService(serviceName="BanqueWS")
Public class BanqueService {
@WebMethod(operationName="ConversionEuroToTND")
public double conversion(@WebParam(name="montant") double mt){
return mt*3.27;
}
@WebMethod
public String test(){
return "Test";
}
@WebMethod
public Compte getCompte(){
return new Compte(1,7000);
}
@WebMethod
public List<Compte> getComptes(){
List<Compte> cptes = new ArrayList<Compte>();
cptes.add(new Compte(1, 7000)); cptes.add(new Compte(2, 9000));
return cptes;
}
57
}
Mise en Œuvre avec JAVA : JAX-WS
› Une classe Java utilise des annotations JAX-WS afin de
générer le document WSDL.

› Le document WSDL est auto-généré par le serveur


d'application au moment du déploiement.

58
L’API JAX-WS pour les Web Services de JAVA
› L’API JAX-WS est très simple :

– Vous aurez juste à écrire le service désiré…

– … amélioré par des annotations

› Vous n’aurez pas à gérer comment les requêtes SOAP sont traités

› Juste vous aurez à vous concentrer à la logique du service

› Nous allons voir les annotations principales fournies par JAX-WS…

59
Développement d’un Web Service avec JAX-WS
› Pour définir un Service Web, on utilise l’annotation @WebService

@WebService
public class CircleFunctions {
public double getArea(double r) {
return java.lang.Math.PI * (r * r);
}
public double getCircumference(double r) {
return 2 * java.lang.Math.PI * r;
}

60
Développement d’un Web Service avec JAX-WS
› L’API JAX-WS fourni aussi l’annotation @WebMethod pour
personnaliser les méthodes du Service Web :

@WebMethod
public double getArea(double r) {
return java.lang.Math.PI * (r * r);
}

61
Développement d’un Web Service avec JAX-
WS sous Eclipse
› Créer un projet Web dynamique
› Choisir le serveur Wildfly comme
Target runtime
› Changer Execution Environment
du BuildPath à JavaSE-1.8

62
Développement d’un Web Service avec JAX-
WS sous Eclipse
› Créer la classe d’implémentation du service
› Ajouter les annotations

63
Développement d’un Web Service avec JAX-
WS sous Eclipse
› Lancer le service web
sur le serveur Wildfly

64
Génération du fichier WSDL
› Comment générer le fichier WSDL correspondant au Service
Web créé ?
– JAX-WS le fait pour vous !

› On peut retrouver le chemin dans l’output sur la console de


eclipse

65
Développement d’un Web Service avec JAX-
WS sous Eclipse
› Tester le service web avec
l’explorateur web service

66
Développement d’un Web Service avec JAX-
WS sous Eclipse
› Tester le service web avec l’explorateur web service

67
Consommer un Web Service avec JAX-WS
› JAX-WS est une API qui peut être utilisé :
– Du côté serveur pour définir des Web Services
– Du côté client pour consommer des Web Services

› Les Web Services SOAP sont interopérable !


– Vous pouvez utiliser JAX-WS pour consommer un Web Service développer avec
d’autres technologies

– Tous ce que JAX-WS a besoin est la localisation du fichier WSDL et les librairies
JAX-WS
68
Consommer un Web Service avec JAX-WS
› Un environnement de développement IDE comme Eclipse
fournie des outils pour générer automatiquement le client
Web Service.

69
La méthode Bottom Up
Mise en pratique

70
Développement d’un Web Service avec la
méthode Bottom up sous Eclipse
› Créer un projet web dynamique
› Choisir le serveur WildFly
comme Target Runtime
› Choisir JavaSE-8 comme
« Execution environment »
dans le Build Path

71
Développement d’un Web Service avec la
méthode Bottom up sous Eclipse
› Créer la classe qui implémente le service web

72
Développement d’un Web Service avec la
méthode Bottom up sous Eclipse
› Générer le service web
Bouton droit classe d’implémentation
/new/other/web services/web service

73
Développement d’un Web Service avec la
méthode Bottom up sous Eclipse
› Démarrer le serveur

74
Développement d’un Web Service avec la
méthode Bottom up sous Eclipse
› Monitoring du service web

75
La méthode Top Down
Mise en pratique

76
Développement d’un Web Service avec la
méthode Top Down sous Eclipse
› Créer un projet web dynamique
› Choisir le serveur WildFly
Comme Target Runtime
› Choisir JavaSE-8 comme
« Execution environment »
dans le Build Path

77
Développement d’un Web Service avec la
méthode Top Down sous Eclipse
› Importer le fichier wsdl dans le dossier WebContent
› Générer le service web
Bouton droit fichier wsdl
/new/other/web services/web service

78
Développement d’un Web Service avec la
méthode Top Down sous Eclipse
› Démarrer le serveur
› La classe d’implémentation
(AreaServiceSOAPImpl.java) apparait.

79
Développement d’un Web Service avec la
méthode Top Down sous Eclipse
› Changer les méthodes pour correspondre à l’implémentation
souhaité

80
Développement d’un Web Service avec la
méthode Top Down sous Eclipse
› Créer le client web service

› Sélectionner le fichier
wsdl généré lors de la
création du web service
(AreaServiceSOAP.wsdl)

› File -> New -> Other... ->


Web Services ->
`Web Service Client.
81
Développement d’un Web Service avec la
méthode Top Down sous Eclipse
› Changer le nom du projet
client

82
Développement d’un Web Service avec la
méthode Top Down sous Eclipse

83
Tester les services web SOAP
› L’outil SoapUI

84

Vous aimerez peut-être aussi