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

Протокол SOAP

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

История

Протокол SOAP был разработан компаниями Microsoft, DevelopMentor и UserLand Software. Первая версия спецификации (SOAP 0.9) была опубликована в сентябре 1999 года. В 2000 году вышла версия 1.1, которая была передана на рассмотрение в Консорциум Всемирной паутины (W3C). После длительного процесса стандартизации в 2003 году была опубликована версия 1.2, которая стала официальным рекомендацией W3C. В 2007 году вышла вторая редакция этой версии, которая остаётся актуальной на 2025 год.

Изначально протокол назывался Simple Object Access Protocol, однако начиная с версии 1.2 официальное название было сокращено до просто «SOAP», поскольку первоначальная аббревиатура перестала отражать суть протокола — он вышел за рамки «простого» и перестал быть привязанным исключительно к объектной модели.

Архитектура и принципы работы

SOAP основан на модели «запрос-ответ», хотя поддерживает и однонаправленную передачу сообщений. Сообщение SOAP представляет собой XML-документ, который состоит из следующих элементов:

Транспортные протоколы

Хотя SOAP не привязан к какому-либо конкретному транспортному протоколу, наиболее распространённым является использование HTTP. При этом SOAP-сообщение передаётся в теле HTTP-запроса (обычно POST), а заголовки HTTP используются для указания типа содержимого (Content-Type: text/xml для SOAP 1.1 или application/soap+xml для SOAP 1.2). Также возможно использование SMTP, JMS, TCP и других протоколов.

Привязки (Bindings)

SOAP определяет набор правил для использования с различными транспортными протоколами, называемых привязками. Наиболее известны:

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

Существует две основные версии SOAP, которые не полностью совместимы между собой:

SOAP 1.1

SOAP 1.2

  • Использует пространство имён http://www.w3.org/2003/05/soap-envelope`.
  • Тип содержимого — application/soap+xml.
  • Уточнена модель обработки заголовков и ошибок.
  • Введены новые коды ошибок (DataEncodingUnknown, MustUnderstand, Sender, Receiver).
  • Добавлена поддержка протокола HTTP 1.1 с использованием методов GET и POST.
  • Улучшена поддержка промежуточных узлов (intermediaries).

Стиль сообщений и использование

SOAP поддерживает два основных стиля взаимодействия:

RPC-стиль (Remote Procedure Call)

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

Document-стиль (Документный)

Сообщение содержит произвольный XML-документ, структура которого определяется схемой (XSD). Этот стиль более гибок и позволяет передавать сложные структуры данных. Он стал стандартом для современных веб-служб.

Кроме того, различают два режима кодирования:

  • Encoded — данные кодируются по правилам, определённым в спецификации SOAP (используется в RPC-стиле).
  • Literal — данные передаются в точном соответствии с XML-схемой (используется в Document-стиле).

WSDL и SOAP

Для описания веб-служб, использующих SOAP, применяется язык WSDL (Web Services Description Language). WSDL-документ определяет:

  • Типы данных (с использованием XSD).
  • Сообщения (входные и выходные).
  • Операции (методы).
  • Привязки (как SOAP-сообщение будет передаваться по сети).
  • Адрес конечной точки (endpoint).

WSDL позволяет автоматически генерировать клиентский код для различных языков программирования.

Преимущества и недостатки

Преимущества

  • Платформонезависимость — SOAP работает с любым языком программирования и операционной системой.
  • Расширяемость — через заголовки можно добавлять любые метаданные (безопасность, транзакции, маршрутизация).
  • Стандартизация — протокол является рекомендацией W3C, что обеспечивает совместимость реализаций.
  • Поддержка сложных сценариев — транзакции, асинхронная обработка, маршрутизация через промежуточные узлы.
  • Встроенная обработка ошибок — элемент Fault предоставляет структурированную информацию об ошибках.

Недостатки

  • Избыточность — XML-формат приводит к большому объёму сообщений по сравнению с JSON или бинарными протоколами.
  • Сложность — протокол требует значительных вычислительных ресурсов для разбора XML и реализации всей спецификации.
  • Низкая скорость — из-за объёма данных и необходимости парсинга XML производительность ниже, чем у более лёгких протоколов (например, REST с JSON).
  • Сложность отладки — XML-сообщения трудно читать и отлаживать без специальных инструментов.
  • Меньшая популярность — с середины 2010-х годов REST и gRPC вытеснили SOAP из многих областей, особенно в веб-разработке.

Применение

Несмотря на снижение популярности, SOAP продолжает использоваться в следующих областях:

  • Корпоративные системы — в банковской сфере, страховании, телекоммуникациях, где требуется строгая стандартизация и поддержка транзакций.
  • Унаследованные системы (legacy) — многие старые веб-службы до сих пор работают на SOAP.
  • Интеграция с Microsoft .NET — платформа .NET имеет встроенную поддержку SOAP (Windows Communication Foundation).
  • Стандарты безопасности — протоколы WS-Security, WS-Trust, WS-Federation построены на основе SOAP.
  • Системы электронного документооборота — например, в России протокол SOAP используется в системе межведомственного электронного взаимодействия (СМЭВ).

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

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

``xml <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:web="http://www.example.com/currency">; <soap:Header/> <soap:Body> <web:GetCurrencyRate> <web:CurrencyCode>USD</web:CurrencyCode> </web:GetCurrencyRate> </soap:Body> </soap:Envelope> ``

Пример ответа с ошибкой:

``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>Currency code not found</faultstring> <detail> <error>Invalid currency code: USDX</error> </detail> </soap:Fault> </soap:Body> </soap:Envelope> ``

Критика и альтернативы

Основная критика SOAP связана с его сложностью и избыточностью. В современной веб-разработке предпочтение отдаётся REST (Representational State Transfer), который использует JSON и HTTP-методы (GET, POST, PUT, DELETE) для более простого и быстрого взаимодействия. Также набирает популярность gRPC, использующий бинарный протокол Protobuf и обеспечивающий высокую производительность.

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

Источники

  1. W3C Recommendation: SOAP Version 1.2 Part 1: Messaging Framework (Second Edition), 2007.
  2. W3C Note: SOAP Version 1.1, 2000.
  3. Box, D., Ehnebuske, D., Kakivaya, G., Layman, A., Mendelsohn, N., Nielsen, H.F., Thatte, S., Winer, D. «Simple Object Access Protocol (SOAP) 1.1», 2000.
  4. Snell, J., Tidwell, D., Kulchenko, P. «Programming Web Services with SOAP», O'Reilly Media, 2002.
  5. Weerawarana, S., Curbera, F., Leymann, F., Storey, T., Ferguson, D.F. «Web Services Platform Architecture: SOAP, WSDL, WS-Policy, WS-Addressing, WS-BPEL, and More», Prentice Hall, 2005.

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

На главную BFOmetr →