Сети делают результаты неопределенными
Запрос может достичь сервера и успешно зафиксироваться, даже если браузер никогда не получает ответа. Повторная попытка разумна, но без стабильного идентификатора запроса сервер не сможет отличить повторную попытку от новой команды.
При создании общедоступных ссылок такая двусмысленность может привести к дублированию псевдонимов, запутанным записям или повторяющимся побочным эффектам.
Один ключ представляет одну предполагаемую мутацию.
Клиент отправляет уникальный ключ идемпотентности с запросом на создание. Сервер сохраняет результат вместе с отпечатком ввода. Повторение одной и той же клавиши и ввода возвращает исходный результат.
Использование одной и той же клавиши с разными входными данными отклоняется как конфликт. Это защищает как клиента, так и сервер от случайного изменения значения предыдущей команды.
Долговечность имеет значение в производстве
Хранилища идемпотентности в памяти достаточно для изолированных тестов, а не для многоэкземплярного производственного сервиса. Рабочий ключ и результат должны находиться в той же надежной границе домена, что и мутация, с указанием срока действия и области действия клиента.
Тот же самый шаблон применим к платежам, обработке веб-перехватчиков, импорту и заданиям, где дублирование эффекта было бы дорогостоящим.