Java 如何实施';会议';在使用RESTlet的restfulweb服务中?

Java 如何实施';会议';在使用RESTlet的restfulweb服务中?,java,web-services,web-applications,rest,restlet,Java,Web Services,Web Applications,Rest,Restlet,我不熟悉RESTfulWeb服务和RESTlet。我们只有构建基于servlet的web应用程序(JBoss/Apache上的servlet/JSP)的经验。现在,我们正在构建一个基于RESTlet的应用程序,其中服务器端API将由两种类型的客户端使用——使用浏览器的web和通过桌面基于swing的客户端 我的理解是,根据REST概念 a) 服务器无法维护会话以提高可伸缩性等原因很少 b) 来自客户端的每个请求都应该是自包含的 现在,我真的很困惑如何实现这一点。假设我们使用一个简单的购物车应用程

我不熟悉RESTfulWeb服务和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服务的人都必须设计自己的应用程序来处理这个问题。使用RESTLet在restfulweb服务中处理会话管理、身份验证和授权的最佳和最常见的方法是什么?若我们必须用客户端的数据在服务器端维护缓存,那个么这和代表我们维护服务器的会话有何不同

提前感谢,, 深沉的

1) 在第2步和第3步中,如果 服务器上没有维护会话吗

2) 客户是否需要发送一些附加信息 请求

对。您必须在每个请求中发送身份验证/授权数据。这将阻止服务器“记住”您是谁(即无状态服务器,无会话)

3) 如何在步骤3中检索特定于客户的购物车

让我们问一个不同的问题:如果服务器重新启动会发生什么?是否希望所有购物车数据丢失?可能不会。这意味着您必须将其存储在某个地方,以使其能够在重新启动后存活。意味着持久存储。可能在服务器或客户端上

…现在,如果客户端重新启动怎么办?您可以选择使用POST请求(当用户添加第一项时)为该用户创建购物车“资源”,或者在客户端登录时创建它(浪费)。然后继续使用PUT/DELETE更新购物车,并使用GET获取购物车

它应该在数据库中吗?可能是,取决于你是否想这样。如果它必须是持久的,那么它是一个保存它的好地方,这样它就可以在重启后生存下来

那么如何接收特定于客户的购物车呢?你只需要发送一个获取资源的请求!!!就这样!第一篇文章将在适当的URL上创建一个资源,然后您可以使用它

Restful web服务也有Restful URL,因此这是设计的关键部分

4) 客户是否需要发送它的购物车 服务器在第2步中创建/返回,还是在第3步中创建/返回

不,如上所述。但是,如果您在客户端使用cookie、LocalStorage或其他一些信息,那么您可能会这样做

显然,这是最简单的用例,因此每个人都在开发 RESTful web服务必须设计其应用程序来处理此问题。什么 是处理会话管理的最佳和最常用的方法, 使用RESTLet的RESTful web服务中的身份验证和授权

对。这很简单,但从“资源”而不是“服务”的角度思考需要一段时间。在restful设计中,一切都是(或可以是)资源,包括事务、购物车等

但是,授权/身份验证是http请求数据包的一部分,随每个请求一起发送。我建议你仔细阅读这些

如果我们必须用客户端的数据在服务器端维护缓存 那么,这与在我们的服务器上维护会话有何不同 代表

差别很大!您是缓存性能还是维护会话?如果系统重新启动,您的系统会在空缓存上无缝工作吗?如果是,您正在缓存性能,否则您正在维护状态


我强烈建议您阅读Richardson&Ruby的RESTful Web服务,以启发上述概念,并进一步了解RESTful服务是如何设计的……这需要一些时间来适应。

但是,如果服务器记住您是谁(仅此而已),为什么会不好呢。如果你不坚持REST规范的教条,你可以妥协并避免每次请求都提交身份验证。你的设计能经受住重新启动吗?此外,总是有一些检查,以确保它是同一个人,而不是被盗会话。