# Единообразие интерфейса (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)


---

# 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/rest/restful-principy/edinoobrazie-interfeisa-crud.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.
