SOAP — протокол обмена данными в XML¶
SOAP (Simple Object Access Protocol) — протокол обмена сообщениями в формате XML, предназначенный для реализации вызовов удалённых процедур и обмена структурированными данными между распределёнными системами поверх протокола HTTP. Протокол является основой технологии веб-сервисов (Web Services) и широко используется в корпоративных интеграционных сценариях.
¶История
Разработка SOAP началась в 1998 году в компании Microsoft как часть инициативы по созданию протокола для обмена данными между приложениями на разных платформах. Первая версия спецификации (SOAP 1.0) была опубликована в 1999 году. В 2000 году консорциум W3C выпустил версию SOAP 1.1, которая получила широкое распространение в индустрии. В 2007 году была принята рекомендация W3C SOAP 1.2, ставшая актуальной версией стандарта.
¶Принцип работы
SOAP использует HTTP (или другие транспортные протоколы, например SMTP) в качестве транспортного слоя. Запрос и ответ передаются в виде XML-документов. Структура сообщения SOAP включает три основных компонента:
- Envelope — конверт, определяющий структуру сообщения;
- Header — необязательная часть с метаданными (аутентификация, маршрутизация, идентификаторы транзакций);
- Body — обязательная часть с полезной нагрузкой (данными запроса или ответа).
Дополнительно может использоваться блок Fault для описания ошибок.
¶Структура SOAP-запроса
Пример типичного SOAP-запроса поверх HTTP:
```xml POST /service HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: "urn:example:GetPrice"
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <auth:Token xmlns:auth="urn:example:auth">abc123</auth:Token> </soap:Header> <soap:Body> <m:GetPrice xmlns:m="urn:example:price"> <m:Product>soap</m:Product> </m:GetPrice> </soap:Body> </soap:Envelope> ```
Ответ содержит аналогичную структуру с данными в теле сообщения или блоком Fault при ошибке.
¶Ключевые особенности
- Транспортная независимость — SOAP не привязан к HTTP, хотя HTTP является наиболее распространённым транспортом.
- Строгая спецификация — формат сообщений описывается схемами WSDL (Web Services Description Language), что обеспечивает предсказуемость обмена.
- **Поддержка WS-* спецификаций** — расширения для безопасности (WS-Security), надёжной доставки (WS-ReliableMessaging), транзакций (WS-Transaction) и других корпоративных требований.
- Возможность работы через брандмауэры — использование стандартного HTTP-порта упрощает прохождение сетевых фильтров.
¶SOAP и REST
SOAP часто сравнивают с REST (Representational State Transfer) — альтернативным подходом к построению веб-сервисов. Основные различия:
| Критерий | SOAP | REST |
|---|---|---|
| Формат данных | XML (обязателен) | JSON, XML, HTML и др. |
| Описание | WSDL | OpenAPI (Swagger) |
| Строгость | Высокая | Низкая |
| Корпоративные расширения | WS-* | Ограничены |
| Простота | Сложнее | Проще |
SOAP продолжает использоваться в банковских, государственных и промышленных системах, где требуются строгие гарантии доставки, безопасности и транзакционности. REST, в свою очередь, преобладает в мобильных и веб-приложениях.
¶Применение
SOAP-сервисы применяются в следующих областях:
- Банковские системы — интербанковские платежи, обмен данными с платёжными системами.
- Государственные сервисы — обмен информацией между ведомствами (например, в России SOAP-сервисы используются в системах межведомственного взаимодействия ЕСИА и СМЭВ).
- Промышленная автоматизация — интеграция SCADA-систем и ERP-систем.
- Телекоммуникации — биллинговые системы и системы управления абонентами.
¶Критика
Основные претензии к SOAP связаны с его громоздкостью: XML-формат увеличивает объём сообщений по сравнению с JSON, а необходимость строгого описания WSDL усложняет разработку. Для ряда задач REST-подход оказывается более практичным.
¶Источники
- W3C SOAP 1.2 Specification
- W3C SOAP 1.1 Note
- «Web Services: Concepts, Architectures and Applications» — G. Alonso et al.
- «RESTful Web Services» — L. Richardson, S. Ruby
