У меня есть запрос для ответа на стандартный запрос удаленных клиентов. Стандарт в том смысле, что он не принимает никаких параметров извне сервера. Всякий раз, когда
любой отправляет запрос на 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.