Выбор ответа Middle Надёжность и наблюдаемость спрашивают часто обновлено
Ретрай неидемпотентного запроса
Вопрос
Клиент автоматически повторяет POST /orders при таймауте. Какая проблема возможна и как её закрыть?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Создастся два заказа; нужен Idempotency-Key на сервере. Таймаут не значит, что запрос не выполнился: заказ мог создаться, а ответ потеряться.
Варианты ответа
- Проблем нет: POST идемпотентен по спецификации HTTP
- Сервер вернёт 405 на повторный POST с тем же телом
- Повтор нужно делать через PUT на тот же адрес
/orders - Создастся два заказа; нужен Idempotency-Key на сервереправильный ответ
Разбор
Таймаут не значит, что запрос не выполнился: заказ мог создаться, а ответ потеряться. Повтор POST создаст дубль. Ключ идемпотентности позволяет серверу узнать повтор и вернуть первый результат. POST по спецификации HTTP не идемпотентен, 405 тут ни при чём, а смена метода на PUT без смены семантики (PUT по известному id) ничего не решает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.