Какие HTTP-методы используются в REST и какова их семантика?
В REST используются стандартные HTTP-методы для операций над ресурсами:
| Метод | CRUD-операция | Описание | Идемпотентный | Безопасный |
|---|---|---|---|---|
| GET | Read | Получение ресурса | Да | Да |
| POST | Create | Создание нового ресурса | Нет | Нет |
| PUT | Update/Replace | Полная замена ресурса | Да | Нет |
| PATCH | Update/Modify | Частичное обновление ресурса | Нет* | Нет |
| DELETE | Delete | Удаление ресурса | Да | Нет |
| OPTIONS | – | Получение допустимых методов | Да | Да |
| HEAD | – | Аналог GET, но без тела ответа | Да | Да |
*PATCH может быть идемпотентным в зависимости от реализации.
Примеры HTTP-запросов для каждого метода
GET — получает представление ресурса. Не должен изменять состояние сервера.
GET /api/users/42 HTTP/1.1
Accept: application/json
POST — создаёт новый ресурс. URI нового ресурса определяется сервером.
POST /api/users HTTP/1.1
Content-Type: application/json
{"name": "Иван", "email": "ivan@example.com"}
PUT — заменяет ресурс целиком. Если ресурс не существует, может создать его.
PUT /api/users/42 HTTP/1.1
Content-Type: application/json
{"name": "Иван Петров", "email": "ivan@example.com", "age": 30}
PATCH — частично обновляет ресурс. Отправляются только изменяемые поля.
PATCH /api/users/42 HTTP/1.1
Content-Type: application/json
{"email": "new-email@example.com"}
DELETE — удаляет ресурс.
DELETE /api/users/42 HTTP/1.1
OPTIONS — возвращает допустимые методы для ресурса. Используется в CORS-запросах (preflight).
OPTIONS /api/users HTTP/1.1
HEAD — аналогичен GET, но возвращает только заголовки без тела ответа. Используется для проверки существования ресурса или получения метаданных.
HEAD /api/users/42 HTTP/1.1
На собеседовании: интервьюер ожидает знания всех основных методов с их свойствами идемпотентности и безопасности. Частая ошибка — не знать разницу между PUT и PATCH или забыть про OPTIONS и HEAD.