---
title: SOAP и REST
seo:
  title: SOAP и REST — Systems Analyst
  description: Тема «SOAP и REST» для собеседования Systems Analyst. Чем SOAP отличается от REST? Из чего состоит сообщение в SOAP?
---

[Все темы Systems Analyst](/systems-analyst)

## <strong>Чем</strong> <code>SOAP</code> <strong>отличается от</strong> <code>REST</code><strong>?</strong> [#q-14bee738d69b810d97d7dff034ade1ac]

<code>SOAP</code> (Simple Object Access Protocol) и <code>REST</code>
(Representational State Transfer) - это два различных подхода к
веб-сервисам&#58;

{/* prettier-ignore */}
1. <strong>Протокол обмена данными</strong>&#58;

    - <strong>SOAP</strong>&#58; Использует протокол SOAP для обмена структурированными сообщениями (XML) по сети.

    - <strong>REST</strong>&#58; Основан на принципах HTTP и использует стандартные методы HTTP (GET, POST, PUT, DELETE) для доступа к ресурсам.

1. <strong>Формат сообщений</strong>&#58;

    - <strong>SOAP</strong>&#58; Сообщения SOAP обычно представлены в XML формате и часто содержат метаданные о структуре данных.

    - <strong>REST</strong>&#58; Возвращает данные в различных форматах, таких как JSON, XML, HTML или текст, в зависимости от запроса клиента.

1. <strong>Управление состоянием (State)</strong>&#58;

    - SOAP сам по себе не требует сохранения состояния между вызовами. Сессионное поведение может задаваться приложением или дополнительными спецификациями.

    - REST является архитектурным стилем. Ограничение stateless требует, чтобы каждый запрос содержал контекст для обработки; сервер при этом может хранить ресурсы и бизнес-данные.

1. <strong>Простота и гибкость</strong>&#58;

    - <strong>REST</strong>&#58; Считается более простым и гибким в сравнении с SOAP, так как основывается на стандартных HTTP методах и форматах данных.

    - <strong>SOAP</strong>&#58; Предоставляет большую структурированность и четкость в обмене сообщениями, что может быть полезно в сложных интеграционных сценариях.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Из чего состоит сообщение в</strong> <code>SOAP</code><strong>?</strong> [#q-14bee738d69b81edb857f32ca79eb78f]

Сообщение в <code>SOAP</code> (Simple Object Access Protocol) состоит из трех основных частей&#58;

1. <code>Envelope</code> <strong>(Оболочка)</strong>&#58; Определяет структуру
   XML-документа и обязательно присутствует в каждом SOAP-сообщении. Включает
   информацию о версии SOAP и пространствах имен.

1. <code>Header</code> <strong>(Заголовок)</strong>&#58; Опциональная часть,
   которая содержит метаданные или информацию о маршрутизации и обработке
   сообщения, такие как аутентификация, транзакционные данные и другие
   параметры.

1. <code>Body</code> <strong>(Тело)</strong>&#58; Содержит основное содержимое
   сообщения, которое передается между отправителем и получателем. Обычно это
   XML-документ с данными, которые требуется обработать или передать.

