SOAP (Simple Object Access Protocol) est un protocole d'échange
permettant d'invoquer des applications sur des réseaux distribués
et décentralisés.Microsoft a basé son architecture
.NET sur SOAP, mais ce protocole est indépendant de l'éditeur
de Redmond, et correspond à une note du consortium W3.
En quoi consiste-t-il ? Il s'agit de faire appel, à distance,
à des procédures (Remote Procedure Call), donc
de transporter , sur des réseaux, une logique applicative,
et de définir notamment des services web (qui correspondent
à la possibilité de relier, via le web, des
composants logiciels hétérogènes). Comment
? En s'appuyant sur un protocole de transport (le protocole
HTTP, mais aussi SMTP ou POP) et sur un langage de structuration
des données envoyées sous forme de messages. Ce langage
n'est autre qu'XML.
Quelques précisions, d'abord, sur les appels de procédures
à distance. Il faut distinguer deux types de middleware (un
middleware assurant la communication entre client et serveur): le
middleware type RPC et le middleware type ORB (Object Request Broker),
le second étant par définition "orienté-objet".
En effet, dans une approche ORB, le poste client fait appel à
une méthode sur le serveur d'applications qui renvoie son
résultat, impliquant la suspension de l'activité de
l'application sur le poste client pendant le traitement des données
par la méthode invoquée. Dans une approche RPC, au
contraire, un message est envoyé au serveur (initiant
le traitement des données sur celui-ci) par un processus
client qui suspend ses activités: l'application sur le
poste client continue, elle, de tourner. Un autre message est envoyé
au processus client quand la procédure appelée s'achève.
RPC et ORB sont donc méthodologiquement tout à fait
distincts.
SOAP et XML
SOAP repose sur une approche RPC, basée donc sur des
messages dont le contenu est structuré en XML. Les exemples
suivants (tirés de la note
du W3C datant du 8 mai 2000 et concernant SOAP 1.1) montrent une
requête HTTP, puis la réponse (HTTP) correspondante,
contenant des messages SOAP sous la forme de code XML "enveloppé":
Exemple 1 : une requête HTTP contenant du code SOAP
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Exemple 2: la réponse HTTP correspondante
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Comprendre ces exemples
nécessite notamment d'être
familiarisé avec les espaces
de nom (namespaces) XML Ceux-ci sont caractérisés
par ce qu'on appelle une URI - Uniform Resource Identifier.
Il s'agit ici de répondre à une requête SOAP
(un message contenu dans une requête HTTP, donc) demandant
au serveur le montant d'un prix. La définition d'une "enveloppe"
SOAP est obligatoire: elle caractérise le message SOAP. Une
"enveloppe" SOAP se subdivise en un en-tête (absent
ici) et un corps (SOAP-ENV:Body).
Le code XML, quant à lui, ne pose pas de difficultés
particulières.
De futurs articles se pencheront sur les différents aspects
de SOAP, et notamment la manière dont SOAP manipule des données
et structures de données.
|