контекст
Из-за отсутствия сохранения состояния архитектурного стиля REST, когда каждый запрос стоит отдельно, ведущий сервер никогда не хранит никакой информации о клиенте.
Таким образом, пессимистическое управление параллелизмом не подходит, потому что для этого требуется хранилище сервера, клиент которого получает блокировку ресурса. Затем используется оптимистичный контроль параллелизма с помощью Etag
заголовка. (кстати, как я и просил там /programming/30080634/concurrency-in-a-rest-api )
проблема
Основная проблема с оптимистичным механизмом управления параллелизмом заключается в том, что вы все время разрешаете всем клиентам выполнять любые операции.
И я хотел бы избежать этого, не нарушая принцип безгражданства REST. Я имею в виду, что все клиенты не могут выполнять какие-либо операции в любое время.
Вопрос
На мой взгляд, это было бы возможно с полуоптимистическом механизм управления параллелизмом, как этот:
- Клиенты могут запросить токен
- Может быть создан только один токен с ограниченным сроком действия
- Для выполнения операций над ресурсами (такими как POST или PUT ) клиент должен предоставить этот токен как часть тела (или заголовка?) Запроса. Клиент, у которого нет токена, не может выполнять эти операции.
Это очень похоже на оптимистичное управление параллелизмом, за исключением того, что только один клиент может выполнять некоторые операции (тот, который получил токен) ... напротив "все клиенты могут выполнять все операции".
Совместим ли этот механизм с архитектурным стилем REST? Это нарушает какие-либо ограничения? Я собирался задать вопрос о SO, но это, скорее, вопрос высокого уровня, связанный с разработкой программного обеспечения.
Etag
? Поскольку Etag
вы никогда не уверены, что ваши операции будут завершены, у вас может возникнуть ситуация, когда вы никогда не будете выполнять никаких операций. С блокировкой вы обязательно по крайней мере выполните свою операцию. Таким образом, наличие простой блокировки - это просто середина между средой, в которой могут возникать «высокие конфликты» и «редкие конфликты».
Transaction
явно моделировать ресурс.