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

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

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

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

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

 

Повідомлення 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.

Посилання ред.