У меня есть запрос для ответа на стандартный запрос удаленных клиентов. Стандарт в том смысле, что он не принимает никаких параметров извне сервера. Всякий раз, когда
любой отправляет запрос на URL-адрес, скажем http://www.example.com/query, он/она получает содержимое reply.xml
в теле ответа,
в зависимости от того, что в данный момент предоставляет база данных.
Содержимое reply.xml
изменяется только по содержимому базы данных на сервере и не изменяется ни на что внешнее
например, кто выполняет запрос, на котором ввод и т.д., следовательно, не принимает никаких параметров от клиентов. Я даже не проверяю аутентификацию - мы оставляем все на брандмауэре.
Итак, я написал метод @POST
, скажем query()
, чтобы вызвать этот запрос, отправленный в http://www.example.com/query, и доставить результат. Я использовал Jersey
в нем, и все отлично работает со спецификациями, за исключением того, что
запросы должны быть эксклюзивными во времени.
то есть один запрос должен быть подан в одно мгновение - последующие клики пользователя должны получать сообщение с состоянием HTTP 309, если только сервер не запускает процесс запроса, вызванный моим методом query()
.
Как достичь этого? Я попытался сделать query()
serve @PUT
вместо ответов @POST
и получил те же результаты.
Может быть, наивный Q по теме. Однако, не очень хорошо знакомы с Restful services.
Я могу сделать это, набирая токен, чтобы контролировать, что за один раз запускается только один запрос, и одновременные запросы получают HTTP 309. Однако для этого на сервере должен быть лучший и простой способ.
Я использую Tomcat 8, Jersey 1.19.
ТИА.
Примечание. Я прочитал PUT vs POST в REST среди других полезных обсуждений.
//=====================
EDIT:
Какой пользователь отправляет запрос, не имеет никакого значения в любое время.
Предположим, что userA
отправил запрос. в то время как этот запрос все еще выполняется, то есть перед тем, как query()
возвращает ответ на userA
, userB
отправил запрос. userB
должен получать 309 - только потому, что в это время обрабатывается запрос.
Является ли userA
= userB
или userA
< > userB
, 309 должен быть возвращен только потому, что есть запрос запроса, когда он уже запущен. и это единственный раз, когда пользователь получает 309.
//============================================= =
РЕДАКТИРОВАТЬ-2:
Я знаю решения w/ concurrency. Я предполагаю, что есть один, использующий функции Restful. это скорее академический Q.