2013-06-20 3 views
2

Я новичок в Джерси/REST и пытаюсь написать простой веб-сервис. У меня есть проблема хранения данных между запросами.Сохранение переменных между запросом/ответами Джерси REST

Сервлеты могут получить доступ к сеансам, но я не верю, что Джерси/REST разрешает это.

В настоящее время я пишу эту услугу, чтобы приложение Android отправило запросы RESTful в Tomcat.

Теперь я еще не уверен в типе запроса: они должны быть URL-адресами с параметрами или просто строкой XML? Тип данных, которые должны быть переданы из приложения, будет включать адреса RSS-каналов и ключевых слов и различных метаданных.

XML-ответы от сервера снова будут состоять из адресов RSS-каналов, ключевых слов, частот ключевых слов и других метаданных.

Идея на данный момент заключается в использовании JAXB для приложений и сервера для создания и разбиения XML на объекты Java.

JSON или GSON недоступны здесь.

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

Или лучше использовать контекст сеанса для сервлетов через REST?

Извините, если вышеупомянутые звуки неясны. Я новичок в Джерси/REST.

ответ

1

Веб-службы REST основаны на протоколе HTTP, который является протоколом без состояния. На мой взгляд, сохранение состояния в вашем веб-сервисе - это не очень хорошая идея. Вы должны использовать файлы cookie для хранения пользовательских данных.

+0

Но я сохраняю состояние между запросами? Я бы сделал все, что было завершено в XML, отправленном/с клиента/сервера на запрос/ответ. И может ли Android-магазин куки? –

+0

Какие данные вы пытаетесь сохранить между запросами? – condit

+0

Вопрос был слегка изменен, чтобы получить дополнительную информацию. –

5

Хотя, как уже было сказано, что, как правило, рекомендуется ваш WS требует, чтобы быть лицом без гражданства, Джерси действительно полагается на Servlet, так что вы можете впрыснуть HttpServletRequest и получить сессию там:

@GET 
public String getMethod(@Context HttpServletRequest req) { 
    HttpSession session= req.getSession(true); 
    ... 

Вы можете настроить ваше хранилище сеансов вашего веб-сервера в память, cookie, кеш, db или что-то еще.

0

Услуги JAX-RS могут быть либо одноточечными, либо объектами с запросом. Синтаксис означает, что один и только один Java-объект обслуживает HTTP-запросы. Посредством запроса создается объект Java для обработки каждого входящего запроса и отбрасывается на в конце этого запроса. По запросу также подразумевается безгражданство, поскольку между запросами не поддерживается .

+0

Я предполагаю, что для каждого запроса новый Java-объект будет создан, когда запрос будет получен сервером. Все детали запроса будут сохраняться в базе данных, и ответ будет содержать уникальный идентификатор (хранящийся в XML отклика), служащий идентификатором сеанса сортировки. Насколько я понимаю, Джерси, он будет эмулировать аспект сервлета для обработки нескольких запросов. –