В Java есть оптимистический термин блокировки. Когда сущность отправляется во внешний интерфейс, ее версия также может быть отправлена, а затем повторно отправлена во внутренний сервер с изменениями. Однако как следует обрабатывать сценарий ниже?
- Некоторый клиент A получает клиента {id: 1, version: 1}
- Какой-то другой клиент B модифицирует клиента, так что теперь он {id: 1, version: 2} в бэкэнде.
- Кто-то угадывает новую версию и отправляет запрос со старыми изменениями клиента и версии 2, сделанными B.
Если сервер опирается на версию, отправленную с внешнего интерфейса, он может быть обманут, если кто-то угадает действительную версию. Есть ли хорошее решение?
Я думал об отправке некоторого идентификатора с GET-запросами и кэшировании в бэкэнде в течение определенного времени, какие версии сущностей были отправлены во внешний интерфейс, поэтому, когда кто-то хочет обновить сущность, он должен указать идентификатор, предоставленный в GET. Однако это просто сложно.