SOAP

SOAP (англ. Simple Object Access Protocol) — протокол обміну структурованими повідомленнями в розподілених обчислювальних системах, базується на форматі XML.

Спочатку SOAP призначався, в основному, для реалізації віддаленого виклику процедур (RPC), а назва була абревіатурою: Simple Object Access Protocol — простий протокол доступу до об'єктів. Зараз протокол використовується для обміну повідомленнями в форматі XML, а не тільки для виклику процедур. SOAP є розширенням мови XML-RPC.

SOAP можна використовувати з будь-яким протоколом прикладного рівня: SMTP, FTP, HTTP та інші. Проте його взаємодія з кожним із цих протоколів має свої особливості, які потрібно відзначити окремо. Найчастіше SOAP використовується разом з HTTP.

SOAP є одним зі стандартів, на яких ґрунтується технологія веб-сервісів.

Структура протоколу[ред. | ред. код]

SOAP.svg

Повідомлення SOAP структурується так:
SOAP-конверт

SOAP-заголовок
Елемент заголовку 1
Елемент заголовку 2
Елемент заголовку N
Тіло SOAP
Елемент тіла 1
Елемент тіла 2
Елемент тіла N

Приклади[ред. | ред. код]

Приклад SOAP POST повідомлення:

POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: 299  <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">   <soap:Header>   </soap:Header>   <soap:Body>     <m:GetStockPrice xmlns:m="http://www.example.org/stock">       <m:StockName>IBM</m:StockName>     </m:GetStockPrice>   </soap:Body> </soap:Envelope> 

Приклад SOAP-запиту на сервер інтернет-магазину:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">    <soap:Body>      <getProductDetails xmlns="http://warehouse.example.com/ws">        <productID>12345</productID>      </getProductDetails>    </soap:Body>  </soap:Envelope> 

Приклад відповіді:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">    <soap:Body>      <getProductDetailsResponse xmlns="http://warehouse.example.com/ws">        <getProductDetailsResult>          <productID>12345</productID>          <productName>Склянка ребриста</productName>          <description>Склянка ребриста. 200 мл.</description>          <price>9.95</price>          <inStock>true</inStock>        </getProductDetailsResult>      </getProductDetailsResponse>    </soap:Body>  </soap:Envelope> 

Переваги[ред. | ред. код]

  • SOAP є достатньо гнучким, що дозволяє використовувати різні транспортні протоколи. Стандартні реалізації використовують HTTP як транспортний протокол, однак також можливо використовувати JMS чи SMTP.
  • Позаяк модель SOAP каналів(з'єднань) прекрасно працює в контексті моделі HTTP запитів-відповідей, то можливо легко встановлювати з'єднання на базі існуючих фаєрволів чи проксі-серверів без жодних модифікацій самого SOAP-протоколу.

Недоліки[ред. | ред. код]

  • Застосування SOAP для передачі повідомлень збільшує їхній обсяг і зменшує швидкість обробки. У системах, де швидкість важлива, часто надсилають XML документи безпосередньо через HTTP як звичайні HTTP параметри або застосовують протокол REST.
  • Попри те, що для SOAP є стандарт, різні програми часто генерують повідомлення в несумісному форматі. Наприклад, запит згенерований Apache Axis[en]-клієнтом, не завжди розпізнається сервером WebLogic.

Посилання[ред. | ред. код]