Веб-страница | frontend, backend, fullstack, react, vue, javascript, typescript, css, html
IT и технологии · 3 октября 2026 г.
Как защитить веб-API от повторных операций с помощью идемпотентности и Outbox
Как защитить веб-API от повторных операций с помощью идемпотентности и Outbox Таймаут не сообщает клиенту, успел ли сервер провести платёж. Повторный POST может списать деньги ещё раз, поэтому одна логическая операция должна приходить с одним ключом идемпотентности. Сервер атомарно резервирует ключ и сохраняет слепок запроса вместе с ответом. Проверка «сначала найти, потом записать» оставляет гонку: два запроса одновременно не увидят ключ. Нужны уникальный индекс или условная запись. Для базы и очереди помогает Outbox: бизнес-запись и событие попадают в одну транзакцию, а отдельный процесс отправляет событие в очередь. Я сохранил разбор идемпотентных API и Outbox как чек-лист для POST-ручек: проверить атомарное резервирование, возврат прежнего ответа и тест с полусотней одновременных запросов.