Как защитить API от повторного выполнения операций
Клиент отправил POST, сервер выполнил операцию, но ответ потерялся из-за тайм-аута. Клиент повторяет запрос, и без защиты сервер может второй раз создать ресурс, изменить состояние или отправить письмо.
Идемпотентный эндпоинт связывает уникальный ключ операции с отпечатком тела запроса и сохранённым результатом. Первый обработчик атомарно резервирует ключ, поэтому параллельные запросы не запускают операцию заново. Повтор с тем же содержимым получает прежний результат, а тот же ключ с другим содержимым возвращает 409 Conflict.
Контракт идемпотентного API также охватывает статус незавершённой обработки, срок хранения ключей и внешние эффекты. Например, событие для очереди записывают вместе с результатом в одной транзакции, чтобы повторный запрос не породил второе действие.
Post #11873
2.41K

- 👍 8
- 🔥 4
- ❤ 3
- 👾 2
- 🥰 1
- 👏 1
- 😁 1
- 🤔 1