Как проверить корректность обработки 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