我们正在构建一套web。web由客户端调用&可以相互调用。
对于用户会话,这些API需要状态(例如,购物篮类型的东西)。状态可能很大(超过8k),因此看起来不适合客户机。
目前,状态由与数据库交互的应用程序代码直接管理,以存储和检索会话状态。管家的工作每天都会清理数据库。不使用HTTPSession。
我们正在考虑转移到会话关联,以减少数据库IO。我们仍然会在节点失败的情况下编写,但是它消除了读取的需要。
如果我们转移到会话亲和力,我是否正确地说,使用HTTPSession作为我们的内存会话状态是有意义的,这样web容器就可以管理生命周期了吗?
发布于 2020-10-18 15:42:45
当人们谈论“无状态API”时,并不意味着请求不会对服务器状态产生任何影响--毕竟,"REST“中的"S”表示“状态”,但请求的含义不会因状态而改变。这是通过使每个有状态对象成为API的显式部分来实现的。
因此,有状态API可能有一个动词“将项添加到我的购物篮”,其意义完全取决于将请求与以前的“创建篮”请求匹配。在无状态API中,您可能会说“将项添加到购物篮42",其中标识符"42”已被客户端从“创建篮”响应中记住。
REST更进一步说,对象应该是中心概念,而不是对这些对象产生副作用的行为。因此,GET /basket/42可能返回该篮子的当前内容,POST /basket/42/items可能会向其添加一个产品,而DELETE /basket/42/items/13可能会删除一个产品。
这之所以有用,是因为它使客户端在如何使用API方面具有更大的灵活性,而API在其提供的特性方面更灵活。例如,客户端可能希望维护两个单独的篮子,但是基于一组搜索结果;或者API可能提供克隆篮子的能力,或者合并两个篮子来同时支付费用。
因此,与其进一步使用服务器软件处理的透明“会话”,我建议您开始考虑每个服务的会话标识符代表哪些有状态对象。
即使您不重新设计服务以使这些对象显式化,也可以重新构建您的体系结构决策:
所有这些都需要询问是否使用HTTPSession,因为您需要配置它存储数据的位置、存储时间等等。自动化的主要内容是API中最不相关的:如何使无状态web浏览器在没有自定义客户端代码的情况下充当有状态客户端。
https://softwareengineering.stackexchange.com/questions/418072
复制相似问题