Выбор ответа Middle HTTP: методы, статусы, заголовки обновлено

Почему PATCH не всегда идемпотентен

Вопрос

Клиент шлёт запрос и при таймауте автоматически повторяет его. Какой запрос опасно повторять?

// A
PUT /cart/items/42   {"qty": 3}
// B
DELETE /cart/items/42
// C
PATCH /cart/items/42 {"op": "increment", "by": 1}
// D
GET /cart

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: C. C увеличивает количество относительно текущего значения: два запроса дадут +2.

Варианты ответа

  1. A
  2. B
  3. Cправильный ответ
  4. D

Разбор

C увеличивает количество относительно текущего значения: два запроса дадут +2. PATCH не обязан быть идемпотентным, всё зависит от семантики операции. A задаёт абсолютное значение qty = 3, повтор ничего не меняет. B после первого удаления повтор оставит то же состояние. D только читает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.