Идемпотентность операций: повторный запрос с теми же параметрами не приводит к побочным эффектам сверх однократного выполнения.
Зачем
- Клиент может повторить запрос при таймауте или сбое сети.
- События в Kafka могут доставляться более одного раза (at-least-once); потребитель должен обрабатывать дубликаты.
API (gRPC / REST)
- Для мутирующих операций клиент может передавать idempotency key (например, в metadata или в теле запроса).
- Сервер по ключу проверяет, не выполнялась ли уже операция; при совпадении возвращает сохраненный результат без повторного выполнения.
- Ключ имеет ограниченный TTL хранения (например, 24 часа).
Потребители событий (Kafka)
- Обработка идемпотентна по ключу сообщения (aggregate id) и идентификатору события (event_id), если есть.
- Перед применением изменений проверять: не обработано ли уже это событие (таблица обработанных event_id или версия агрегата).
- При конфликте (дубликат) — возвращать успех без повторного применения.
Связанные страницы
- API Guidelines — идемпотентность в API
- Event-Driven Patterns — идемпотентность потребителей
- Error Handling — retry и повторные запросы