Предназначен ли HTTP-метод POST для обновления данных?

«Предназначен ли HTTP-метод POST для обновления данных?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Согласно спецификации HTTP (RFC 7231), основное назначение метода POST — создание нового ресурса. Использование POST для обновления является антипаттерном и нарушает семантику RESTful API.

Правильное использование методов для операций с данными:

Метод Семантика Идемпотентность Пример
POST Создание нового ресурса. URI обычно указывает на коллекцию. Нет POST /articles — создать новую статью.
PUT Полная замена ресурса по указанному URI. Если ресурса нет — может создавать. Да PUT /articles/123 — заменить всю статью с id=123.
PATCH Частичное обновление ресурса. Нет PATCH /articles/123 { "title": "New Title" } — обновить только заголовок.

Примеры:

POST для создания (ожидается ответ 201 Created):

POST /api/users HTTP/1.1
Content-Type: application/json

{
  "name": "Alice",
  "email": "alice@example.com"
}

PUT для полного обновления (ожидается 200 OK или 204 No Content):

PUT /api/users/123 HTTP/1.1
Content-Type: application/json

{
  "name": "Alice Updated",
  "email": "alice_new@example.com"
}

Почему важно: Соблюдение стандартов делает API предсказуемым, упрощает тестирование, кэширование и интеграцию. Для обновления всегда предпочтительнее использовать PUT или PATCH.