> 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/edinoobrazie-interfeisa-crud.md).

# Единообразие интерфейса (CRUD)

RESTful API сводится к четырем базовым операциям [POST, GET, PUT и DELETE](#user-content-fn-1)[^1]:

<table><thead><tr><th width="147.33333333333331">Название</th><th width="139">HTTP</th><th>Описание</th></tr></thead><tbody><tr><td>Создание новых данных</td><td>POST</td><td>POST-запрос используется для создания нового ресурса на сервере. Он передает данные, которые должны быть использованы для создания нового ресурса. В отличие от PUT-запроса, POST-запрос не требует знания о существующих ресурсах и их идентификаторах.</td></tr><tr><td>Получение данных</td><td>GET</td><td>GET-запрос используется для получения информации от сервера. Он запрашивает данные от определенного ресурса и не вносит изменения на сервере. Примером может быть просмотр веб-страницы или получение данных из API.</td></tr><tr><td>Обновление данных</td><td>PUT</td><td>PUT-запрос используется для обновления существующих данных на сервере. Он требует передачи полного обновленного набора данных для указанного ресурса. Если ресурс не существует, сервер может создать его, в зависимости от реализации.<br><em>*Альтернатива: PATCH-запрос, частично обновляет ресурс с определенными изменениями.</em></td></tr><tr><td>Удаление данных</td><td>DELETE</td><td>DELETE-запрос используется для удаления указанного ресурса на сервере. Он не требует передачи дополнительных данных.</td></tr></tbody></table>

## Характеристики операций

### Безопасность

{% hint style="info" %}
Если операция может изменить ресурс — она называется **небезопасной** в рамках REST архитектуры.
{% endhint %}

GET, OPTIONS, HEAD — работают только на чтение, поэтому они безопасны для ресурса.

POST, PUT, DELETE — могут модифицировать данные, поэтому они небезопасные.

## Идемпотентность

{% hint style="info" %}
**Идемпотентная операция** — действие, многократное повторение которого эквивалентно однократному.
{% endhint %}

PUT, GET, OPTIONS, DELETE, HEAD — идемпотентные.

POST, PATCH — неидемпотентные.

Источники:

* <https://qsusha.wordpress.com/2017/10/29/%D1%8D%D1%82%D0%BE-%D1%81%D0%BC%D0%B5%D1%88%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE-%D0%B8%D0%B4%D0%B5%D0%BC%D0%BF%D0%BE%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9/>
* <https://stackoverflow.com/questions/45016234/what-is-idempotency-in-http-methods>

[^1]: По другому такое сочетание методов называется CRUD модель, где:\
    C — Create (POST)\
    R — Read (GET)\
    U — Update (PUT)\
    D — Delete (DELETE)
