webservice

SOAP

SOAP (Simple Object Access Protocol) est un protocole RPC, orienté objet, bâti sur XML.

Il permet l’invocation de méthode sur des objets distants grâce à l’échange de message XML.

SOAP n'est plus un acronyme depuis la version 1.2 qui a été réécrite en termes d'infosets XML, et non plus sous forme de sérialisations de document XML. La notion d'objet (spécifiée dans Simple OBJECT Access Protocol) devient donc obsolète.

Bien que le protocole de transport le plus commun soit http(s), il est possible de l’utiliser sur SMTP, voire tout MOM.

Exemple

Requête HTTP invoquant une méthode GetOrders

POST /Orders HTTP/1.1    
Host: xxx.xxx.xxx.xxx    
Content-Type: text/xml; charset="utf-8"    
Content-Length: nnnn    
SOAPAction: "http://www.someorders.com/GetOrders"
<?xml version=“1.0”?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<orders:GetOrders
xmlns:orders="http://www.someorders.com/orders">
   <CustomerID>ALFKI</CustomerID>
   <SalesRepID>85</SalesRepID>
</orders:GetOrders>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Réponse HTTP à la requête précédente

HTTP/1.1 200 OK 
MessageType: CallResponse 
Content-Type: text/xml
<?xml version=“1.0”?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<orders:GetOrdersResponse xmlns:orders="http://www.someorders.com/orders">
   <data />
</orders:GetOrdersResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Eléments d’un message SOAP

  • Envelope
    • Élément pouvant contenir des déclarations d'espaces de noms ou des sous-éléments
  • Header (optionnel)
    • Permet des extensions telles que authentification, session…
  • Body (obligatoire)
    • Définit la méthode appelée, contient les paramètres
    • Peut contenir un élément Fault en cas d'erreur

NameSpaces

SOAP Header : Mécanisme d’extension du protocole SOAP

  • La balise Header est optionnelle
  • Si la balise Header est présente, elle doit être le premier fils de la balise Envelope
  • La balise Header contient des entrées
  • Une entrée est n’importe quelle balise incluse dans un namespace. Les entrées contenues dans la balise Header sont non applicatives.
<SOAP-ENV:Header>
<t:Transaction xmlns:t="some-URI" SOAP-ENV:mustUnderstand="0">
5
</t:Transaction>
</SOAP-ENV:Header>

L’attribut mustUnderstand

  • n Rien ou =0 : l’élément est optionnel pour l’application réceptrice
  • n =1 : l’élément doit être compris de l’application réceptrice. Sinon le traitement du message par le récepteur doit échouer.