Что такое idempotency?

Middle
1.3k просмотров
AFK Offer AI

Идемпотентность — свойство операции, при котором повторный вызов с теми же параметрами даёт тот же результат. Сколько раз ни вызови — эффект один. GET, PUT, DELETE по определению идемпотентны в REST. POST — нет.

Почему это важно: сеть ненадёжна. Клиент послал запрос, получил таймаут, не знает — выполнился или нет. Если операция идемпотентна — просто повторяет. Если нет — может создать дубликат заказа, списать деньги дважды.

// НЕ идемпотентно — каждый вызов создаёт новый заказ
POST /orders {amount: 100}

// Идемпотентно — с ключом идемпотентности POST /orders Idempotency-Key: abc-123 {amount: 100}

Сервер запоминает результат по ключу и при повторном запросе возвращает тот же ответ. Это фундамент надёжных распределённых систем — без идемпотентности retry-логика невозможна.

Следующий вопрос

Как передаются аргументы в функцию — по значению или ссылке?