Пагинация в веб-приложении REST - PullRequest
5 голосов
/ 05 июля 2010

Обычно пользователь выполняет поиск, получает список совпадений, а затем может просматривать его. Список совпадений - это промежуточный результат, который остается неизменным на протяжении всего просмотра и обычно хранится в состоянии сеанса. Например. если новые элементы добавляются одновременно другими, они будут появляться только при последующем поиске.

В приложении REST я не могу легко получить этот промежуточный результат - он не принадлежит ни клиенту, ни модели. Я прочитал Пагинацию в веб-приложении REST , но не совсем ясно с ответом. Решение, по-видимому, предполагает, что модель не обновляется, пока пользователь просматривает результаты.

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

Как мне решить эту проблему?

Примечание: Я спрашиваю, потому что планирую использовать инфраструктуру воспроизведения , в которой вообще нет понятия состояния HTTP или сеанса; это чисто спокойный.

Ответы [ 2 ]

5 голосов
/ 07 июля 2010

Получив результат запроса при первом поиске, Вы можете сохранить результат в кеше.Для одного сервера это может быть ehcache (поддерживается в режиме воспроизведения) или memcached (также поддерживается в режиме воспроизведения) для кластерной среды.Вы можете сохранить результат как статическое имя + идентификатор сессии.Таким образом, вам нужен только идентификатор сеанса для каждого запроса, он сохраняется в файле cookie клиента и доступен в вашем игровом приложении.Вы можете использовать кэшированные данные для просмотра страниц.Я также рекомендую ElasticSearch.

РЕДАКТИРОВАТЬ: лучший способ, вы можете использовать play-search http://github.com/jfp/play-search, Пример:

    Query q = Search.search("object:dogs", Folder.class);
q.orderBy("object")
    .page(2,5)
    .reverse();

PS: Ваше решение сИгра идеальна.Я профессиональный разработчик .net, и я могу сказать, что единственная (оптимальная) веб-платформа в мире, которая может участвовать в гонках с asp.net mvc 2, - это платформа Play.Grails глючит, Django / Python, Yii / Php, Rails все медленные, небезопасные и далекие от фреймворков jvm / clr.калитка, гобелен, распорки, JSF, весна MVC все многословны и бесполезны.Spring Roo является только генератором шаблонов.Asp.net mvc превзошел asp.net и стал # 1 платформой разработки для .net, но Sun работала над старым клоном asp.net с jsf для следующего поколения, большая ошибка.Единственная надежда на java - игровые рамки на мой взгляд.С модулем Scala это идеально ...

0 голосов
/ 05 июля 2010

Я немного растерялся из-за вашего контекста, но если я должен дать краткий ответ, так это то, что результаты поиска должны быть частью модели.Я полагаю, у вас есть модель для поиска.Что вы делаете, это индексируйте детали, которые вам нужны для поиска, и сохраняете индексную информацию (делая ее тоже частью модели).Когда вы выполняете поиск, вы запрашиваете индекс и отображаете результаты.Повторное выполнение поиска не будет содержать новые добавленные элементы, если только индекс не будет восстановлен.

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

...