Для чего используются ключи идемпотентности

«Для чего используются ключи идемпотентности» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ключи идемпотентности позволяют гарантировать, что повторный вызов операции с тем же ключом не изменит состояние системы. Это полезно для:

  1. Повторных запросов (например, при сетевых сбоях)
  2. Обработки дублирующихся событий
  3. Предотвращения двойного списания средств

Пример в 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
}