如何使我的Web应用程序无状态,但仍然做一些有用的事情?

我见过这个建议......

理想情况下,网络应遵循REST原则并且完全无状态。 因此,单个URL应该标识单个资源,而不必保留每个用户的导航历史记录。

...我读了维基百科页面http://en.wikipedia.org/wiki/REST,它听起来不错,但我没有得到如何实际执行它。 我正在使用ASP .NET Webforms NOT MVC。

例如,在我即将构建的应用程序中 - 我需要我的用户登录,然后才允许他们执行任何操作。 在他们被允许做很多有用的事情之前,他们必须跳过一些环节 - 比如接受T和C,并确认他们的基本细节没有改变。 最后他们被允许做一些他们真正想要的东西,比如BuyAProduct!

在我看来(我来自Rich客户的重磅有形世界)我需要状态记录他们已经完成了什么,并从中推断出他们被允许执行的操作。 我看不出我能够如何支持他们(比如说)为BuyAProduct URI添加书签。 当他们到达书签时,我怎么知道他们是否已经登录,以及他们是否同意T和C以及他们是否忠实地检查了他们的基本信息?

我喜欢这个应用程序无国籍的想法,部分原因是它似乎完全解决了“当用户点击后退和前进按钮时我做了什么?”的问题。 我看不出我还能如何让它正常工作。 我觉得我错过了一些关于这方面真​​正基础的东西。


建议并不是建议应用程序应该是无状态的 - 它暗示应用程序中的资源应该是无状态的。 也就是说,一个名为“www.mysite.com/resources/123”的页面将始终代表相同的资源,而不管哪个用户正在访问它或者他们是否登录。

(您可能会拒绝未登录的用户访问的事实是一个单独的问题 - 重点在于Uri本身不依赖于用户特定的数据来工作。)

例如,违反此规则的网站类型是那些您导航到产品页面,通过电子邮件将Uri发送给您的朋友,并在点击它时,他们看到一条消息,沿着“我很抱歉,您的会话已过期“或”此产品不存在“或类似的。 发生这种情况的原因是因为Uri包含特定于网站用户会话的某些内容,并且如果其他用户尝试使用该链接(以后再使用同一用户),则该内容不再有效。

因此,您的应用程序始终需要某种形式的状态,但实施状态的重要因素在哪里。

希望有助于摆脱一点光!


如果你想做Web表单,那很酷。 如果你想做REST,那也很酷。 但请为神圣的一切的爱,请不要尝试使用Web窗体坚持REST的原则。

为了进一步澄清这一点,我不认为webforms是REST的明智选择,因为WebForms基于的概念模型就是将Web抽象出来的概念模型。 它是为模拟VB开发模型而构建的。

REST包含HTTP和Web应用程序的分布式特性。 这两种方法不兼容。


维护资源状态是可以的。 “无状态禁止”只是指会话状态。

以下是Roy Fielding的开创性REST推导的摘录:

我们接下来为客户端 - 服务器交互添加一个约束:通信本质上必须是无状态的,如第3.4.3节(图5-3)中的客户端无状态服务器(CSS)样式,以便每个来自客户端的请求服务器必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文。 会话状态因此完全保留在客户端上。

链接地址: http://www.djcxy.com/p/41137.html

上一篇: How do I make my Web Application stateless yet still do something useful?

下一篇: I could use some concrete information