Управление состоянием в приложении на основе RESTful - PullRequest
3 голосов
/ 23 декабря 2011

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

1) Весна 2) Apache CXF (JAX-RS)

Мои вопросы

1) Способ управления состоянием между запросами. Например, пользователь прошел проверку подлинности, и теперь он делает серию запросов, скажем, просматривая разбитый на страницы отчет. Я думаю, что URL для этого будет выглядеть как

domain.com / отчеты / customreport / страница / 1 domain.com/reports/customreport/page/2 и т.д ...

a) Где хранятся пользовательская информация и параметры запроса, чтобы ее можно было разделить между запросами. б) Допустим, результат передается в потоковом режиме, где хранится набор строк?

Существует ли полный пример приложения, похожего на Petclinic, который может предоставить лучшие практики для такого приложения.

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

Если вы выполняете RESTful строго / правильно, то аутентификация пользователя выполняется в каждом запросе, и концепция сеанса отсутствует. Каждый запрос содержит достаточно контекстной информации (в URL и / или параметрах запроса), чтобы он мог работать независимо от сеанса.

1) Как осуществляется управление состоянием между запросами.

Он должен управляться клиентом.

a) Где хранятся пользовательская информация и параметры запроса, чтобы ее можно было разделить между запросами.

Информация об аутентификации пользователя сохраняется клиентом и предоставляется серверу при каждом запросе. Сервер будет пересчитывать любую производную информацию о пользователе по каждому запросу. Любые параметры запроса, которые обычно хранятся в «сеансе» на стороне сервера, должны передаваться заново при каждом запросе.

б) Допустим, результат передается в потоковом режиме, где хранится набор строк?

В первый миг никуда. Каждый раз запрос повторяется с параметром, указывающим, куда переходить. Если бы производительность была проблемой, вы могли бы

  • упреждающее чтение нескольких страниц набора результатов и сохранение их в кэше на стороне сервера, или
  • настроить кэширование запроса базы данных для запроса.
3 голосов
/ 23 декабря 2011

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

2) Потоковая передача не имеет большого смысла в RESTful API, если вы хотите выполнять потоковую передачу, я настоятельно советую вам искать что-то вроде WebSockets (в Java вы можете легко сделать это с помощью Jetty )

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

Вы также должны прочитать больше о REST, так как ваш вопрос довольно расплывчатый, хорошее начало - книга Restful Web Services или, если вы любите приключения, вы можете попробовать Диссертация Роя Филдинга , которая определила то, что мы называем REST сегодня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...