> For the complete documentation index, see [llms.txt](https://docs.system-analyst-base.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.system-analyst-base.ru/hard-skills/integracii/vidy-integracii/sinkhronnoe-vzaimodeistvie/rest/restful-principy.md).

# RESTful принципы

## 1. Клиент-серверная модель (client-server model)

Клиент и сервер могут работать абсолютно независимо друг от друга. Разработчики используют достаточно простой способ организации REST API: клиентский код остается на его стороне, а код доступа — на сервере. Если клиентский код изменится, это не скажется на работе сервера, и наоборот. Благодаря этому REST API имеет такие преимущества, как переносимость и гибкость, а также возможность масштабирования.

## 2. Отсутствие состояния (statelessness)

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

## 3. Кэширование (cacheability)

В REST API запросах определяется, нужно ли кэшировать данные в буфере. Клиенту это дает высокую производительность и увеличивает скорость загрузки страниц, а серверу дает большие возможности масштабирования.

## 4. Единообразие интерфейса (uniform interface)

Одним из важнейших аспектов проектирования RESTful API является соблюдение единого интерфейса. Это предполагает использование согласованных соглашений и стандартных методов HTTP для обработки запросов API. Соответствуя этим стандартам, разработчики могут значительно упростить внедрение и обслуживание API. API REST должны использовать следующие стандартные методы HTTP для различных действий:

* `GET` : извлекает ресурс или коллекцию ресурсов.
* `POST` : Создает новый ресурс или отправляет данные для обработки.
* `PUT` : полностью обновляет существующий ресурс, заменяя его новыми данными.
* `PATCH` : Частично обновляет ресурс с определенными изменениями.
* `DELETE` : Удаляет ресурс.

Эти стандартные методы четко понимают каждую операцию и способствуют совместимости между клиентами и серверами. Для обеспечения надежной и последовательной работы крайне важно обеспечить правильный метод для каждого действия. Более того, единый интерфейс упрощает обработку ошибок и кодов состояния, гарантируя клиентам четкую и последовательную обратную связь. При создании RESTful API крайне важно возвращать точные и информативные коды состояния HTTP.  [Статусов много](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP), поэтому их всех не перечислить, однако важно знать их группировку::

* **2xx – Успех:** запрос был успешно получен, понят и принят.
* **3xx — Перенаправление (редирект):** запрос должен выполнить дальнейшие действия для завершения запроса.
* **4xx — Ошибка клиента:** запрос имеет неверный синтаксис или не может быть выполнен.
* **5xx — Ошибка сервера:** серверу не удалось выполнить кажущийся действительным запрос.

## 5. Многоуровневая система (layered system)

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

## 6. Код по требованию (code on demand) — необязательно

Серверы предоставляют клиенту статические представления ресурсов. При использовании программной архитектуры REST API клиент, к примеру, может получить код рендеринга для виджетов. Общий код усложняется лишь при необходимости.

Источники:

* <https://gb.ru/blog/rest-api/>&#x20;
* <https://appmaster.io/ru/blog/shest-pravil-otdykha-apis> (подробнее)
