SOAP 1.1
SOAP 1.1 (Simple Object Access Protocol, версия 1.1) — это сетевой протокол для обмена структурированными сообщениями в распределённых вычислительных средах, основанный на языке XML. Он был разработан для обеспечения взаимодействия между программными компонентами, написанными на разных языках программирования и работающими на различных платформах, независимо от используемых операционных систем и сетевых протоколов. SOAP 1.1 является одной из ключевых технологий веб-сервисов (Web Services), наряду с WSDL (Web Services Description Language) и UDDI (Universal Description, Discovery and Integration).
История
Протокол SOAP был создан компаниями Microsoft, DevelopMentor и UserLand Software в 1998–1999 годах. Первоначально он назывался XML-RPC (XML Remote Procedure Call) и предназначался для упрощения удалённого вызова процедур через HTTP. В 2000 году была опубликована спецификация SOAP 1.1, которая была представлена на рассмотрение консорциуму World Wide Web Consortium (W3C). В 2003 году W3C опубликовал рекомендацию SOAP 1.2, которая является более строгой и расширенной версией протокола, однако SOAP 1.1 остаётся широко используемым в промышленных решениях, особенно в корпоративных системах, построенных на платформе Microsoft .NET и Java EE.
Архитектура и принципы работы
SOAP 1.1 представляет собой протокол прикладного уровня, который может работать поверх различных транспортных протоколов, таких как HTTP, SMTP, TCP и JMS. Наиболее распространённым является использование HTTP, так как он позволяет преодолевать ограничения межсетевых экранов (firewalls) и прокси-серверов.
Сообщение SOAP
Сообщение SOAP 1.1 — это XML-документ, который состоит из следующих элементов:
- Envelope (конверт) — корневой элемент, который обязательно присутствует в каждом сообщении. Он идентифицирует документ как сообщение SOAP и содержит пространство имён (namespace) для версии протокола (
http://schemas.xmlsoap.org/soap/envelope/`). - Header (заголовок) — необязательный элемент, который может содержать метаданные, такие как аутентификационные данные, информацию о маршрутизации, транзакциях или управлении сессиями. Заголовок может быть обработан либо промежуточными узлами (intermediaries), либо конечным получателем.
- Body (тело) — обязательный элемент, который содержит собственно данные сообщения: либо запрос на вызов метода (RPC), либо ответ на него, либо сообщение об ошибке (Fault).
- Fault (ошибка) — необязательный элемент, который может присутствовать только в теле сообщения и используется для передачи информации об ошибках, возникших при обработке сообщения. Он содержит код ошибки, строку описания и, опционально, дополнительные сведения.
Пример структуры сообщения SOAP 1.1
``xml <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <auth:Authentication xmlns:auth="http://example.com/auth"> <auth:Username>user</auth:Username> <auth:Password>pass</auth:Password> </auth:Authentication> </soap:Header> <soap:Body> <m:GetWeather xmlns:m="http://example.com/weather"> <m:City>Москва</m:City> </m:GetWeather> </soap:Body> </soap:Envelope> ``
Модель обработки
SOAP 1.1 определяет модель обработки сообщений, основанную на концепции «узлов» (nodes). Узлы могут быть:
- Отправитель (sender) — создаёт сообщение.
- Получатель (receiver) — конечный потребитель сообщения.
- Промежуточный узел (intermediary) — обрабатывает заголовки и может модифицировать или перенаправлять сообщение.
Каждый узел, обрабатывающий сообщение, должен следовать правилам, определённым в спецификации, включая проверку обязательных заголовков и обработку ошибок.
Кодирование и привязка к транспорту
Кодирование данных
SOAP 1.1 поддерживает два стиля кодирования:
- RPC/encoded — данные сериализуются в соответствии с правилами, определёнными в спецификации SOAP (Section 5). Этот стиль предполагает использование определённых правил для представления массивов, структур и ссылок.
- Document/literal — тело сообщения содержит произвольный XML-документ, который не обязательно соответствует правилам кодирования SOAP. Этот стиль является более гибким и широко используется в современных реализациях.
Привязка к HTTP
При использовании HTTP в качестве транспортного протокола, SOAP 1.1 определяет следующие правила:
- Запрос (Request): HTTP-запрос POST с заголовком
Content-Type: text/xml; charset=utf-8. Тело запроса содержит сообщение SOAP. - Ответ (Response): HTTP-ответ с кодом 200 OK (в случае успеха) или 500 Internal Server Error (в случае ошибки SOAP). Тело ответа содержит сообщение SOAP с результатом или ошибкой.
- Заголовок SOAPAction: обязательный HTTP-заголовок, который указывает на цель запроса (например, URI метода). Он используется для маршрутизации и фильтрации запросов.
Преимущества и недостатки
Преимущества
- Платформенная независимость: SOAP 1.1 работает на любых платформах, поддерживающих XML и HTTP.
- Расширяемость: через заголовки можно добавлять поддержку безопасности, транзакций, надёжной доставки и других корпоративных функций.
- Строгая типизация: использование WSDL позволяет строго описывать интерфейсы веб-сервисов, что облегчает интеграцию в крупных системах.
- Поддержка стандартов: SOAP 1.1 интегрируется с такими стандартами, как WS-Security, WS-AtomicTransaction, WS-ReliableMessaging.
Недостатки
- Избыточность: XML-сообщения SOAP 1.1 имеют большой объём по сравнению с более лёгкими протоколами, такими как REST (Representational State Transfer) или gRPC.
- Сложность: реализация и отладка SOAP-сервисов требуют больше усилий, чем RESTful-сервисов.
- Производительность: из-за парсинга XML и дополнительных накладных расходов на обработку заголовков, SOAP 1.1 уступает по скорости более современным протоколам.
- Зависимость от HTTP: хотя SOAP может работать поверх других протоколов, на практике он почти всегда привязан к HTTP, что ограничивает его применение в некоторых сценариях.
Применение
SOAP 1.1 активно используется в корпоративных информационных системах, где требуется высокая надёжность, безопасность и поддержка сложных транзакций. Типичные области применения:
- Финансовые системы: обработка платежей, обмен данными между банками.
- Государственные информационные системы: взаимодействие между ведомствами, например, в системах электронного документооборота.
- Телекоммуникации: управление услугами, биллинг.
- Промышленность: интеграция ERP-систем (Enterprise Resource Planning) и CRM-систем (Customer Relationship Management).
В России SOAP 1.1 применяется в ряде государственных информационных систем, таких как Единая система межведомственного электронного взаимодействия (СМЭВ), а также в корпоративных решениях крупных компаний.
Критика и альтернативы
С развитием веб-технологий SOAP 1.1 подвергался критике за излишнюю сложность и громоздкость. Многие разработчики перешли на использование RESTful-сервисов, которые основаны на простых HTTP-методах (GET, POST, PUT, DELETE) и используют JSON (JavaScript Object Notation) вместо XML. Также появились более производительные протоколы, такие как gRPC (основанный на Protocol Buffers) и GraphQL.
Тем не менее, SOAP 1.1 остаётся востребованным в legacy-системах и в сценариях, где требуется строгая контрактная модель и поддержка сложных корпоративных стандартов.
Источники
- Simple Object Access Protocol (SOAP) 1.1. W3C Note, 8 May 2000. — World Wide Web Consortium.
- SOAP Version 1.2 Part 1: Messaging Framework (Second Edition). W3C Recommendation, 27 April 2007.
- Web Services Description Language (WSDL) 1.1. W3C Note, 15 March 2001.
- XML Schema Part 1: Structures (Second Edition). W3C Recommendation, 28 October 2004.
- Спецификация SOAP 1.1 (русскоязычный перевод). — Microsoft Corporation, 2000.
- Электронные услуги: СМЭВ 3.0. — Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →