← Назад к вопросам

Какие знаешь методы в REST?

1.2 Junior🔥 211 комментариев
#API и интеграции#Форматы данных и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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, браузеры)