Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Что такое idempotency key и как он применяется?

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

Короткий ответ

Idempotency Key — это уникальный идентификатор, который клиентская система генерирует для каждой логической операции (например, создания платежа) и отправляет вместе с запросом к API. Сервер использует этот ключ, чтобы отслеживать, был ли такой запрос уже обработан. Если ключ новый — операция выполняется, а её результат сохраняется вместе с ключом. Если ключ повторяется — сервер не выполняет операцию заново, а возвращает сохранённый ранее результат. Это предотвращает дублирование действий из-за повторных отправок запроса.

Длинный ответ

Idempotency Key (Ключ идемпотентности) — это специальный уникальный токен, который клиентское приложение создает для однозначной идентификации конкретной бизнес-операции при вызове идемпотентного API.

Главная цель: Гарантировать, что повторная отправка идентичного запроса (часто из-за таймаутов или сетевых проблем) не приведет к повторному выполнению операции на стороне сервера, а вернет тот же результат, что и при первом успешном запросе.

Как это работает: пошаговый алгоритм

  1. Генерация ключа: Перед отправкой запроса (например, POST /payments) клиент генерирует уникальную строку. Обычно для этого используют:

    • UUID (например, 550e8400-e29b-41d4-a716-446655440000)

    • Хэш-сумму от содержимого запроса и временной метки.

    • Комбинацию идентификатора клиента и последовательного номера операции.

  2. Передача ключа: Ключ передается в заголовке HTTP-запроса. Стандартного названия нет, но распространены варианты: Idempotency-Key, X-Idempotency-Key.

  3. Обработка на сервере:

    • Проверка: Сервер, получив запрос, первым делом ищет переданный ключ в своем быстром хранилище (часто — Redis или Memcached).

    • Сценарий «Ключ найден»: Это означает, запрос с таким ключом уже обрабатывался. Сервер извлекает сохраненный HTTP-ответ (код статуса, заголовки, тело) и отправляет его клиенту. Бизнес-логика (списание денег, создание записи в БД) не выполняется.

    • Сценарий «Ключ не найден»: Это новый запрос. Сервер блокирует ключ (чтобы параллельные запросы с тем же ключом ждали), выполняет бизнес-логику, сохраняет полученный результат ответа в хранилище по этому ключу (часто с TTL — временем жизни, например, 24 часа) и отправляет ответ клиенту.

Практический пример использования:
Представьте мобильное приложение для оплаты парковки. Пользователь нажимает «Оплатить», приложение генерирует Idempotency-Key и отправляет запрос. Связь прерывается, и приложение не получает ответ. Пользователь снова нажимает «Оплатить». Приложение отправляет запрос с тем же самым Idempotency-Key. Сервер, получив повторный запрос, понимает, что платеж по этому ключу уже был проведен, и просто возвращает квитанцию об успешной оплате, не списывая деньги во второй раз.

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

  • Аватар

    System Analysis Guru

    Tsarev Andrei

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Networks

  • RabbitMQ

    RabbitMQ

  • Kafka

    Kafka

Ключевые слова

#idempotency

#api

#design

  • Аватар

    System Analysis Guru

    Tsarev Andrei

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.