Ответ
Ключи идемпотентности позволяют гарантировать, что повторный вызов операции с тем же ключом не изменит состояние системы. Это полезно для:
- Повторных запросов (например, при сетевых сбоях)
- Обработки дублирующихся событий
- Предотвращения двойного списания средств
Пример в Go с HTTP API:
func ProcessPayment(w http.ResponseWriter, r *http.Request) {
idempotencyKey := r.Header.Get("Idempotency-Key")
if idempotencyKey == "" {
http.Error(w, "Idempotency key required", http.StatusBadRequest)
return
}
// Проверяем, не обрабатывали ли уже этот ключ
if _, exists := processedKeys[idempotencyKey]; exists {
w.WriteHeader(http.StatusOK)
return
}
// Обработка платежа...
processedKeys[idempotencyKey] = true
}