Идемпотентность — свойство операции, при котором повторный вызов с теми же параметрами даёт тот же результат. Сколько раз ни вызови — эффект один. GET, PUT, DELETE по определению идемпотентны в REST. POST — нет.
Почему это важно: сеть ненадёжна. Клиент послал запрос, получил таймаут, не знает — выполнился или нет. Если операция идемпотентна — просто повторяет. Если нет — может создать дубликат заказа, списать деньги дважды.
// НЕ идемпотентно — каждый вызов создаёт новый заказ
POST /orders {amount: 100}
// Идемпотентно — с ключом идемпотентности
POST /orders
Idempotency-Key: abc-123
{amount: 100}
Сервер запоминает результат по ключу и при повторном запросе возвращает тот же ответ. Это фундамент надёжных распределённых систем — без идемпотентности retry-логика невозможна.