Сервер отслеживает версии состояния ресурса и позволяет клиенту указывать, для какой версии предназначен запрос. Если состояние изменилось, сервер отклоняет запрос. Версия может быть как числом (номером последнего изменения), так и хэшом от списка ресурсов.
Как это работает на примере сервиса заказа такси:
Вводные
GET /v1/orders
.Процесс
GET /v1/orders
.HTTP-метод удаления
DELETE
по своей природе идемпотентный, так как повторное удаление уже удаленного ресурса не изменяет состояние системы. После первого успешного все последующие запросы на удаление будут возвращать ошибку 404 (или другой код согласно логике сервера).Более гибкий способ обеспечить идемпотентность удаления – использовать подход “Soft Delete”. Вместо физического удаления записи из базы данных, запись просто помечается как удаленная с помощью специального флага.
Soft Delete гарантирует, что все последующие запросы на удаление будут успешными и вернут одинаковый результат. Это также позволяет отслеживать удаленные записи и при необходимости восстанавливать их, обеспечивая дополнительный уровень безопасности и контроля.
📎 Статьи
1. Стажёр Вася и его истории об идемпотентности API — очень рекомендуем
2. Кратко об идемпотентности от Yandex Cloud
3. Идемпотентность: больше, чем кажется
4. Идемпотентность при использовании API Mindbox
5. Что такое ключ идемпотентности и зачем он нужен
6. Семантика exactly-once в Apache Kafka
1. Что такое идемпотентность, или история Васи и его приложения
2. Идемпотентность и коммутативность API в очередях и HTTP // Демо-занятие курса «Software Architect»
3. Идемпотентность: что, где и как
4. Микросервисы: идемпотентность операций
#api #проектирование