Идемпотентные запросы
Идемпотентные запросы
Как использовать ключи идемпотентности для надёжных интеграций с API.
Что такое идемпотентность?
В контексте API идемпотентность значит: повтор одного и того же запроса даёт тот же эффект, что и один вызов. Если идемпотентный POST на создание ресурса отправить пять раз, ресурс создаётся только при первом успешном ответе; остальные четыре не создают новых сущностей, а возвращают результат первого.
Это важно для устойчивых систем: сетевые сбои, таймауты и повторы на клиенте неизбежны. Без идемпотентности можно получить дубликаты — несколько одинаковых inbox или вебхуков.
Как Agent Inbox обеспечивает идемпотентность
Для всех операций create поддерживается необязательный параметр client_id.
Если в запросе на create передан client_id, платформа проверяет, был ли уже успешно выполнен запрос с таким же client_id.
- В первый раз запрос обрабатывается как обычно: ресурс создаётся, а связь
client_id→ идентификатор ресурса сохраняется. - Если такой
client_idуже был — запрос не выполняется повторно; сразу возвращается200 OKс данными первого успешного ответа.
Так можно безопасно повторять запросы без риска дубликатов.
Рекомендации по client_id
client_id должен быть уникальным для создаваемой сущности и детерминированным для одной и той же логической сущности у вас.
- Детерминированность: одна и та же сущность у вас всегда даёт один и тот же
client_id, напримерinbox-for-user-{{USER_ID}}для основного ящика пользователя. - Уникальность: не переиспользуйте
client_idдля разных типов ресурсов. Тот же ключ, что для inbox, не подходит для вебхука.
Надёжный приём: сгенерировать на клиенте UUID (например v4) для создаваемого ресурса, сохранить его у себя в БД и передать как client_id в API — тогда при любых повторах ключ стабилен.
