Sobes.tech
Назад к вопросам
Middle
3

Как предотвратить двойное списание при повторном запросе (идемпотентность)?

Компании, где спрашивали
TokenTech

Ответ от нейросети

sobes.tech AI

Чтобы предотвратить двойное списание при повторном запросе, используется идемпотентность — гарантия, что повторный вызов с теми же параметрами не приведёт к повторному изменению состояния.

Основные подходы:

  • Использование уникального идентификатора транзакции (idempotency key). Клиент генерирует уникальный ключ для каждой операции. Сервер сохраняет результат операции с этим ключом и при повторном запросе с тем же ключом возвращает сохранённый результат, не выполняя списание повторно.

  • Проверка состояния операции. Перед списанием проверяется, не была ли операция уже выполнена (например, по статусу заказа или платежа).

Пример на JavaScript (fetch):

const idempotencyKey = 'unique-transaction-id-123';

fetch('/api/charge', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Idempotency-Key': idempotencyKey
  },
  body: JSON.stringify({ amount: 100 })
})
.then(response => response.json())
.then(data => console.log(data));

На сервере нужно реализовать логику сохранения и проверки ключа.