SOAP - Trasporti

SOAP non è legato ad alcun protocollo di trasporto. SOAP può essere trasportato tramite SMTP, FTP, MQSeries di IBM o Microsoft Message Queuing (MSMQ).

La specifica SOAP include dettagli solo su HTTP. HTTP rimane il protocollo di trasporto SOAP più popolare.

SOAP tramite HTTP

Logicamente, le richieste SOAP vengono inviate tramite una richiesta HTTP e le risposte SOAP vengono restituite all'interno del contenuto della risposta HTTP. Sebbene le richieste SOAP possano essere inviate tramite HTTP GET, la specifica include i dettagli solo su HTTP POST.

Inoltre, sia le richieste HTTP che le risposte sono necessarie per impostare il tipo di contenuto su text / xml.

La specifica SOAP impone al client di fornire un'intestazione SOAPAction, ma il valore effettivo dell'intestazione SOAPAction dipende dall'implementazione del server SOAP.

Ad esempio, per accedere al servizio di traduzione AltaVista BabelFish, ospitato da XMethods, è necessario specificare quanto segue come intestazione SOAPAction.

urn:xmethodsBabelFish#BabelFish

Anche se il server non richiede un'intestazione SOAPAction completa, il client deve specificare una stringa vuota ("") o un valore null. Ad esempio:

SOAPAction: ""
SOAPAction:

Ecco una richiesta di esempio inviata tramite HTTP al servizio di traduzione di 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>

Prendere nota del tipo di contenuto e dell'intestazione SOAPAction. Si noti inoltre che il metodo BabelFish richiede due parametri String. La modalità di traduzione en_fr traduce dall'inglese al francese.

Ecco la risposta di 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>

Le risposte SOAP fornite tramite HTTP devono seguire gli stessi codici di stato HTTP. Ad esempio, un codice di stato 200 OK indica una risposta riuscita. Un codice di stato di 500 Internal Server Error indica che c'è un errore del server e che la risposta SOAP include un elemento Fault.