Я новичок в веб-службах RESTful и RESTlet. У НАС есть только опыт создания веб-приложений на основе сервлетов (Servlet / JSP на JBoss / Apache). Теперь мы создаем приложение на основе RESTlet, в котором API на стороне сервера будет использоваться двумя типами клиентов - веб-браузером и Swing на основе рабочего стола.
Я понимаю, что в соответствии с концепцией REST а) сервер не может поддерживать сеансы для улучшения масштабируемости и по ряду других причин б) каждый запрос от клиента должен быть автономным
Теперь я действительно не понимаю, как этого добиться. Предположим, мы возьмем простое приложение корзины покупок.
Шаг 1) Клиент отправляет запрос аутентификации, сервер аутентифицируется, и сервер отвечает OK.
Шаг 2) Клиент отправляет запрос на добавление товара в корзину. Сервер отвечает ОК.
Шаг 3) Клиент отправляет еще один запрос на добавление 2-го товара в карточку покупок. Сервер отвечает ОК.
Обычно в обычном веб-приложении сеанс создается на шаге 1 на сервере, и с этого момента все запросы, относящиеся к этому клиенту, автоматически связываются с одним и тем же сеансом, и мы сохраняем состояние сеанса (в данном случае корзина для покупок ) в объекте сеанса и получить / обновить его с последующими запросами от клиента.
Теперь, в приведенном выше сценарии:
1) как мы аутентифицируем и авторизуем клиента на шагах 2 и 3, если на сервере не поддерживается сеанс?
2) Нужно ли клиенту отправлять дополнительную информацию с каждым запросом?
3) Как мы получаем корзину покупок для конкретного клиента на шаге 3?
4) Нужно ли клиенту отправлять свою тележку покупок, которая был создан / возвращен сервером на шаге 2 снова на шаге 3?
Очевидно, что это простейший вариант использования, и поэтому каждый, кто разрабатывает веб-службы RESTful, должен разрабатывать свое приложение, чтобы справиться с этим. Каков наилучший и наиболее распространенный способ управления сеансами, аутентификации и авторизации в веб-службах RESTful с помощью RESTLet? Если нам нужно поддерживать кеш на стороне сервера с данными клиента, то чем это отличается от сервера, поддерживающего сеансы от нашего имени?
Заранее спасибо, Deep