DG.*_*DG. 9 java rest web-services web-applications restlet
我是RESTful Web服务和RESTlet的新手.我们只有构建基于servlet的Web应用程序(JBoss/Apache上的Servlet/JSP)的经验.现在,我们正在构建一个基于RESTlet的应用程序,其中服务器端API将由两种类型的客户端使用 - 使用浏览器的Web和基于桌面的swing.
我理解的是,根据REST概念a)服务器无法维护会话以提高可伸缩性和其他一些原因b)来自客户端的每个请求都应该是自包含的
现在,我真的很困惑如何实现这一目标.假设我们采用简单的购物车应用程序.
步骤1)客户端发送认证请求,服务器认证,服务器响应OK.
步骤2)客户端发送将项目添加到购物车的请求.服务器响应正常.
步骤3)客户发送另一个请求以将第二项添加到购物卡.服务器响应正常.
通常,在正常的Web应用程序中,会在服务器上的步骤1中创建会话,从那时起,与该客户端相关的所有请求将自动与同一会话关联,并且我们将会话状态(在这种情况下为购物车)存储在会话对象,并使用来自客户端的后续请求来检索/更新它.
现在,在上面的场景中:
1)如果服务器上没有维护会话,我们如何在步骤2和3中对客户端进行身份验证和授权?
2)客户是否需要为每个请求发送一些附加信息?
3)我们如何在步骤3中检索客户特定的购物车?
4)客户端是否需要在步骤3中再次发送由服务器在步骤2中创建/返回的购物车?
显然,这是最简单的用例,因此每个开发RESTful Web服务的人都必须设计他们的app来处理这个问题.使用RESTLet在RESTful Web服务中处理会话管理,身份验证和授权的最佳和最常用方法是什么?如果我们必须使用客户端的数据维护服务器端的缓存,那么这与代表我们的服务器维护会话有何不同?
提前谢谢,Deep
PhD*_*PhD 15
1)如果服务器上没有维护会话,我们如何在步骤2和3中对客户端进行身份验证和授权?
2)客户是否需要为每个请求发送一些附加信息?
是.您必须为每个请求发送身份验证/授权数据.这就是阻止服务器'记住'你是谁(即无状态服务器,没有会话)的原因
3)我们如何在步骤3中检索客户特定的购物车?
让我们问一个不同的问题:如果服务器重新启动会发生什么?您想要所有购物车数据丢失吗?可能不是.暗示你必须把它存放在一个可以在重启后存活的地方.暗示持久存储.可以在服务器或客户端上......
...现在,如果您的客户重启,该怎么办?您可以选择使用POST请求为用户创建购物车"资源"(当用户添加第一个项目时),或者在客户端登录时创建(浪费).然后,您继续使用PUT/DELETE更新购物车,并使用GET获取它.
它应该在DB中吗?可能是,取决于你是否想要它.如果它必须是持久的,那么它是一个保持它的好地方,以便它可以在重启后存活.
那么如何接收客户特定的购物车?那么你只需要发送资源的GET请求!而已!第一个POST将在适当的URL处创建资源,然后您可以使用它.
Restful Web服务还具有宁静的URL,因此这是设计的关键部分.
4)客户端是否需要在步骤3中再次发送由服务器在步骤2中创建/返回的购物车?
不,如上所述.但是如果你在客户端使用cookies或LocalStorage或其他一些信息,那么也许你这样做.
显然,这是最简单的用例,因此每个开发RESTful Web服务的人都必须设计他们的app来处理这个问题.使用RESTLet在RESTful Web服务中处理会话管理,身份验证和授权的最佳和最常用方法是什么?
是.这很简单,但需要一段时间来考虑"资源"而不是"服务".在宁静的设计中,一切都是(或可以是)资源,包括交易,购物车等,
但是,授权/身份验证是http请求数据包的一部分,并随每个请求一起发送.我建议你阅读这些内容.
如果我们必须使用客户端的数据维护服务器端的缓存,那么这与代表我们的服务器维护会话有何不同?
很大的区别!您是在缓存性能还是维护会话?如果系统重新启动,您的系统将在空缓存上无缝工作吗?如果是的话,你正在缓存性能,否则你就是维持状态.
我强烈建议您阅读Richardson和Ruby的RESTful Web服务,以了解上述概念,并更深入地了解如何设计宁静的服务......这需要一些时间来适应.
| 归档时间: |
|
| 查看次数: |
9216 次 |
| 最近记录: |