SOAP
SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) — это протокол обмена структурированными сообщениями в распределённой вычислительной среде, основанный на языке разметки XML. SOAP является одним из ключевых протоколов веб-служб (web services), обеспечивающим взаимодействие между приложениями, написанными на разных языках программирования и работающими на различных платформах. Протокол определяет формат сообщений, правила их обработки и способы передачи через транспортные протоколы, чаще всего HTTP и SMTP.
История
Разработка SOAP началась в 1998 году в компании Microsoft под руководством Дейва Вайнера (Dave Winer) и Боба Аткинсона (Bob Atkinson). Первоначально протокол назывался XML-RPC (XML Remote Procedure Call) и предназначался для вызова удалённых процедур через HTTP с использованием XML-формата. В 1999 году Microsoft совместно с DevelopMentor представила SOAP 0.9, который вскоре был передан на рассмотрение в консорциум World Wide Web Consortium (W3C).
В 2000 году была опубликована спецификация SOAP 1.1, которая легла в основу большинства современных реализаций. В 2003 году W3C выпустил рекомендацию SOAP 1.2, которая внесла значительные изменения: протокол был переименован в SOAP (без расшифровки «Simple Object Access Protocol»), были уточнены правила обработки ошибок, введена поддержка различных моделей обмена сообщениями (не только «запрос-ответ», но и «однонаправленный»). В 2007 году вышла версия 1.2 Second Edition, которая является действующей на начало 2020-х годов.
Архитектура и принципы работы
SOAP основан на модели клиент-сервер, где клиент отправляет запрос, а сервер возвращает ответ. Сообщения SOAP передаются через транспортный протокол (чаще всего HTTP), но протокол не привязан к конкретному транспорту — могут использоваться SMTP, JMS (Java Message Service), TCP и другие.
Структура сообщения
Каждое сообщение SOAP представляет собой XML-документ, который состоит из следующих элементов:
- Конверт (Envelope) — корневой элемент, который идентифицирует документ как сообщение SOAP. Содержит пространство имён
http://schemas.xmlsoap.org/soap/envelope/http://www.w3.org/2003/05/soap-envelope (для SOAP 1.2).(для SOAP 1.1) или - Заголовок (Header) — необязательный элемент, содержащий метаданные: информацию об аутентификации, транзакциях, маршрутизации. Заголовок может включать блоки, адресованные конкретным узлам обработки.
- Тело (Body) — обязательный элемент, содержащий основную информацию запроса или ответа. Включает либо данные вызова процедуры (имя метода и параметры), либо результат выполнения, либо описание ошибки (Fault).
- Ошибка (Fault) — специальный элемент внутри Body, используемый для передачи информации об ошибках. Содержит код ошибки, описание, причину и дополнительные данные.
Пример простого сообщения SOAP (запрос):
``xml <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getPrice xmlns="http://example.com/stock"> <symbol>MSFT</symbol> </getPrice> </soap:Body> </soap:Envelope> ``
Модели обмена сообщениями
SOAP поддерживает несколько моделей обмена:
- Запрос-ответ (Request-Response) — клиент отправляет запрос, сервер возвращает ответ. Наиболее распространённая модель.
- Однонаправленный (One-Way) — клиент отправляет сообщение, сервер не возвращает ответа. Используется для уведомлений или асинхронных операций.
- Сложные модели — например, «запрос-ответ с промежуточными узлами», когда сообщение проходит через несколько посредников (intermediaries), каждый из которых может обрабатывать заголовки.
Транспортные протоколы
Хотя SOAP не привязан к конкретному транспорту, наиболее часто используется HTTP. При передаче через HTTP сообщение SOAP помещается в тело HTTP-запроса (POST) или ответа. Заголовок HTTP Content-Type устанавливается в text/xml (SOAP 1.1) или application/soap+xml (SOAP 1.2). Также может использоваться заголовок SOAPAction (для SOAP 1.1), который указывает целевую операцию.
При использовании SMTP сообщение SOAP вкладывается в тело электронного письма. При использовании JMS — передаётся через очередь или тему.
Связь с WSDL и UDDI
SOAP часто используется в сочетании с другими технологиями веб-служб:
- WSDL (Web Services Description Language) — язык описания веб-служб на XML. WSDL-документ определяет, какие операции доступны, какие параметры они принимают и какие возвращают, а также как к ним обращаться (включая адрес конечной точки и транспортный протокол). SOAP-сообщения строго соответствуют описанию, заданному в WSDL.
- UDDI (Universal Description, Discovery and Integration) — реестр для публикации и поиска веб-служб. Позволяет клиентам находить службы по их описанию. UDDI активно использовался в начале 2000-х, но к 2020-м годам утратил популярность.
Преимущества и недостатки
Преимущества
- Платформенная независимость — SOAP работает с любым языком программирования, поддерживающим XML и HTTP.
- Расширяемость — заголовки позволяют добавлять дополнительные возможности (безопасность, транзакции, маршрутизацию) без изменения основного протокола.
- Стандартизация — протокол является рекомендацией W3C, что обеспечивает совместимость между различными реализациями.
- Поддержка сложных моделей обмена — возможность асинхронной обработки и маршрутизации через промежуточные узлы.
- Безопасность — SOAP может использовать WS-Security (расширение для аутентификации, шифрования и цифровых подписей), что делает его пригодным для корпоративных приложений.
Недостатки
- Избыточность — XML-формат делает сообщения SOAP значительно больше по размеру по сравнению с JSON или бинарными протоколами.
- Сложность — разработка и отладка SOAP-служб требует больше усилий, чем RESTful-сервисов.
- Производительность — из-за объёмных сообщений и необходимости парсинга XML SOAP медленнее альтернатив.
- Зависимость от WSDL — для корректной работы часто требуется точное описание службы, что усложняет быстрое прототипирование.
Применение
SOAP широко используется в корпоративных информационных системах, где требуется высокая надёжность, безопасность и поддержка сложных транзакций. Типичные области применения:
- Финансовые системы — обмен данными между банками, обработка платежей.
- Системы управления предприятием (ERP) — интеграция модулей SAP, Oracle, 1С.
- Телекоммуникации — биллинг, управление услугами.
- Государственные информационные системы — межведомственное взаимодействие (например, СМЭВ в России использует SOAP).
В России SOAP применяется в ряде государственных информационных систем, в том числе в системе межведомственного электронного взаимодействия (СМЭВ), которая обеспечивает обмен данными между федеральными и региональными органами власти. СМЭВ использует SOAP-сообщения, передаваемые через защищённые каналы связи.
Критика и альтернативы
С середины 2000-х годов SOAP подвергается критике за избыточную сложность и низкую производительность по сравнению с REST (Representational State Transfer), который использует JSON и более простой подход к проектированию API. REST-сервисы легче в разработке, быстрее работают и требуют меньше ресурсов. В результате SOAP постепенно уступает позиции в веб-разработке, особенно в публичных API и мобильных приложениях.
Тем не менее, SOAP остаётся востребованным в корпоративном секторе, где важны строгая типизация, поддержка транзакций и стандартизированная безопасность. Многие крупные компании (Microsoft, IBM, Oracle) продолжают поддерживать SOAP в своих продуктах.
Интересные факты
- Первоначальное название протокола — XML-RPC — было изменено на SOAP по предложению Боба Аткинсона, чтобы избежать ассоциации с «RPC» (удалённый вызов процедур), которое уже использовалось в других технологиях.
- В версии SOAP 1.2 аббревиатура перестала расшифровываться — протокол официально называется просто «SOAP».
- SOAP поддерживает использование не только XML, но и других форматов (например, MIME для вложений), однако основной формат остаётся XML.
- В 2003 году W3C выпустил рекомендацию SOAP 1.2, которая сделала протокол более гибким, но при этом нарушила обратную совместимость с SOAP 1.1.
Источники
- W3C Recommendation «SOAP Version 1.2 Part 1: Messaging Framework» (2007)
- W3C Note «SOAP Version 1.1» (2000)
- Box, D., Ehnebuske, D., Kakivaya, G., et al. «Simple Object Access Protocol (SOAP) 1.1» (2000)
- Newcomer, E. «Understanding Web Services: XML, WSDL, SOAP, and UDDI» (2002)
- Документация Microsoft по Windows Communication Foundation (WCF)
- Материалы Минцифры России по системе межведомственного электронного взаимодействия (СМЭВ)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →