我们可以使Restful webservice有状态

Lok*_*esh 18 rest soap web-services

我一直在阅读有关Restful webservices无状态的信息.我还可以看到,大多数基于Soap的Web服务也是无状态的,如果需要可以使其成为有状态并使它们成为有状态将取决于实现.因此,如果基于SOAP的Web服务是有状态的,那么每个请求都会传递会话ID,以继续进行会话.

我的问题是为什么不能用Restful webservices做同样的事情,我想我应该能够实现一个webservice,它可以继续使用相同的会话,其中会话id由Restful webservice制作是有状态的.

所以我的问题是,RestFul webservices是一个概念,其指导原则是不使它们成为有状态的吗?或者会在Restful webservice库(如泽西岛)中检查以阻止人们这样做?

ric*_*mer 15

REST的无状态性旨在确保应用程序可以很好地扩展.您可以添加状态,但在可伸缩性方面需要权衡.

向REST添加状态的最常见原因之一是进行身份验证.建立安全连接后,可以将安全cookie发送给客户端.然后,客户端将此cookie添加到会话的所有请求中.服务器维护状态,然后根据cookie为每个请求加载该状态.

考虑一个简单的网页.如果您不维护状态,则可以建立反向代理,通过URL将页面缓存在内存中,并将该资源分布到多个服务器上以进行加载.如果现在将当前登录用户的名称添加到该网页,则无法再缓存任何内容(至少在最基本的HTTP级别).现在只能通过身份验证cookie和URL的组合来缓存响应.

  • 无国籍状态可能已被"设计"以允许规模化,但是规模不是问题而且永远不会出现的情况呢? (2认同)
  • 有一些理由喜欢与系统复杂性相关的无状态,但主要是它的缩放.如果你不打算扩展,那么添加状态可能不会引起任何麻烦.几十年来,网站一直在这样做.它不再是REST-ful了. (2认同)
  • @JohnSaunders他们没有口述,但建议.在浏览器中,您可以输入URI,但我经常打赌您使用链接浏览新网站.REST正在复制(概括)这个想法,并建议改变服务和客户端的行为,就像浏览网页一样.不是用户知道可以在位置栏中输入的每个可能的URI,而是请求起始站点,并且根据呈现的结果,可以进行进一步的决定** (2认同)