К списку
HTTP, REST и APISeniorТехническое

Как проверить корректность обработки idempotency-key в POST запросах распределённого API

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

Используйте повторные POST запросы с одинаковым idempotency-key от разных клиентов, чтобы убедиться, что сервер создаёт единственный ресурс и возвращает согласованные ответы без дублирования побочных эффектов.

Развёрнуто

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

Для тестирования idempotency-key повторите POST запросы с одинаковым ключом с разных клиентов и проверьте, что сервер не создаёт дубликаты ресурсов, а отвечает корректно при конкурирующих запросах.


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

В распределённых API idempotency-key — это уникальный идентификатор, который гарантирует, что повторные POST запросы с одним и тем же ключом не вызовут создание нескольких одинаковых ресурсов или побочных эффектов. Это важно при сетевых сбоях или повторной отправке запроса клиентом.

При тестировании необходимо проверить:

  • что повторные запросы с одинаковым ключом возвращают идентичный ответ;
  • что состояние сервера после нескольких запросов с одним ключом не меняется (нет дублирования);
  • корректное поведение при параллельных запросах с одинаковым ключом (гонка).
Сценарий Ожидаемый результат
Первый запрос с ключом Создаётся новый ресурс, возвращается 201
Повторный запрос с тем же ключом Возвращается тот же ответ, ресурс не дублируется
Параллельные запросы Только один ресурс создан, остальные — идентичные ответы

Пример

POST /orders
Headers:
  Idempotency-Key: abc123
Body:
  { "item": "book", "quantity": 1 }

1. Клиент А отправляет запрос с ключом abc123 — создаётся заказ.
2. Клиент Б повторяет запрос с тем же ключом — сервер возвращает ответ от первого запроса, новый заказ не создаётся.
3. При одновременных запросах с ключом abc123 сервер обеспечивает, что заказ создаётся только один раз.

Что важно знать на собеседовании

  • idempotency-key используется для предотвращения дублирования при повторных POST запросах.
  • Сервер должен сохранять состояние запросов с ключами и возвращать результат для повторных обращений.
  • Тесты нужно проводить с имитацией параллельных и повторных запросов от разных клиентов.
  • Важно проверить корректность ответов и отсутствие побочных эффектов при гонке.
  • Различия между idempotency-key и другими механизмами, например, ETag или If-Match, могут быть предметом обсуждения.

Тема: HTTP, REST и API | Уровень: senior