Исключение в идемпотентном запросе PUT?

У меня проблема с реализацией операции Idempotent в Put.

Существует Put запрос, который обновляет поле в ресурсе rest API.

Но для реализации идемпотентности каждый повторный запрос должен приводить к одному и тому же состоянию объекта.

Мы используем database что произойдет, если произойдет ошибка. Значит ли это, что Idempotency потерян? если не

Теперь по тому же определению - если у нас есть условное изменение статуса в API отдыха в поле .eg) поле статуса.

Если логика заключается в обновлении поля статуса только в том случае, если поле родительского свойства locked==false, мы можем создать исключение, говорящее: «Исключение BusinessLogic не может обновить статус».

Итак, теоретически у нас есть две операции, у нас аналогичная ситуация:

  1. можно было бы быть идемпотентом, если бы не ошибки в реальной жизни, которых нельзя избежать
  2. Не следует быть идемпотентом, но мы можем сделать его похожим

вопрос:

Как вы реализуете идемпотентность на основе обработки ошибок для put? и если обработка ошибок в порядке, значит ли это, что даже бизнес-логику можно сделать идемпотентной Put?


person Dexters    schedule 06.05.2019    source источник


Ответы (1)


Может оказаться полезным ознакомиться с соответствующим определением идемпотента.

Мы используем базу данных, что произойдет, если произойдет ошибка. Значит ли это, что идемпотентность потеряна?

Идемпотентность не теряется. Idempotent не обещает, что каждый запрос будет успешным; это означает только то, что любая потеря собственности, которая происходит поскольку сервер получил несколько копий запроса, это вина сервера.

означает ли это, что даже бизнес-логику можно сделать идемпотентной?

Да. Вы можете сделать это одним из двух способов: спроектировав протокол вашего доменного приложения таким образом, чтобы запросы были изначально идемпотентными; или с помощью условных запросов для описания состояния "до", которое запрос намеревается изменить.

person VoiceOfUnreason    schedule 06.05.2019
comment
@VoiceOfReason это то, что мне нужно было знать. спасибо за ссылки. Не могли бы вы поделиться некоторыми примерами кода или ссылками о том, как реализовать протокол приложения домена? Для меня это новый термин. - person Dexters; 07.05.2019
comment
Посмотрите это выступление Джима Уэббера: youtube.com/watch?v=aQVSzMV8DWc - person VoiceOfUnreason; 07.05.2019