Вопрос проверяет знание идемпотентности API, практику проектирования безопасных HTTP-сервисов и умение работать с ключами запросов.
Идемпотентность достигается введением уникального идентификатора запроса (Idempotency-Key). Сервер сохраняет этот ключ и результат операции, и при повторном запросе возвращает тот же результат без повторного выполнения.
Проблема: клиент может отправить повторный запрос (например, из-за сетевого таймаута), и тогда деньги спишутся дважды.
Решение:
Клиент добавляет Idempotency-Key в заголовок.
Сервер сохраняет результат операции в БД вместе с ключом.
Если приходит повторный запрос с тем же ключом — сервер возвращает сохранённый ответ.
func CreatePayment(w http.ResponseWriter, r *http.Request) {
key := r.Header.Get("Idempotency-Key")
if resp, ok := storage[key]; ok {
w.Write(resp)
return
}
// выполняем платёж
result := []byte("ok")
storage[key] = result
w.Write(result)
}Вывод: идемпотентность обязательна для финансовых и критичных API.
Уровень
Рейтинг:
4
Сложность:
7
Навыки
Golang
Postgres
Networks
Ключевые слова
Подпишись на Golang Developer в телеграм