Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="api-idempotency"></a>

# Идемпотентность API

## Коротко

После потери ответа повторный запрос не должен создавать вторую оплату или заказ.

## Плохо

```text
Тайм-аут → новый requestId → повторное списание.
```

## Хорошо

```text
Тайм-аут → тот же Idempotency-Key.
Сервер узнаёт операцию и возвращает её результат.
```

## Почему

Сетевой тайм-аут не сообщает, успел ли сервер выполнить действие.

## Когда применять

Ключ связан с пользователем, операцией и содержимым. Другое содержимое под тем же ключом — конфликт. Срок хранения ключей документируется. `Idempotency-Key` — контракт конкретного API, а не обязательный заголовок RFC 9110. После истечения срока дедупликации повтор может стать новой операцией.

## Как проверить

- Повторите запрос одновременно и после потери ответа.

## Человек

Определяет, что считать одной операцией и как долго хранить её результат.

## Агент

Реализует серверный контракт и проверяет успешный запрос, неверный ввод и повторное обращение.

Контроль результата:

- Повторите запрос одновременно и после потери ответа.

## Источники

- [RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html#section-9.2.2)
- [Idempotent requests](https://docs.stripe.com/api/idempotent_requests)

Уровень: Обязательно. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/api/openapi-modular/rules/idempotency.md)