<code>SOAP</code>-сообщение часто используется для интеграции между различными
системами и является стандартом для обмена структурированными и комплексными
данными по сети.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Что содержит</strong> <code>HEADER</code> <strong>в ответе</strong> <code>REST</code><strong>?</strong> [#q-14bee738d69b817686a9f822b0733022]

В ответе <code>REST</code>, заголовок (<code>HEADER</code>) может содержать различные метаданные и управляющие данные, такие как&#58;

1. Статус ответа передаётся отдельно от обычных полей заголовков&#58; в строке статуса HTTP/1.1, а в HTTP/2 и HTTP/3 в псевдозаголовке &#58;status.

1. <strong>Кэширование</strong>&#58; Заголовки Cache-Control, Expires и ETag
   могут использоваться для управления кэшированием ответа на клиентской
   стороне.

1. Аутентификация&#58; WWW-Authenticate в ответе задаёт запрос аутентификации. Authorization обычно передаётся клиентом в запросе.

1. <strong>Тип содержимого</strong>&#58; Заголовок Content-Type указывает на тип
   возвращаемого контента (например, application/json для JSON или text/xml для
   XML).

1. Перенаправление&#58; Location указывает URI, на который следует перейти. Стандартного поля ответа Redirect для этого нет.

1. <strong>Дополнительные данные</strong>&#58; Другие заголовки могут содержать
   различные метаданные, такие как дата и время ответа, сервер и прочее.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## Чем отличаются HTTP-статусы 200 OK и 201 Created? [#q-14bee738d69b81fab719c23847c8e67a]

200 OK и 201 Created относятся к успешным HTTP-ответам&#58;

{/* prettier-ignore */}
1. 200 OK&#58;

    - Этот статус указывает, что запрос клиента успешно обработан сервером.

    - Обычно используется для ответа на запросы типа GET, POST, PUT или DELETE.

    - При успешной обработке запроса сервер возвращает запрашиваемые данные в теле ответа.

1. <strong>Код состояния 201 (</strong><code>Created</code><strong>)</strong>&#58;

    - Этот статус указывает, что сервер успешно создал новый ресурс по указанному клиентом запросу.

    - Часто используется после успешного выполнения операции POST, когда создается новый объект или запись в базе данных.

    - В теле ответа может содержаться информация о созданном ресурсе, а также ссылка на него.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Какие методы</strong> <code>REST</code> <strong>вы знаете?</strong> [#q-14bee738d69b8184a9a9ff027c3449cd]

В архитектуре <code>REST</code> (Representational State Transfer) используются следующие основные методы (или операции), которые описывают типы действий, которые клиенты могут выполнить с ресурсами на сервере&#58;

1. <code>GET</code>&#58; Получение данных или ресурсов с сервера. Операция не
   должна изменять состояние сервера.

1. <code>POST</code>&#58; Создание нового ресурса на сервере. Обычно
   используется для отправки данных на сервер для последующего сохранения.

1. <code>PUT</code>&#58; Обновление существующего ресурса на сервере. Полностью
   заменяет текущее состояние ресурса на новое.

1. <code>PATCH</code>&#58; Частичное обновление существующего ресурса на
   сервере. Используется для изменения только части ресурса без его полной
   замены.

1. <code>DELETE</code>&#58; Удаление ресурса с сервера. Операция удаляет
   указанный ресурс.

Эти методы позволяют клиентам взаимодействовать с ресурсами на сервере, изменять и получать данные с учетом REST-принципов, таких как унификация интерфейса и отсутствие состояния на сервере (<code>statelessness</code>).

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Чем</strong> <code>POST</code> <strong>отличается от</strong> <code>GET</code><strong>?</strong> [#q-14bee738d69b81589a10f188922d1821]

<code>POST</code> и <code>GET</code> - это два основных HTTP метода,
используемых в архитектуре REST для взаимодействия с веб-ресурсами. Они имеют
следующие различия&#58;

{/* prettier-ignore */}
1. <code>GET</code>&#58;

    - Используется для запроса данных с сервера.

    - Параметры запроса передаются в URL как часть строки запроса (query string).

    - Ограничен по длине данных, которые можно передать в URL.

    - Кэшируется браузером, что облегчает повторное использование данных.

    - Не должен использоваться для отправки конфиденциальных данных, так как данные передаются в URL и могут быть видны в истории браузера или логах сервера.

1. <code>POST</code>&#58;

    - Используется для отправки данных на сервер для обработки или сохранения.

    - Параметры запроса передаются в теле запроса (request body).

    - Размер тела ограничивается настройками клиента, прокси и сервера; универсального неограниченного объёма нет.

    - Ответ POST может быть кешируемым при явно заданных условиях, но многие кеши поддерживают только GET и HEAD.

    - Тело POST не попадает в адресную строку, но само по себе не защищает данные. HTTPS шифрует при передаче и тело, и URL-путь с query; приложение и сервер всё равно могут их журналировать.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Чем</strong> <code>PUT</code> <strong>отличается от</strong> <code>PATCH</code><strong>?</strong> [#q-14bee738d69b81e7a7f9d7522d2594f0]

<code>PUT</code> и <code>PATCH</code> - это HTTP методы, используемые для
обновления ресурсов на сервере в архитектуре REST. Они отличаются следующим
образом&#58;

{/* prettier-ignore */}
1. <code>PUT</code>&#58;

    - Используется для полного обновления существующего ресурса на сервере.

    - При выполнении запроса PUT клиент отправляет целевой ресурс с полными данными (полное представление ресурса).

    - Если ресурс существует, он заменяется новыми данными, которые клиент передал.

    - Если ресурс не существует, PUT может создать новый ресурс с указанным идентификатором.

1. <code>PATCH</code>&#58;

    - Используется для частичного обновления существующего ресурса на сервере.

    - При выполнении запроса PATCH клиент отправляет только ту часть данных, которую необходимо изменить (частичное представление ресурса).

    - PATCH применяет изменения к ресурсу, не затрагивая остальные его аспекты.

    - При этом PATCH может использовать операции добавления, замены, удаления частей данных ресурса в соответствии с протоколом JSON Patch или другими спецификациями.

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::

---

## <strong>Напишите пример</strong> <code>REST&#45;API</code> <strong>для книжной библиотеки (напишите методы, эндпоинты и пример</strong> <code>JSON</code><strong>).</strong> [#q-14bee738d69b815586e5d9e2c6cb9cc9]

Пример <code>REST API</code> для книжной библиотеки может включать следующие методы, эндпоинты и примеры <code>JSON</code>&#58;

{/* prettier-ignore */}
1. <strong>Получение списка всех книг</strong>

    - <strong>Метод&#58;</strong> GET

    - <strong>Эндпоинт&#58;</strong> <code>&#47;books</code>

    - <strong>Пример JSON ответа&#58;</strong>

        ```json
        [
          {
            "id": 1,
            "title": "1984",
            "author": "George Orwell",
            "genre": "Science Fiction"
          },
          {
            "id": 2,
            "title": "To Kill a Mockingbird",
            "author": "Harper Lee",
            "genre": "Classic"
          }
        ]
        ```

1. <strong>Получение информации о конкретной книге по ID</strong>

    - <strong>Метод&#58;</strong> GET

    - <strong>Эндпоинт&#58;</strong> <code>&#47;books&#47;&#123;id&#125;</code>

    - <strong>Пример JSON ответа&#58;</strong>

        ```json
        {
          "id": 1,
          "title": "1984",
          "author": "George Orwell",
          "genre": "Science Fiction",
          "isbn": "978-0451524935",
          "published_year": 1949
        }
        ```

1. <strong>Добавление новой книги</strong>

    - <strong>Метод&#58;</strong> POST

    - <strong>Эндпоинт&#58;</strong> <code>&#47;books</code>

    - <strong>Пример JSON запроса&#58;</strong>

        ```json
        {
          "title": "The Great Gatsby",
          "author": "F. Scott Fitzgerald",
          "genre": "Classic",
          "isbn": "978-0743273565",
          "published_year": 1925
        }
        ```

    - <strong>Пример JSON ответа (новая книга с ID)&#58;</strong>

        ```json
        {
          "id": 3,
          "title": "The Great Gatsby",
          "author": "F. Scott Fitzgerald",
          "genre": "Classic",
          "isbn": "978-0743273565",
          "published_year": 1925
        }
        ```

1. <strong>Обновление информации о книге</strong>

    - <strong>Метод&#58;</strong> PUT

    - <strong>Эндпоинт&#58;</strong> <code>&#47;books&#47;&#123;id&#125;</code>

    - <strong>Пример JSON запроса&#58;</strong>

        ```json
        {
          "title": "The Great Gatsby",
          "author": "F. Scott Fitzgerald",
          "genre": "Classic",
          "isbn": "978-0743273565",
          "published_year": 1925
        }
        ```

1. <strong>Удаление книги</strong>

    - <strong>Метод&#58;</strong> DELETE

    - <strong>Эндпоинт&#58;</strong> <code>&#47;books&#47;&#123;id&#125;</code>

:::note[Ссылки для изучения]

1. [Как аналитику работать с задачами на интеграции](https://habr.com/ru/articles/735332/)
   :::
