Будет ли работать изменение метода с POST на PUT или нужно будет добавить больше изменений вместе с изменением метода?
Нет, важно то, что "idempotent" делает обработчик запросаправильная вещь.Ничего волшебного не происходит, если вы меняете метод, который вы используете.
Хорошая новость заключается в том, что технически ваша реализация уже идемпотентна (по крайней мере, из описания).В RFC 7231 есть определение, которое вы должны рассмотреть.Важным элементом является то, что получение двух копий запроса оставляет ресурс в том же состоянии, что и получение одной копии запроса.
Таким образом, «все», что вам нужно сделать, это выяснить, какзнать, что ошибка связана с тем, что запись уже находится в базе данных (а не по какой-то другой причине), а затем замените отправляемую в данный момент ошибку ответом, похожим на сообщение об успешном выполнении.
другие ответы отмечают, что, поскольку POST не обещает идемпотентную семантику, универсальные компоненты не будут знать , что сообщения могут быть повторены, поэтому просто потерпят неудачу, если первоначальный ответ потерян.Только пользовательский клиент, отправляющий запрос, может знать , что POST может быть успешно повторен.
(Сравните это с GET - ваш браузер знает, что запросы GET являются идемпотентными; браузер нене нужно спрашивать человека, можно ли повторить запрос, потому что сервер уже пообещал обработать запрос безопасно.идемпотентный обмен сообщениями (хотя некоторые другие методы могут быть лучшим выбором, если другая семантика совпадает).