Рубрика "Простыми словами о сложном":
Идемпотентность - это когда несколько раз выполняешь один и тот же запрос и при этом не изменяешь что-либо на сервере.
В HTTP некоторые методы изначально задуманы идемпотентными, например, GET - обычно получает тот же результат и ничего не меняет на сервере.
Но иногда бывает нужно сделать идемпотентной операцию создания какого либо ресурса через метод POST, через сообщение в Kafka или как-то ещё. Например, вы создаёте на сервере новый ресурс, сервер получил запрос и создал ресурс, но клиент не получил ответ так как сеть отвалилась. В этом случае клиент сделает повторную попытка создания того-же ресурса. Но он хотел создать один ресурс, а не два.
Чтобы не создать в случае такой ошибки второй ресурс, на клиентской стороне генерируется и добавляется в запрос уникальный ключ идемпотентности. Сервер проверяет, что для каждого одного ключа создаётся только один ресурс. В случае получения этого же ключа второй раз не создаёт новый ресурс, а возвращает успешный ответ с информацией по уже созданному ресурсу.
Ключ при этом генерирует и меняет в случае необходимости создания второго ресурса клиент. Так как именно клиент "знает", когда он отправляет новый запрос, а когда - пробует повторно отправить старый.
Идемпотентность - это когда несколько раз выполняешь один и тот же запрос и при этом не изменяешь что-либо на сервере.
В HTTP некоторые методы изначально задуманы идемпотентными, например, GET - обычно получает тот же результат и ничего не меняет на сервере.
Но иногда бывает нужно сделать идемпотентной операцию создания какого либо ресурса через метод POST, через сообщение в Kafka или как-то ещё. Например, вы создаёте на сервере новый ресурс, сервер получил запрос и создал ресурс, но клиент не получил ответ так как сеть отвалилась. В этом случае клиент сделает повторную попытка создания того-же ресурса. Но он хотел создать один ресурс, а не два.
Чтобы не создать в случае такой ошибки второй ресурс, на клиентской стороне генерируется и добавляется в запрос уникальный ключ идемпотентности. Сервер проверяет, что для каждого одного ключа создаётся только один ресурс. В случае получения этого же ключа второй раз не создаёт новый ресурс, а возвращает успешный ответ с информацией по уже созданному ресурсу.
Ключ при этом генерирует и меняет в случае необходимости создания второго ресурса клиент. Так как именно клиент "знает", когда он отправляет новый запрос, а когда - пробует повторно отправить старый.