Безопасность повторов уже, чем обычно предполагают клиенты. Эта страница
перечисляет ровно то, что платформа гарантирует сегодня; всё, чего здесь
нет, не идемпотентно.
Каждая запись под /api/v1/ (POST/PATCH/PUT/DELETE) — кэш повторов на HTTP-уровне; POST /api/v1/tasks и POST /api/v1/tickets дополнительно сохраняют ключ на созданной записи
Формат
Любой UUID, один на логический запрос
Окно
24 часа: повтор с тем же ключом возвращает исходный ответ, а не создаёт второй объект
Тот же ключ, другое тело
422 с code: "idempotency_conflict" и detail: "Idempotency-Key conflict: same key used with different request body" — ключ привязан к первому телу
Что воспроизводится
Ответы 2xx и 4xx; 5xx не кэшируется, поэтому упавший вызов можно повторить с тем же ключом. Воспроизведённый ответ несёт idempotent-replayed: true
В контракте
Объявлен необязательным заголовком на каждой пишущей операции в openapi.json
Каждый инструмент объявляет idempotentHint и readOnlyHint (справочник).
Инструменты с readOnlyHint: true можно повторять свободно. Пишущий инструмент с
idempotentHint: true можно повторить с теми же аргументами; с
idempotentHint: false — нельзя без предварительного чтения объекта. Подсказки
выводятся из того же кода, который выполняет инструменты, поэтому не могут
устареть относительно сервера, к которому вы подключены.