SAVON - Transport

SOAP n'est lié à aucun protocole de transport. SOAP peut être transporté via SMTP, FTP, MQSeries d'IBM ou Microsoft Message Queuing (MSMQ).

La spécification SOAP inclut des détails sur HTTP uniquement. HTTP reste le protocole de transport SOAP le plus populaire.

SOAP via HTTP

Très logiquement, les requêtes SOAP sont envoyées via une requête HTTP et les réponses SOAP sont renvoyées dans le contenu de la réponse HTTP. Alors que les requêtes SOAP peuvent être envoyées via HTTP GET, la spécification inclut des détails sur HTTP POST uniquement.

De plus, les requêtes et les réponses HTTP sont requises pour définir leur type de contenu sur text / xml.

La spécification SOAP oblige le client à fournir un en -tête SOAPAction, mais la valeur réelle de l'en-tête SOAPAction dépend de l'implémentation du serveur SOAP.

Par exemple, pour accéder au service de traduction AltaVista BabelFish, hébergé par XMethods, vous devez spécifier ce qui suit comme en-tête SOAPAction.

urn:xmethodsBabelFish#BabelFish

Même si le serveur ne nécessite pas un en-tête SOAPAction complet, le client doit spécifier une chaîne vide ("") ou une valeur nulle. Par exemple -

SOAPAction: ""
SOAPAction:

Voici un exemple de requête envoyée via HTTP au service de traduction XMethods Babelfish -

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"

<?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:BabelFish
         xmlns:ns1 = "urn:xmethodsBabelFish"
         SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type = "xsd:string">en_fr</translationmode>
         <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
      </ns1:BabelFish>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Notez le type de contenu et l'en-tête SOAPAction. Notez également que la méthode BabelFish nécessite deux paramètres String. Le mode de traduction en_fr traduit de l'anglais vers le français.

Voici la réponse de XMethods -

HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml

<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
   
   <SOAP-ENV:Body>
      <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
         <return xsi:type = "xsd:string">Bonjour, monde!</return>
      </namesp1:BabelFishResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Les réponses SOAP fournies via HTTP doivent suivre les mêmes codes d'état HTTP. Par exemple, un code d'état de 200 OK indique une réponse réussie. Un code d'état de 500 Erreur interne du serveur indique qu'il y a une erreur de serveur et que la réponse SOAP comprend un élément Fault.