TUTORIELS 
Introduction à SOAP
Comprendre le protocole SOAP, au coeur de l'architecture .NET de Microsoft, et sa relation avec le langage XML.  (9 juillet 2001)
 

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.

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page