Протокол SOAP: что это и как работает
SOAP — высокоуровневый протокол обмена информацией между веб-сервисом и клиентом. Сообщения передаются в формате XML над протоколами прикладного уровня, такими как HTTPS и HTTP. Например, с помощью SOAP приложение может запросить у метеорологического сайта прогноз погоды, а у банка — курсы валют.
SOAP характеризуют три принципа:
- Расширяемость — поддерживает интеграцию с большинством существующих механизмов безопасности и передачи данных.
- Нейтральность — работает с любым протоколом прикладного уровня.
- Независимость — поддерживает любую модель разработки.
История возникновения
Прототипом SOAP можно считать протокол XML-RPC
Статус веб-стандарта получила только версия 1.2, которая была значительно изменена. Если изначально под аббревиатурой понимался «простой протокол доступа к объектам» (Simple Object Access Protocol), то с версии 1.2 SOAP вообще никак не расшифровывается. Так разработчики подчеркнули, что протокол универсальный, а не только для «доступа к объектам».
SOAP довольно быстро стал основой для множества веб-сервисов и корпоративных систем, хотя сегодня он уступает по популярности REST.
Структура
SOAP характеризуется XML-форматом, состоящим из трех элементов:
- Конверт (
Envelope) — указывает на начало и конец сообщения, а также определяет пространство имен, использованное в документе. - Заголовок (
Header) — содержит дополнительные атрибуты сообщения, такие как данные аутентификации или настройки транзакции. Необязательный элемент. - Тело (
Body) — само сообщение, то есть запрос или ответ.
Если при обмене сообщениями произошла ошибка (например, неверные данные аутентификации), то вернется также компонент Fault, который содержит информацию о ней.
Принцип работы
Обмен SOAP-сообщениями происходит следующим образом:
- Клиент отправляет запрос в формате XML на SOAP-эндпоинт приложения.
- Сервер проверяет корректность запроса по конверту и заголовку, обрабатывает метаданные.
- Сервер извлекает содержимое тела запроса и обрабатывает его в соответствии со своей внутренней логикой.
- Сервер формирует ответное SOAP-сообщение с необходимой клиенту информацией.
- Клиент получает сообщение, анализирует его и извлекает запрошенную информацию. В случае ошибки действует согласно заданной логике, например, отображает сообщение об ошибке пользователю.
Обычно процесс также включает работу механизмов безопасности, таких как аутентификация, расшифровка сообщения и проверка подписи.
Пример запроса и ответа
Запрос курса USD на 17 октября 2025 года у банка:
<soapenv:Envelope
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
xmlns:cur="http://bank.example.ru/currency">
<soapenv:Header>
<cur:AuthHeader>
<cur:Username>api_user</cur:Username>
<cur:Password>password</cur:Password>
</cur:AuthHeader>
</soapenv:Header>
<soapenv:Body>
<cur:GetExchangeRate>
<cur:Currency>USD</cur:Currency>
<cur:Date>2025-10-17</cur:Date>
</cur:GetExchangeRate>
</soapenv:Body>
</soapenv:Envelope>
Ответ:
<soapenv:Envelope
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
xmlns:cur="http://bank.example.ru/currency">
<soapenv:Header>
<cur:ResponseInfo>
<cur:RequestId>171025</cur:RequestId>
<cur:Timestamp>2025-10-17T14:11:00Z</cur:Timestamp>
</cur:ResponseInfo>
</soapenv:Header>
<soapenv:Body>
<cur:GetExchangeRateResponse>
<cur:Rate>0.79</cur:Rate>
<cur:Currency>USD</cur:Currency>
<cur:Date>2025-10-17</cur:Date>
</cur:GetExchangeRateResponse>
</soapenv:Body>
</soapenv:Envelope>
Безопасность
SOAP использует собственный стандарт обеспечения безопасности — WS-Security. Он предоставляет несколько механизмов, работающих на уровне приложения:
- Подпись — обеспечивает целостность, аутентичность сообщений и легитимность отправителя.
- Шифрование — защищает содержимое сообщений от несанкционированного доступа.
- Аутентификация — подтверждает личность пользователя с помощью токенов.
Сами по себе эти механизмы не являются самодостаточной системой безопасности, но служат фундаментом для ее реализации. WS-Security можно использовать совместно с другими, более надежными средствами, например SSO и TLS.
Проблемы безопасности
Риски и угрозы безопасности при работе с SOAP:
- При недостаточной или неправильной настройке протокол уязвим для стандартных атак: инъекций, повторного воспроизведения сообщений, перехвата информации и других. Для устранения всех уязвимостей нужна высокая квалификация.
- При регулярном обмене сообщениями следует ограничить защиту до необходимого минимума, иначе она значительно замедлит процесс. Например, без необходимости не рекомендуется совместно использовать и шифрование, и подпись.
- Использование SOAP одновременно с несколькими другими XML-схемами, такими как SAML, может привести к проблемам совместимости на уровне библиотек и дополнительным сложностям в управлении безопасностью.
Альтернативы
Для некоторых приложений использование SOAP — не самый оптимальный выбор из-за высоких затрат ресурсов. Формат XML предполагает множество дополнительных символов, что утяжеляет сообщение и замедляет передачу. Если для вашего приложения это критически важно, ознакомьтесь с другими средствами.
REST
Чаще всего SOAP сравнивают с REST. Это архитектурный стиль, который предполагает обмен сообщениями без сохранения состояния (данные об участниках и история сообщений не сохраняются) и не зависит от технологий, используемых сервером и клиентом. REST напрямую использует протокол HTTP и не ограничен только одним возможным форматом данных. Сравним методы подробнее:
| Аспект | SOAP | REST |
|---|---|---|
| Форматы | XML | XML, JSON, CSV, HTML, Atom, RSS и другие |
| Сохранение состояния | Опционально | Не поддерживается |
| Транспортный протокол | Любой | HTTP |
| Стандарты безопасности | WS-Security, поддерживает другие технологии | Не имеет собственной системы безопасности, но поддерживает HTTPS и аутентификацию с помощью токенов |
| Производительность | Низкая | Высокая |
| Сложность настройки | Сложная | Простая |
| Сообщество | Небольшое | Обширное |
| Где используется | Корпоративные системы, legacy-приложения | Мобильные и веб-приложения |
Другие альтернативы
В зависимости от нужд вашего приложения вы также можете рассмотреть другие способы обмена данными:
- gRPC — высокопроизводительный протокол на основе HTTP/2, использующий бинарный формат передачи данных. Часто реализуется в средах, где ресурсы ограничены, например, в интернете вещей и микросервисах.
- GraphQL
— поддерживает декларативную выборку данных через один эндпоинт. Результаты передаются в виде абстрактного типа данных (графа) и чаще всего оборачиваются в формат JSON. Используется в средах, где важна гибкость передаваемых данных, например, когда в одном сообщении надо передать и медиаконтент, и текст. - WebSockets
— двусторонняя связь в реальном времени. Используется для непрерывного обмена данными, как в случае чатов. - XML-RPC — предшественник SOAP, сохраняющий популярность благодаря облегченному XML-формату. Подходит для вызовов простых удаленных процедур.
Примеры использования
Громоздкий синтаксис XML иногда может быть и преимуществом. При правильной настройке протокол имеет повышенную безопасность, позволяет легче обнаружить ошибки и избежать проблем с совместимостью. Рассмотрим примеры сценариев, в которых SOAP может быть оптимальным выбором:
- Электронная коммерция — SOAP популярен для транзакционных операций с сохранением состояния и повышенными требованиями к безопасности.
- Медицинские приложения — протокол обеспечивает высокий уровень конфиденциальности, что важно для передачи чувствительных медицинских данных.
- Корпоративные системы — SOAP легко интегрируется с любыми, непохожими друг на друга системами и устаревшими приложениями, открывая возможности для масштабирования.
- Научные приложения — протокол удобен для обмена точными данными с повышенными требованиями к формату.
Тестирование приложений в Yandex Cloud
Yandex Cloud предлагает инструмент Yandex Load Testing для тестирования производительности и функционального поведения разных приложений, в том числе по протоколу SOAP. Клиентам облака доступен генератор нагрузки с гибкими конфигурациями, подробными отчетами и возможностью управлять ими.
Подробнее см. в документации Load Testing.