Открыть сервис

Конверт SOAP

SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) — это протокол обмена структурированными сообщениями в распределённой вычислительной среде, основанный на языке XML. Первоначально SOAP был разработан для вызова удалённых процедур (RPC) поверх сетевых протоколов, таких как HTTP и SMTP, однако со временем его применение расширилось на передачу произвольных данных в сервис-ориентированной архитектуре (SOA) и веб-сервисах. Формат сообщения SOAP, называемый «конвертом», является фундаментальной единицей этого протокола, жёстко регламентирующей структуру передаваемого XML-документа.

История

Протокол SOAP был создан в 1998 году в компании Microsoft. Первая спецификация (SOAP 1.0) была предложена в декабре 1999 года, а версия 1.1, разработанная совместно Microsoft, DevelopMentor и UserLand Software, стала официальным документом в 2000 году. В 2003 году W3C (Консорциум Всемирной паутины) выпустил рекомендацию SOAP 1.2, которая существенно изменила идеологию протокола: он перестал быть исключительно протоколом для RPC, превратившись в универсальный механизм обмена сообщениями. В версии 1.2 также был официально введён термин «конверт» (англ. envelope) как центральный элемент обработки сообщений.

С 2013 года интерес к SOAP начал снижаться в пользу более лёгких RESTful-сервисов, но протокол по-прежнему широко используется в корпоративных системах, финансовых и государственных информационных системах, где требуется строгая типизация и гарантии доставки сообщений.

Структура сообщения

Любое сообщение SOAP представляет собой строго структурированный XML-документ, который обязательно содержит три основных элемента:

  1. Конверт (Envelope)корневой элемент, который идентифицирует документ как сообщение SOAP. Атрибуты конверта задают пространства имён (namespace) и версию протокола.
  2. Заголовок (Header) — необязательный элемент, содержащий метаданные об сообщении: маршрутизацию, аутентификацию, транзакции, цифровые подписи и прочие управляющие данные.
  3. Тело (Body) — обязательный элемент, в котором передаются собственно данные вызова или ответа (например, параметры удалённой процедуры или результаты выполнения).

Пример простейшего конверта SOAP: ``xml <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">; <soap:Header> <t:Transaction xmlns:t="http://example.com/transaction">12345</t:Transaction>; </soap:Header> <soap:Body> <AddRequest xmlns="http://example.com/calc">; <OperandA>5</OperandA> <OperandB>3</OperandB> </AddRequest> </soap:Body> </soap:Envelope> ``

Правила структуры

Обработка конверта

Каждый конверт SOAP обрабатывается стеком протоколов (SOAP Processor), который включает следующие шаги:

  1. Парсинг XML — конверт читается как обычный XML-документ.
  2. Проверка структуры — верифицируется корректность вложенности, пространств имён и наличие обязательных блоков.
  3. Обработка заголовка — модули (например, для проверки подписи или маршрутизации) извлекают элементы заголовка и применяют соответствующие политики.
  4. Обработка тела — данные тела извлекаются и передаются на уровень бизнес-логики (веб-сервиса).
  5. Формирование ответа — результат (или ошибка) упаковывается в новый конверт SOAP и отправляется обратно.

Версии

В настоящее время используются две основные версии SOAP: 1.1 и 1.2. Они различаются пространствами имён и некоторыми правилами обработки:

Версия 1.2 ввела понятие «конверт без заголовка» (только Envelope и Body) как допустимый вариант, что упрощает совместимость. Кроме того, в 1.2 переопределён элемент Fault: теперь он содержит обязательный код ошибки (Code), подкод (Subcode) и детали (Detail).

Применение конверта SOAP

Основное применение конверта SOAP — это инкапсуляция вызовов веб-сервисов в протоколах транспортного уровня. Наиболее часто используется поверх HTTP, поскольку конверт SOAP может без проблем передаваться в теле HTTP-запроса (POST) или ответа (200 OK). Однако возможна передача через SMTP (электронная почта), JMS (Java Message Service) и другие протоколы.

Примеры использования в России

  • В российской государственной системе межведомственного электронного взаимодействия (СМЭВ) для передачи запросов используется SOAP с привязкой к HTTP. Конверты содержат метаданные о поставщике услуги (СНИЛС, ИНН) и подписываются электронной цифровой подписью.
  • В платформе «Госуслуги» для обмена данными с ведомствами (например, получение сведений из ФНС) применяются SOAP-сообщения, упакованные в TLS-туннель.
  • Многие ERP-системы (1С, SAP) при интеграции с внешними сервисами также используют конверты SOAP для вызова удалённых процедур.

Обработка ошибок

Если при обработке конверта возникает проблема, веб-сервис возвращает ответ, содержащий элемент Fault в теле. Стандартный элемент Fault (SOAP 1.2) включает:

  • Code — код ошибки (например, env:Sender при некорректных данных отправителя, env:Receiver при внутренней ошибке сервера).
  • Reason — текстовое описание на выбранном языке.
  • Detail — дополнительные сведения (например, стектрейс).

Пример Fault: ``xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">; <soap:Body> <soap:Fault> <soap:Code> <soap:Value>soap:Sender</soap:Value> </soap:Code> <soap:Reason> <soap:Text xml:lang="ru">Неверный идентификатор операции</soap:Text> </soap:Reason> </soap:Fault> </soap:Body> </soap:Envelope> ``

Критика и ограничения

Конверт SOAP часто критикуется за избыточность и сложность по сравнению с альтернативами (REST/JSON). Основные недостатки:

  • Большой объём сообщений — из-за обязательного XML-конверта и заголовков даже простая команда занимает от нескольких сотен байт.
  • Сложность отладки — трудоёмкость трассировки взаимодействий из-за множества вложенных пространств имён.
  • Порог входа — требуется понимание WSDL (Web Services Description Language), пространств имён и схем XML.

В то же время для систем, где критична проверяемость схемы, строгая типизация и безопасность (финансовые транзакции, государственные реестры), конверт SOAP остаётся де-факто стандартом. В России, при создании ведомственных систем, ориентированных на СМЭВ, SOAP сохраняет доминирующее положение.

Связь с другими протоколами

  • REST — альтернативный подход, где данные передаются в форматах JSON, XML или plain text без конверта. Проще, быстрее, но не гарантирует строгой структуры.
  • XML-RPC — прямой предшественник SOAP, не использующий конверт, а только тело с вызовом процедуры.
  • WSDL — язык описания веб-сервисов, который определяет структуру конвертов SOAP для конкретного сервиса.

Источники

  • W3C: SOAP Version 1.2 Part 1: Messaging Framework (Second Edition), 2007.
  • W3C: SOAP Version 1.1, 2000.
  • «XML: Спецификация SOAP 1.2» — перевод руководства W3C, 2004.
  • «Веб-сервисы и SOAP» — учебник для вузов под редакцией А. Б. Долгих, 2005.
  • Книга «Java Web Services: Up and Running» М. Калински, O’Reilly, 2009.
  • Документация СМЭВ — Методические рекомендации по разработке электронных сервисов с использованием SOAP, Минцифры России, 2018.
  • Статья «SOAP vs REST: что выбрать» — журнал «Системный администратор», №5, 2020.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →