SOAP 1.2
SOAP 1.2 (изначально Simple Object Access Protocol, позже просто Service-Oriented Access Protocol) — это версия протокола обмена структурированными сообщениями в распределённых вычислительных средах, стандартизированная консорциумом W3C (World Wide Web Consortium). SOAP 1.2 является эволюционным развитием протокола SOAP 1.1 и предназначен для обеспечения взаимодействия между веб-сервисами (web services) независимо от платформы, операционной системы и языка программирования. Протокол определяет формат сообщений, правила их обработки и механизмы связывания с транспортными протоколами, чаще всего с HTTP и SMTP. Основное отличие SOAP 1.2 от предыдущей версии заключается в формальном уточнении спецификации, введении расширяемой архитектуры и улучшенной поддержке различных транспортных протоколов.
История и стандартизация
Предпосылки создания
Протокол SOAP был разработан в конце 1990-х годов компаниями Microsoft, DevelopMentor и UserLand Software как простой способ удалённого вызова процедур (RPC) через HTTP. Первая версия (SOAP 1.0) была опубликована в 1998 году, а SOAP 1.1 — в 2000 году. Однако спецификация 1.1 содержала ряд неоднозначностей и ограничений, что затрудняло её широкое внедрение и совместимость реализаций.
Разработка SOAP 1.2
В 2001 году W3C сформировал рабочую группу XML Protocol Working Group, которая занялась стандартизацией следующей версии протокола. Работа велась в тесном сотрудничестве с ведущими IT-компаниями, включая Microsoft, IBM, Sun Microsystems, Oracle и другие. Основными целями были:
- Устранение неоднозначностей спецификации SOAP 1.1.
- Улучшение поддержки различных транспортных протоколов, включая HTTP, SMTP, TCP и другие.
- Введение формальной модели обработки сообщений.
- Обеспечение расширяемости и модульности.
Публикация стандарта
SOAP 1.2 был принят в качестве рекомендации W3C (W3C Recommendation) 24 июня 2003 года. Документ состоял из трёх частей:
- Part 1: Messaging Framework — определяет структуру сообщений, модель обработки и основные понятия.
- Part 2: Adjuncts — описывает привязки к транспортным протоколам, включая HTTP, и механизмы RPC.
- Part 3: One-Way MEP (добавлен позже) — определяет шаблон обмена сообщениями «однонаправленный» (one-way).
В 2007 году была опубликована вторая редакция SOAP 1.2, которая исправляла ошибки и уточняла некоторые аспекты. На сегодняшний день SOAP 1.2 является последней стабильной версией протокола; разработка SOAP 1.3 не ведётся, так как стандарт считается завершённым.
Архитектура и основные понятия
Сообщение SOAP
Сообщение SOAP 1.2 представляет собой XML-документ, соответствующий определённой схеме. Структура сообщения включает:
- Конверт (Envelope) — корневой элемент, который содержит всё сообщение. В SOAP 1.2 пространство имён для конверта —
http://www.w3.org/2003/05/soap-envelope`. - Заголовок (Header) — необязательный элемент, содержащий метаданные, такие как аутентификационные данные, транзакционные идентификаторы, маршрутизацию и т.д. Заголовок может содержать несколько блоков, каждый из которых может быть помечен атрибутами
role(роль узла, который должен обработать блок) иmustUnderstand(обязательность обработки). - Тело (Body) — обязательный элемент, содержащий основную полезную нагрузку сообщения. В теле передаются данные запроса или ответа, а также информация об ошибках (Fault).
- Ошибка (Fault) — специальный элемент в теле, используемый для передачи информации об ошибках. В SOAP 1.2 структура Fault включает обязательные элементы
Code(код ошибки),Reason(человекочитаемое описание) и необязательныеNode,RoleиDetail.
Модель обработки
SOAP 1.2 определяет модель обработки сообщений, основанную на понятии узлов SOAP (SOAP nodes). Сообщение может проходить через несколько узлов, каждый из которых может выполнять определённые действия:
- Отправитель (Sender) — узел, создающий сообщение.
- Посредник (Intermediate) — узел, который может обрабатывать заголовки и пересылать сообщение дальше.
- Получатель (Receiver) — конечный узел, обрабатывающий тело сообщения.
Каждый блок заголовка может быть адресован определённому узлу с помощью атрибута role. В SOAP 1.2 определены три стандартные роли:
http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver` — конечный получатель.http://www.w3.org/2003/05/soap-envelope/role/next` — следующий узел в цепочке.http://www.w3.org/2003/05/soap-envelope/role/none` — блок не предназначен для обработки ни одним узлом (используется для хранения данных).
Шаблоны обмена сообщениями (MEP)
SOAP 1.2 поддерживает несколько шаблонов обмена сообщениями:
- Request-Response — запрос-ответ: отправитель посылает запрос, получатель возвращает ответ.
- One-Way — однонаправленный: отправитель посылает сообщение без ожидания ответа.
- Notification — уведомление: отправитель посылает сообщение нескольким получателям (реализуется через посредников).
Привязки к транспортным протоколам
HTTP-привязка
Наиболее распространённой привязкой SOAP 1.2 является HTTP. Спецификация определяет:
- SOAPAction — в SOAP 1.2 этот HTTP-заголовок стал необязательным, в отличие от SOAP 1.1, где он был обязательным.
- Content-Type — для SOAP 1.2 используется
application/soap+xml(вместоtext/xmlв SOAP 1.1). Это позволяет отличать SOAP-сообщения от обычных XML-документов. - HTTP-методы — обычно используется POST, но возможен и GET для однонаправленных сообщений.
Другие привязки
Хотя спецификация SOAP 1.2 описывает только привязку к HTTP, архитектура протокола позволяет создавать привязки к другим транспортным протоколам, таким как SMTP (электронная почта), TCP, JMS (Java Message Service) и другим. На практике такие привязки используются реже, но они поддерживаются в некоторых реализациях.
Отличия от SOAP 1.1
Основные отличия SOAP 1.2 от SOAP 1.1:
| Характеристика | SOAP 1.1 | SOAP 1.2 |
|---|---|---|
| Пространство имён | http://schemas.xmlsoap.org/soap/envelope/` | http://www.w3.org/2003/05/soap-envelope` |
| Content-Type | text/xml | application/soap+xml |
| SOAPAction | Обязательный HTTP-заголовок | Необязательный |
| Модель ошибок | Простая структура Fault | Расширенная структура Fault с кодом, причиной, узлом и деталями |
| Роли узлов | Не формализованы | Формально определены три стандартные роли |
| Поддержка MEP | Только request-response | Request-response, one-way, notification |
| Расширяемость | Ограниченная | Модульная архитектура с возможностью добавления новых функций |
Применение и значение
Интеграция корпоративных систем
SOAP 1.2 широко применяется в корпоративных информационных системах для интеграции различных приложений, особенно в среде Java (JAX-WS) и .NET (Windows Communication Foundation). Протокол обеспечивает надёжную передачу данных, поддержку транзакций, безопасности (через WS-Security) и других расширений.
Веб-сервисы
SOAP 1.2 является основой для многих веб-сервисов, особенно в сферах, где требуется строгая типизация, безопасность и поддержка сложных бизнес-процессов. В отличие от REST, SOAP обеспечивает формальное описание интерфейса через WSDL (Web Services Description Language).
Критика и ограничения
Несмотря на широкое распространение, SOAP 1.2 подвергается критике за:
- Избыточность — XML-сообщения могут быть очень объёмными, что увеличивает трафик и время обработки.
- Сложность — полный стек WS-* (WS-Security, WS-AtomicTransaction и др.) требует значительных вычислительных ресурсов и сложен в реализации.
- Низкая производительность — по сравнению с REST/JSON, SOAP обычно медленнее из-за парсинга XML и дополнительных заголовков.
В результате с конца 2000-х годов наблюдается тенденция к переходу на RESTful веб-сервисы, особенно в мобильных и веб-приложениях. Однако SOAP 1.2 остаётся востребованным в финансовом секторе, телекоммуникациях, государственных информационных системах и других областях, где требуется высокая надёжность и соответствие стандартам.
Интересные факты
- Название «Simple Object Access Protocol» было признано неудачным, так как протокол не является простым и не ограничивается доступом к объектам. Начиная с SOAP 1.2, аббревиатура перестала расшифровываться.
- SOAP 1.2 стал первым протоколом веб-сервисов, получившим статус рекомендации W3C.
- В 2004 году компания Microsoft выпустила реализацию SOAP 1.2 в составе Windows Communication Foundation (WCF), что способствовало его широкому внедрению.
- SOAP 1.2 поддерживает не только RPC-стиль, но и документо-ориентированный обмен сообщениями, что делает его гибким для различных сценариев.
Источники
- W3C Recommendation: SOAP Version 1.2 Part 1: Messaging Framework (Second Edition) — 2007
- W3C Recommendation: SOAP Version 1.2 Part 2: Adjuncts (Second Edition) — 2007
- W3C Note: SOAP Version 1.2 Part 3: One-Way MEP — 2004
- Box, D., Ehnebuske, D., Kakivaya, G., et al. (2000). Simple Object Access Protocol (SOAP) 1.1. W3C Note.
- Snell, J., Tidwell, D., & Kulchenko, P. (2002). Programming Web Services with SOAP. O'Reilly Media.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →