Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: idempotency, HTTP, API, idempotency key, retry

Что такое idempotency key?

Проверяет понимание концепции идемпотентности в HTTP и API, а также назначения idempotency key для обеспечения безопасных повторных запросов.

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

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

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

Что такое idempotency key?

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

Как это работает?

Клиент генерирует уникальный ключ (например, UUID) и отправляет его вместе с запросом. Сервер проверяет, есть ли в хранилище запись с таким ключом:

  • Если нет — выполняет операцию, сохраняет ключ и результат, возвращает ответ.
  • Если есть — возвращает сохранённый ответ, не выполняя операцию заново.

Ключ обычно хранится ограниченное время (например, 24 часа) и удаляется после истечения срока.

Пример кода (Node.js + Express)

const express = require('express');
const app = express();
const store = new Map(); // хранилище ключей

app.post('/payment', (req, res) => {
  const key = req.headers['idempotency-key'];
  if (!key) return res.status(400).send('Missing idempotency key');

  if (store.has(key)) {
    return res.json(store.get(key)); // возвращаем сохранённый ответ
  }

  // Выполняем операцию (например, списание средств)
  const result = { status: 'success', transactionId: Date.now() };
  store.set(key, result);
  setTimeout(() => store.delete(key), 86400000); // удаляем через 24 часа

  res.json(result);
});

app.listen(3000);

Где применяется?

  • Платёжные системы (Stripe, PayPal) — чтобы не списать деньги дважды.
  • Создание заказов в интернет-магазинах.
  • Любые API, где повторный запрос может привести к дублированию данных.

Вывод

Idempotency key — это простой и надёжный способ сделать неидемпотентные операции безопасными для повторных вызовов. Его стоит применять везде, где клиент может отправить запрос повторно из-за таймаута или сбоя сети, чтобы гарантировать однократное выполнение.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

  • Networks

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

#idempotency

#HTTP

#API

#idempotency key

#retry

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

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