Что такое протокол SOAP?

«Что такое протокол SOAP?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые характеристики:

  • XML-основа: Все сообщения (запросы и ответы) оформляются в виде XML-документов.
  • WSDL (Web Services Description Language): Контракт сервиса, описывающий доступные операции, типы данных, форматы сообщений и адреса конечных точек (endpoints). WSDL-файл используется для автоматической генерации клиентского кода.
  • Независимость от транспорта: Хотя чаще всего работает поверх HTTP(S), может использовать SMTP, JMS и др.
  • *Встроенная поддержка стандартов WS-:** Комплексные стандарты для безопасности (WS-Security), транзакций (WS-Transaction), надежной доставки (WS-ReliableMessaging).

Структура SOAP-сообщения (Envelope):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <!-- Опциональные метаданные (аутентификация, транзакции) -->
  </soap:Header>
  <soap:Body>
    <!-- Основные данные запроса или ответа -->
    <GetUserRequest xmlns="http://example.com/service">
      <UserId>123</UserId>
    </GetUserRequest>
  </soap:Body>
</soap:Envelope>

Практический опыт: Мне приходилось интегрироваться с SOAP-сервисами крупных банков и государственных систем. Например, для проверки данных клиента через кредитное бюро. Используя предоставленный WSDL, я сгенерировал клиентские классы (например, через wsimport в Java или zeep в Python), что позволило вызывать удалённые методы почти как локальные, но с чёткой структурой данных и встроенной WS-Security аутентификацией.

Когда использовать SOAP сегодня? В основном для интеграции с legacy-системами корпоративного уровня (ERP, CRM), где уже есть готовые SOAP-сервисы, или когда критически важны строгие контракты (WSDL) и встроенные корпоративные функции типа распределённых транзакций.