# SOAP

{% hint style="info" %}
**SOAP** — это протокол, по которому веб-сервисы взаимодействуют друг с другом или с клиентами. Название происходит от сокращения Simple Object Access Protocol («простой протокол доступа к объектам»).&#x20;

SOAP API — это веб-сервис, использующий протокол SOAP для обмена сообщениями между серверами и клиентами. При этом сообщения должны быть написаны на языке XML в соответствии со строгими стандартами [WSDL](/hard-skills/integracii/vidy-integracii/sinkhronnoe-vzaimodeistvie/soap/wsdl.md), иначе сервер вернет ошибку.
{% endhint %}

## **Структура SOAP запроса**

### **Envelope («конверт»)**

Это корневой элемент. Определяет XML-документ как сообщение SOAP с помощью пространства имен xmlns:soap=»<http://www.w3.org/2003/05/soap-envelope/»>. Если в определении будет указан другой адрес, сервер вернет ошибку.

### **Header («заголовок»)**

Включает в себя атрибуты сообщения, связанные с конкретным приложением (аутентификация, проведение платежей и так далее). В заголовке могут использоваться три атрибута, которые указывают, как принимающая сторона должна обрабатывать сообщение, — **mustUnderstand**, **actor** и **encodingStyle.** Значение **mustUnderstand** — 1 или 0 — говорит принимающему приложению о том, следует ли распознавать заголовок в обязательном или опциональном порядке. Атрибут **actor** задает конкретную конечную точку для сообщения. Атрибут **encodingStyle** устанавливает специфическую кодировку для элемента. По умолчанию SOAP-сообщение не имеет определенной кодировки.

### **Body («тело»)**

Сообщение, которое передает веб-приложение. Может содержать запрос к серверу или ответ от него.

<details>

<summary>Пример запрос/ответа XML</summary>

*Пример сообщения, которое запрашивает стоимость ноутбука в онлайн-магазине:*

```xml
<?xml version="1.0"?>
<soap:Envelope
	xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
	soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body> 
	<m:GetPrice xmlns:m="https://online-shop.ru/prices">
		<m:Item>Dell Vostro 3515-5371</m:Item>
	</m:GetPrice>
</soap:Body>
</soap:Envelope>
```

*Пример ответа сервера онлайн-магазина:*

```xml
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
	soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
	<m:GetPriceResponse xmlns:m="https://online-shop.ru/prices">
		<m:Price>37299</m:Price>
	</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
```

</details>

### **Fault («ошибка»)**

Опциональный элемент. Передает уведомление об ошибках, если они возникли в ходе обработки сообщения. Может содержать вложенные элементы, которые проясняют причину возникновения ошибки:

* **faultcode** — код неполадки;
* **faultstring** — «человекопонятное» описание проблемы;
* **faultactor** — информация о программном компоненте, который вызвал ошибку;
* **detail** — дополнительные сведения о месте возникновения неполадки.

## В каких случаях используют SOAP <a href="#v-kakikh-sluchayakh-ispolzuyut-soap" id="v-kakikh-sluchayakh-ispolzuyut-soap"></a>

* **В интеграции сложных систем.** SOAP поддерживает передачу сложных объектов и атрибутов, что позволяет эффективно обмениваться данными между системами.
* **Когда есть необходимость в строгих стандартах безопасности с поддержкой SSL.** SOAP API использует WS-Security для обеспечения безопасности приложений на уровне предприятия и для связи с унаследованными системами.
* **Когда нужны надежные функции обмена сообщениями.** Если вам необходимо гарантировать, что сообщения будут доставлены в надежном порядке и без потерь, то SOAP API обеспечит надежную доставку сообщений между системами при помощи расширения WS-ReliableMessaging.
* **Когда необходимо сохранить конфиденциальность.** SOAP API включает в себя соответствие стандарту ACID (Atomicity, Consistency, Isolation, and Durability) и это соответствие уменьшает избыточность и повышает безопасность и целостность сообщений.

### Недостатки SOAP <a href="#d0-bd-d0-b5-d0-b4-d0-be-d1-81-d1-82-d0-b0-d1-82-d0-ba-d0-b8-soap" id="d0-bd-d0-b5-d0-b4-d0-be-d1-81-d1-82-d0-b0-d1-82-d0-ba-d0-b8-soap"></a>

* **Объемные сообщения:** SOAP API использует XML для сериализации данных, что приводит к увеличению объема передаваемых сообщений. Проблемы возникают при передаче больших объемов данных или при работе с медленными сетевыми соединениями.
* **Поддержка только одного формата:** SOAP API ограничен использованием только XML в качестве формата данных. В некоторых случаях это может означать дополнительные накладные расходы на преобразование данных из других форматов в XML и обратно.
* **Один запрос — один ответ (один end-point):** клиент должен отправить запрос и дождаться ответа от сервера, прежде чем продолжить выполнение следующих операций. Это может привести к блокировке клиентского приложения, если запрос долго обрабатывается.
* **Возможность нарушения работы клиента при смене описания веб-сервиса:** смена описания потребует дополнительных усилий для согласования изменений между поставщиком и потребителем сервиса.

Источники:&#x20;

* <https://habr.com/ru/companies/itq_group/articles/705598/>
* <https://blog.skillfactory.ru/glossary/soap-api/>
* <https://elbrusboot.camp/blog/soap-api/>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.system-analyst-base.ru/hard-skills/integracii/vidy-integracii/sinkhronnoe-vzaimodeistvie/soap.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
