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

SOAP Envelope

SOAP Envelope — это корневой элемент XML-документа, который используется в протоколе SOAP (Simple Object Access Protocol) для обмена структурированными сообщениями между распределёнными приложениями в компьютерных сетях. Envelope (конверт) является обязательной частью любого SOAP-сообщения и определяет его границы, а также содержит всю остальную информацию: заголовки и тело сообщения. Формат SOAP Envelope строго регламентирован спецификациями консорциума W3C (World Wide Web Consortium).

Структура SOAP Envelope

SOAP-сообщение представляет собой XML-документ, корневым элементом которого является <Envelope>. Внутри него располагаются два основных дочерних элемента: необязательный <Header> и обязательный <Body>. Все элементы должны принадлежать пространству имён http://schemas.xmlsoap.org/soap/envelope/ (для SOAP 1.1) или http://www.w3.org/2003/05/soap-envelope (для SOAP 1.2).

Элемент Envelope

Элемент <Envelope> является корневым. Он может содержать атрибуты, определяющие пространства имён (например, xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/") и кодировку. В SOAP 1.2 также допускается атрибут encodingStyle`, указывающий на правила сериализации данных.

Элемент Header

Элемент <Header> является необязательным. Он предназначен для передачи дополнительной информации, не относящейся непосредственно к основным данным запроса или ответа. В заголовке могут передаваться:

  • Аутентификационные данные (логин, пароль, токены).
  • Идентификаторы транзакций.
  • Информация о маршрутизации (промежуточные узлы обработки).
  • Сведения о времени жизни сообщения (timeout).
  • Данные для обеспечения безопасности (цифровые подписи, шифрование).

Каждый дочерний элемент заголовка может содержать атрибут actor (в SOAP 1.1) или role (в SOAP 1.2), указывающий на конкретный узел, для которого предназначен этот заголовок. Атрибут mustUnderstand (со значением 1 или true) указывает, что получатель обязан обработать данный заголовок; в противном случае сообщение будет отвергнуто.

Элемент Body

Элемент <Body> является обязательным. Он содержит основное содержимое SOAP-сообщения — фактические данные запроса или ответа. Внутри <Body> размещаются:

  • Данные вызова (для запросов): имя метода и его параметры.
  • Результаты выполнения (для ответов): возвращаемые значения.
  • Данные об ошибках: элемент <Fault> (только для сообщений об ошибках).

Элемент <Fault> (необязательный) используется для передачи информации об ошибках, возникших при обработке сообщения. Он содержит подэлементы:

  • <faultcode> — код ошибки (например, VersionMismatch, MustUnderstand, Client, Server).
  • <faultstring> — текстовое описание ошибки.
  • <faultactor> — URI узла, вызвавшего ошибку (необязательно).
  • <detail> — дополнительные сведения об ошибке (необязательно).

Версии протокола SOAP

Существует две основные версии спецификации SOAP, которые различаются требованиями к структуре Envelope.

SOAP 1.1

Спецификация SOAP 1.1 была опубликована в 2000 году. Пространство имён для Envelope: http://schemas.xmlsoap.org/soap/envelope/. Используется атрибут actor для указания адресата заголовка. Элемент <Fault>` имеет строго фиксированную структуру. SOAP 1.1 широко применялся в ранних веб-сервисах, основанных на XML-RPC и WSDL.

SOAP 1.2

Спецификация SOAP 1.2 стала рекомендацией W3C в 2003 году. Пространство имён: http://www.w3.org/2003/05/soap-envelope. Введён атрибут role вместо actor, а также атрибут relay для заголовков. Структура <Fault> стала более гибкой: появились подэлементы <Code>, <Reason>, <Node>, <Role>, <Detail>`. SOAP 1.2 обеспечивает лучшую поддержку стандартов безопасности и веб-сервисных расширений (WS-*).

Пример SOAP-сообщения

Ниже приведён пример простого SOAP-запроса (SOAP 1.1), отправляемого для вызова метода GetCityWeatherByZIP (получение погоды по почтовому индексу):

``xml <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:web="http://www.example.com/weather">; <soap:Header> <web:AuthToken soap:mustUnderstand="1">abc123</web:AuthToken> </soap:Header> <soap:Body> <web:GetCityWeatherByZIP> <web:ZIP>12345</web:ZIP> </web:GetCityWeatherByZIP> </soap:Body> </soap:Envelope> ``

Ответ на такой запрос может выглядеть следующим образом:

``xml <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">; <soap:Body> <web:GetCityWeatherByZIPResponse xmlns:web="http://www.example.com/weather">; <web:City>Springfield</web:City> <web:Temperature>22</web:Temperature> <web:Condition>Sunny</web:Condition> </web:GetCityWeatherByZIPResponse> </soap:Body> </soap:Envelope> ``

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

Если при обработке запроса возникает ошибка, сервер возвращает SOAP-сообщение с элементом <Fault> внутри <Body>. Пример сообщения с ошибкой (SOAP 1.1):

``xml <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">; <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>Database connection failed</faultstring> <detail> <error:details xmlns:error="http://www.example.com/errors">; <error:code>DB_ERR_001</error:code> </error:details> </detail> </soap:Fault> </soap:Body> </soap:Envelope> ``

Применение

SOAP Envelope используется в веб-сервисах, построенных на протоколе SOAP. Такие сервисы широко применяются в корпоративных информационных системах, где требуется надёжный, стандартизированный обмен данными с поддержкой транзакций, безопасности и маршрутизации. SOAP-сообщения могут передаваться по различным транспортным протоколам, включая HTTP, SMTP, JMS и TCP. В отличие от RESTful-сервисов, которые часто используют JSON, SOAP всегда использует XML и требует строгого соблюдения структуры сообщения, что обеспечивает высокую степень формализации и проверяемости.

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

Несмотря на широкое распространение в прошлом, SOAP (и, соответственно, SOAP Envelope) подвергается критике за избыточную сложность. Основные недостатки:

  • Громоздкость XML-разметки — каждое сообщение требует большого объёма служебных данных.
  • Сложность реализации — требует строгого соблюдения спецификаций и часто — использования специализированных библиотек.
  • Низкая производительность — по сравнению с более лёгкими форматами, такими как JSON или Protobuf.
  • Плохая совместимость с веб-технологиями — SOAP-сообщения сложнее кэшировать и обрабатывать в браузерах.

В результате в 2010-х годах SOAP в значительной мере уступил место RESTful-архитектуре и формату JSON, особенно в публичных API. Однако в некоторых корпоративных и государственных системах, в том числе в России, SOAP продолжает использоваться, например, в системах электронного документооборота, банковских протоколах и интеграции с государственными информационными системами (ГИС).

Источники

  • W3C. SOAP Version 1.2 Part 1: Messaging Framework (Second Edition). 2007.
  • W3C. Simple Object Access Protocol (SOAP) 1.1. 2000.
  • Box, D., et al. Simple Object Access Protocol (SOAP) 1.1. W3C Note, 2000.
  • Gudgin, M., et al. SOAP Version 1.2 Part 2: Adjuncts. W3C Recommendation, 2003.
  • Snell, J., Tidwell, D., Kulchenko, P. Programming Web Services with SOAP. O'Reilly Media, 2002.

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

На главную BFOmetr →