Какие знаешь методы в REST?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
HTTP методы в REST архитектуре
REST (Representational State Transfer) использует HTTP методы (verbs) для определения операций над ресурсами. Каждый метод имеет свою семантику и применение.
Основные HTTP методы
1. GET — получение данных
Назначение: извлечение представления ресурса Безопасность: безопасен (не изменяет состояние) Идемпотентность: идемпотентен (повторные вызовы дают одинаковый результат)
GET /api/v1/users/123
GET /api/v1/users?role=admin&limit=10
GET /api/v1/posts/1/comments
Коды ответов:
200 OK— успешно304 Not Modified— данные не изменились (кэш)404 Not Found— ресурс не найден401 Unauthorized— требуется аутентификация
2. POST — создание ресурса
Назначение: создание нового ресурса Безопасность: небезопасен (изменяет состояние) Идемпотентность: не идемпотентен (каждый вызов создаёт новый ресурс)
POST /api/v1/users
Body: {"name": "John", "email": "john@example.com"}
Ответ: 201 Created
Location: /api/v1/users/123
Коды ответов:
201 Created— ресурс создан202 Accepted— запрос принят, но обработка асинхронна400 Bad Request— ошибка в данных409 Conflict— конфликт (например, дубликат)
3. PUT — полное обновление ресурса
Назначение: замена всего ресурса Безопасность: небезопасен Идемпотентность: идемпотентен (повторный вызов с теми же данными = тот же результат)
PUT /api/v1/users/123
Body: {
"name": "John Doe",
"email": "john@example.com",
"role": "admin"
}
Важно: PUT требует отправки всех полей ресурса, иначе пропущенные поля будут обнулены.
❌ Плохо: отправить только name, остальное затрётся
✅ Хорошо: отправить полный объект с name, email, role
4. PATCH — частичное обновление ресурса
Назначение: обновление отдельных полей Безопасность: небезопасен Идемпотентность: может быть идемпотентен (зависит от реализации)
PATCH /api/v1/users/123
Body: {"role": "moderator"} // Обновляем только role
Остальные поля не трогаются
Синтаксис JSON Patch (RFC 6902):
[
{"op": "replace", "path": "/email", "value": "newemail@example.com"},
{"op": "add", "path": "/tags", "value": ["vip"]},
{"op": "remove", "path": "/deprecated_field"}
]
5. DELETE — удаление ресурса
Назначение: удаление ресурса Безопасность: небезопасен Идемпотентность: идемпотентен (повторное удаление несуществующего ресурса = 404 оба раза)
DELETE /api/v1/users/123
Ответ: 204 No Content
Коды ответов:
204 No Content— успешно удалено202 Accepted— удаление асинхронно404 Not Found— уже удалено
6. HEAD — как GET, но без body
Назначение: проверка существования ресурса, получение метаданных Использование: проверка headers без загрузки всего ответа
HEAD /api/v1/users/123
Ответ: 200 OK (с headers, но без body)
7. OPTIONS — описание доступных методов
Назначение: получение информации о методах, допустимых для ресурса Использование: CORS preflight запросы
OPTIONS /api/v1/users
Ответ: Allow: GET, POST, OPTIONS
Матрица методов
| Метод | Безопасен | Идемпотентен | Кэшируем | Тело запроса |
|---|---|---|---|---|
| GET | ✅ | ✅ | ✅ | Нет |
| POST | ❌ | ❌ | ❌ | Да |
| PUT | ❌ | ✅ | ❌ | Да |
| PATCH | ❌ | ⚠️ | ❌ | Да |
| DELETE | ❌ | ✅ | ❌ | Нет |
| HEAD | ✅ | ✅ | ✅ | Нет |
| OPTIONS | ✅ | ✅ | ❌ | Нет |
Практические примеры
Сценарий 1: CRUD операции с постами
Создать пост:
POST /api/v1/posts
Body: {"title": "Hello", "content": "World"}
→ 201 Created, Location: /api/v1/posts/1
Прочитать пост:
GET /api/v1/posts/1
→ 200 OK, {"id": 1, "title": "Hello", "content": "World"}
Обновить весь пост:
PUT /api/v1/posts/1
Body: {"title": "Updated", "content": "New content"}
→ 200 OK
Обновить только title:
PATCH /api/v1/posts/1
Body: {"title": "New title"}
→ 200 OK
Удалить пост:
DELETE /api/v1/posts/1
→ 204 No Content
Частые ошибки
❌ Использование POST для всего
Плохо:
POST /api/v1/get-user/123
POST /api/v1/delete-user/123
Хорошо:
GET /api/v1/users/123
DELETE /api/v1/users/123
❌ PUT с параметрами
Плохо:
PUT /api/v1/users/123?partial=true
Хорошо:
PATCH /api/v1/users/123 // для частичного обновления
❌ Глаголы в URL
Плохо:
GET /api/v1/users/123/get-profile
POST /api/v1/users/delete
Хорошо:
GET /api/v1/users/123/profile
DELETE /api/v1/users/123
Заключение
Корректное использование HTTP методов делает API:
- Предсказуемым — разработчики сразу понимают, что делает endpoint
- Кэшируемым — браузеры и proxy кэшируют GET запросы
- Безопасным — методы имеют чёткую семантику
- Совместимым — работает со стандартными инструментами (curl, Postman, браузеры)