Как обеспечить выполнение «сеансов» в веб-сервисах RESTful с использованием RESTlet? - PullRequest
9 голосов
/ 10 октября 2011

Я новичок в веб-сервисах RESTful и RESTlet.У нас есть только опыт создания веб-приложений на основе сервлетов (Servlet / JSP на JBoss / Apache).Сейчас мы создаем приложение на основе RESTlet, в котором API на стороне сервера будут использоваться двумя типами клиентов: веб-браузер и Swing на настольном компьютере.

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

Теперь ядействительно запутался, как этого добиться.Предположим, мы берем простое приложение для корзины покупок.

Шаг 1) Клиент отправляет запрос аутентификации, сервер аутентифицируется, а сервер отвечает ОК.

Шаг 2) Клиент отправляет запрос на добавление товара в корзину.Сервер отвечает ОК.

Шаг 3) Клиент отправляет еще один запрос на добавление 2-го элемента в карточку покупателя.Сервер отвечает ОК.

Обычно в обычном веб-приложении на шаге 1 на сервере создается сеанс, и с этого момента все запросы, относящиеся к этому клиенту, автоматически связываются с одним и тем же сеансом, и мы сохраняем сеансукажите (Корзина в данном случае) в объекте сеанса и получите / обновите его с последующими запросами от клиента.

Теперь в приведенном выше сценарии:

1) как мы аутентифицируем и авторизируем Клиента на шагах 2 и 3, если на сервере не поддерживается сеанс?

2) нужно ли клиенту отправлять некоторую дополнительную информацию с каждым запросом?

3) Как мы можем получить клиентскую корзину покупателя на шаге 3?

4)клиенту необходимо отправить свою корзину покупок, которая была создана / возвращена сервером на шаге 2 снова на шаге 3?

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

Заранее спасибо, Deep

1 Ответ

15 голосов
/ 13 октября 2011

1) как мы аутентифицируем и авторизируем Клиента на Шагах 2 и 3, если сеанс не поддерживается на сервере?

2) нужно ли клиенту отправлять дополнительную информацию с каждым запрос?

Да. Вы должны отправлять данные аутентификации / авторизации с каждым запросом. Вот что помешает серверу «запомнить», кто вы (то есть сервер без сохранения состояния, без сеансов)

3) Как мы получим корзину покупателя для клиента на шаге 3?

Давайте зададим другой вопрос: что произойдет, если сервер перезагрузится? Вы хотите, чтобы все данные корзины были потеряны? Возможно нет. Подразумевается, что вы должны хранить его где-то, чтобы он мог пережить перезапуск. Подразумевается постоянное хранение. Может быть на сервере или клиенте ...

... теперь, что если ваш клиент перезагрузится? Вы можете выбрать «ресурс» корзины покупок для этого пользователя с помощью запроса POST (когда пользователь добавляет первый элемент) или создать его в тот момент, когда клиент входит в систему (расточительно). Затем вы продолжаете обновлять корзину покупок, используя PUT / DELETE, и выбираете ее, используя GET.

Должно ли оно быть в БД? Может быть, зависит, если ты так хочешь. Если он должен быть постоянным, это хорошее место, чтобы сохранить его, чтобы он мог пережить перезапуск.

Так как получить клиентскую корзину? Ну, вы просто отправить запрос GET для ресурса !!! Это оно! Первый POST создаст ресурс по соответствующему URL, и вы сможете использовать его.

Restful веб-сервисы также имеют релакс-URL, что является ключевой частью дизайна.

4) Нужно ли клиенту отправлять свою корзину, которая была снова был создан / возвращен сервером на шаге 2 на шаге 3?

Нет. Как уже упоминалось выше. Но если вы используете файлы cookie, LocalStorage или какую-либо другую информацию на стороне клиента, то, возможно, вы используете.

Очевидно, это простейший вариант использования, и поэтому каждый разрабатывает Веб-сервисы RESTful должны разрабатывать свое приложение, чтобы справиться с этим. Какие является лучшим и наиболее распространенным способом управления сессиями, аутентификация, авторизация в веб-сервисах RESTful с использованием RESTLet?

Да. Это просто, но требуется время, чтобы подумать о «ресурсах», а не «услугах». В спокойном дизайне все является (или может быть) ресурсом, включая транзакции, корзины и т. Д.,

Однако авторизация / аутентификация являются частью пакета HTTP-запроса и отправляются с каждым запросом. Я предлагаю вам прочитать о них.

Если мы должны поддерживать кеш на стороне сервера с данными клиента тогда как это отличается от сеансов обслуживания сервера на нашем имя?

БОЛЬШАЯ разница! Вы кешируете для производительности или поддерживаете сеанс? Если система перезапустится, будет ли ваша система работать без проблем в пустом кеше? Если да, вы кешируете производительность, иначе вы поддерживаете состояние.

Я настоятельно рекомендую вам прочитать RESTful Web Services от Richardson & Ruby, чтобы отредактировать вышеупомянутые концепции и получить более глубокое представление о том, как спроектированы спокойные службы ... к этому нужно привыкнуть.

...