← Назад к вопросам

Что такое SOAP?

1.2 Junior🔥 181 комментариев
#API и интеграции#Форматы данных и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

SOAP: Протокол обмена сообщениями

SOAP (Simple Object Access Protocol) — это протокол для обмена структурированными данными в децентрализованной распределённой среде, основанный на XML. Разработан в конце 1990-х годов и стандартизирован W3C. Несмотря на своё название (Simple), SOAP — достаточно сложный протокол с развитой функциональностью.

История и контекст

SOAP был создан как ответ на необходимость стандартизированного способа вызова функций на удалённых компьютерах через интернет, похожего на RPC (Remote Procedure Call). К середине 2000-х SOAP был одним из основных способов создания веб-сервисов, но в современной архитектуре его позиции ослабли в пользу RESTful API и GraphQL.

Основные характеристики SOAP

1. XML-основанный

Все сообщения SOAP сериализуются в XML, что делает их человекочитаемыми и универсальными:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetUser xmlns="http://example.com/service">
      <userId>123</userId>
    </GetUser>
  </soap:Body>
</soap:Envelope>

2. Требует определения (WSDL)

Каждый SOAP сервис описывается в WSDL (Web Services Description Language) файле, который определяет доступные операции, параметры и возвращаемые типы:

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:service name="UserService">
    <wsdl:port name="UserServicePort" binding="tns:UserServiceBinding">
      <soap:address location="http://example.com/soap"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

3. Протокол-независимый

SOAP может использоваться не только с HTTP, но и с SMTP, FTP и другими протоколами передачи (хотя HTTP наиболее распространён).

4. Строго типизирован

Через XSD (XML Schema Definition) можно определить точные типы данных и структуры, что снижает вероятность ошибок.

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

SOAP Envelope (конверт)
├── SOAP Header (опционально)
│   └── Вспомогательная информация (авторизация, маршрутизация)
└── SOAP Body
    └── Request или Response

Пример запроса и ответа

Запрос:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:web="http://example.com/webservice">
  <soap:Header>
    <web:Authentication>
      <web:ApiKey>secret123</web:ApiKey>
    </web:Authentication>
  </soap:Header>
  <soap:Body>
    <web:AddNumbers>
      <web:a>5</web:a>
      <web:b>3</web:b>
    </web:AddNumbers>
  </soap:Body>
</soap:Envelope>

Ответ:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:web="http://example.com/webservice">
  <soap:Body>
    <web:AddNumbersResponse>
      <web:result>8</web:result>
    </web:AddNumbersResponse>
  </soap:Body>
</soap:Envelope>

SOAP vs REST

ПараметрSOAPREST
Тип данныхXMLJSON (чаще), XML
ПротоколПротокол поверх HTTP/SMTP/FTPАрхитектурный стиль для HTTP
СложностьВысокаяНизкая
ПроизводительностьНиже (большой объём XML)Выше (компактный JSON)
КэшированиеСложноеВстроенное HTTP кэширование
СтандартизацияСтрогая (WSDL, XSD)Рекомендации (OpenAPI)
ИспользованиеКорпоративные системы, банкиВеб-приложения, публичные API
БезопасностьWS-Security, SAMLHTTPS, OAuth 2.0

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

  • Формализм: WSDL автоматически генерирует клиентский код (code generation)
  • Надёжность: SOAP имеет встроенную обработку ошибок через SOAP Faults
  • Безопасность: WS-Security, подписание сообщений, шифрование
  • Стандартизация: W3C спецификация, поддержка в enterprise tools
  • Трансакции: поддержка ACID транзакций через WS-AtomicTransaction
  • Масштабируемость в большинстве enterprise сценариев

Недостатки SOAP

  • Сложность: требует понимания XML, WSDL, XSD
  • Производительность: XML тяжелее JSON, требует парсинга
  • Многословность: большой объём данных при передаче
  • Сложность отладки: невозможно просто открыть в браузере
  • Жёсткость: сложнее добавлять новые поля без нарушения совместимости
  • Кривая обучения: выше для новых разработчиков

Где SOAP ещё используется

  • Финансовые системы — банки, платёжные системы (SWIFT, 1C)
  • Телекомм — системы биллинга, авторизация
  • Government — государственные системы, налоговые сервисы
  • Legacy системы — старые корпоративные приложения
  • Enterprise Integration — интеграция между большими корпоративными системами

Инструменты для работы с SOAP

  • Java: Apache Axis2, CXF, METRO
  • C#: WCF (Windows Communication Foundation)
  • Python: zeep, suds-community
  • Node.js: soap npm пакет
  • Тестирование: SoapUI, Postman

Современная тенденция

В новых проектах SOAP практически не используется. Индустрия перешла на RESTful API и GraphQL благодаря их простоте, производительности и удобству для веб-приложений. Однако SOAP остаётся де-факто стандартом в крупных enterprise системах и государственных учреждениях.