SOAP

Оригинальное название: Simple Object Access Protocol (SOAP)

Коротко

Протокол обмена сообщениями в формате XML: клиент вызывает операцию удалённого сервиса, а правила вызова, типы и адреса заранее описаны в файле WSDL.

Что такое «SOAP»

Протокол появился в конце 1990-х при участии Microsoft, а версия 1.2 стала рекомендацией W3C в 2003 году. Задача была практичная: дать программам на разных платформах — Java, .NET, PHP — общий способ вызывать функции друг друга через сеть. В отличие от REST, где центр — ресурс и адрес, SOAP построен вокруг операций: «получить статус заказа», «создать отгрузку».

Из чего состоит сообщение

Каждое сообщение — документ XML, «конверт» с необязательным заголовком и телом. В заголовок кладут служебное: подписи, идентификаторы, сведения о транзакции. В теле — сам вызов или ответ. Ошибки возвращаются в стандартном элементе Fault.

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <GetOrderStatus xmlns="http://example.ru/orders">
      <orderId>1542</orderId>
    </GetOrderStatus>
  </soap:Body>
</soap:Envelope>

Файл WSDL описывает, какие операции есть у сервиса, какие поля и типы они принимают и куда отправлять запросы. По нему инструменты сами строят клиент.

Вызов из PHP

В PHP есть расширение soap. Клиенту достаточно адреса WSDL, а операции вызываются как обычные методы:

$client = new SoapClient('https://example.ru/ws/orders?wsdl', ['trace' => true]);

print_r($client->__getFunctions());   // список операций

$result = $client->GetOrderStatus(['orderId' => 1542]);
echo $result->status;

Опция trace сохраняет последний запрос и ответ, что сильно выручает при отладке: их можно получить методами __getLastRequest() и __getLastResponse().

Почему SOAP ещё жив

Для новых публичных API его почти не выбирают: XML многословен, а работать с ним из браузера неудобно. Но в корпоративных и государственных системах, банках и учётном ПО SOAP встречается часто. В 1С:Предприятии можно опубликовать веб-сервис именно на SOAP, поэтому обмен сайта с учётной системой нередко идёт через такой веб-сервис. Строгий контракт здесь скорее плюс: обе стороны точно знают формат, а несовпадение типов ловится сразу, а не в виде странных данных в отчёте.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение