Оптимистическая блокировка и HTTP-заголовок If-Match - PullRequest
3 голосов
/ 09 марта 2010

Какой у вас опыт использования If-Match для реализации оптимистической схемы блокировки в веб-сервисе?

Для упрощения, скажем, мы создаем простую CMS, состоящую исключительно из «страниц», каждая из которых имеет только тело. Если два пользователя начинают редактировать одну и ту же страницу одновременно, то фиксируются только те изменения, которые внесены последним пользователем, сохраненным последним (или, скорее, они перезаписывают изменения, сделанные другим пользователем).

Чтобы предотвратить это, я планирую использовать условные PUT s, то есть извлечь значение заголовка ответа ETag и предоставить его в качестве значения заголовка If-Match в запросе PUT. Если это значение не совпадает со значением на основе текущего состояния страницы, сервер отклоняет PUT с 412.

Мне известно об очевидной ловушке, в которой могут возникнуть условия гонки между проверкой предусловия и фактическим обновлением базы данных, но их можно исправить с помощью транзакций и сортировки.

Вы пробовали это на практике? Это плохая идея?

1 Ответ

1 голос
/ 09 марта 2010

Ну, это одна из вещей, для которой был разработан If-Match, и да, это работает как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...