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, поэтому обмен сайта с учётной системой нередко идёт через такой веб-сервис. Строгий контракт здесь скорее плюс: обе стороны точно знают формат, а несовпадение типов ловится сразу, а не в виде странных данных в отчёте.

