Руководство по SOAP. Передача.

SOAP не привязано ни к одному из протоколов передачи данных. Сообщение SOAP может быть передано с помощью таких проколов, как FTP, SMTP и т.д.

Спецификация SOAP включает в себя элементы только протокола HTTP, который остаётся наиболее используемым протоколо передачи данных.


Передача SOAP с помощью HTTP

Чаще всего, запросы SOAP отправляются с помощью HTTP запроса, а ответ SOAP приходит внутри HTTP ответа. Хотя SOAP запрос может быть передан с помощью метода HTTP GET, спецификация включает описание только для HTTP GET.

В дополнение к этому, и запрос и ответ HTTP требуют установки их типа контента на text/html.

Спецификация SOAP требует, чтобы клиент передавал SOAPAction Header, но конкретное значение этого элемента зависит от реализации SOAP сервера.

Например, для получения доступа к сервису SomeService, который находится на хостинге SuperHost, нам необходимо указать следующий элемент header:


urn:superHostSomeService#SuperService

Даже если сервер не требует SOAPAction header, клиент должен указать пустую строку, лиюо значение null:


SOAPAction: ""
SOAPAction:

Ниже приведён пример запроса, отправленного с помощью HTTP на сервер SuperHost SomeService:


POST /perl/soaplite.cgi HTTP/1.0
Host: services.superhost.com
Content-Type: text/xml; charset=utf-8
Content-Length: 600
SOAPAction: "urn:superHostSomeService#SuperService"

<?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:SuperService xmlns:ns1="urn:superHostSuperService" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type="xsd:string">en_ru</translationmode>
         <sourcedata xsi:type="xsd:string">Hi, Super Host</sourcedata>
      </ns1:SuperService>
		
   </SOAP-ENV:Body>
	
</SOAP-ENV:Envelope>

А вот пример от SuperHost на полученный запрос (допустим, сервис выполняет перевод принятого соощения с английского на русский):


HTTP/1.1 200 OK
Date: Mon, 16 May 2016 19:06:57 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: 601
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:SuperServiseResponse xmlns:namesp1="urn:superHostSuperService">
      <return xsi:type="xsd:string">Привет, СуперХост</return>
      </namesp1:SuperServiceResponse>
		
   </SOAP-ENV:Body>
	
</SOAP-ENV:Envelope>

Ответ SOAP, отправленный с помощью HTTP должен иметь такой же код статуса HTTP. Например, код статуса 200 OK означает, что запрос успешен. Код статуса 500 Internal Server Error – означает, что имеется ошибка на сервере и ответ SOAP включает элемент Fault.

На этом мы заканчиваем изучение передачи SOAP сообщений.

В следующей статье мы ознакомимся с примерами SOAP сообщений.