多次/循环请求 REST API 时处理连接丢失(客户端)

Posted

技术标签:

【中文标题】多次/循环请求 REST API 时处理连接丢失(客户端)【英文标题】:Handling connection loss when requesting a REST API multiple times / in a loop (client side) 【发布时间】:2019-12-13 19:16:21 【问题描述】:

我正在开展一个项目,我正在创建一个用于处理设备审计的全栈 Web 应用程序。我在前端使用 SPA 框架,在后端使用带有 Nodejs 的快速服务器(REST API)。

在应用程序本身中,我使用会话来记录带有一堆预定义问题(历史功能)的问题的答案。这里一个审计可以有多个会话。一个会话可以有多个关于预定义问题的答案(与上一个会话相同)。 因此,每次用户打开审核时,都会生成一个新会话,其中复制前一个会话的所有答案。创建会话时,会在客户端循环向服务器发送许多小请求(必须是原子的)。

我的问题是,在循环中(客户端)向 API 发送许多小请求时处理连接丢失的良好做法是什么?因为如果在会话创建期间从客户端到服务器的连接被中止,就会产生不一致的数据。我该如何处理这个问题以避免不一致?

一个想法是,将业务逻辑应用于相关请求(会话端点),我在服务器内部创建与项目的会话。但众所周知,在 rest api 中实现业务逻辑并不是一个好习惯。

与此类似,您可以将订单项和订单作为示例

有人可以帮我解决这个问题或有其他想法吗?

【问题讨论】:

【参考方案1】:

您似乎正在尝试将会话用作REST API 的一部分,这违反了 RESTful(服务器功能应该是无状态的)。您可以使用JWT 并让客户端负责提供与其会话关联的数据(如果数据足够小)。

【讨论】:

对不起,显然我无法清楚地表达自己。服务器功能仍然是无状态的。会话引用数据库中的数据而不是服务器功能。与此类似,您可以将订单项和订单作为示例 @erdi8:如果您编辑问题并详细说明第二段:使用什么状态,客户端是什么,服务器端是什么(例如会话)以及为什么需要这样的会话第一名。我将删除此答案并为更新的问题写一个。 我希望现在更清楚,如果没有,请告诉我。提前谢谢你。 @erdi8: 担心循环中的连接丢失对我来说听起来像是一个有状态的服务器,或者你担心底层协议 (TCP) 本身就是有状态的并处理错误,否则客户端可以从它被中止的地方恢复如果不涉及任何状态。如果数据已经传输到服务器,我不明白为什么您需要向服务器发出多个请求并且需要它们作为事务的一部分(服务器状态)。您可以统一这些小请求并将它们作为单个 API 调用发送,或者如果它是服务器端的多部分操作,则通过单个 API 端点在服务器端统一它们。 @Xarqon:将它统一到一个/单独的端点是我的第一个想法。但我不知道这是否是一个基于 RESTful 服务的有效解决方案,因为它会包含一些业务逻辑。

以上是关于多次/循环请求 REST API 时处理连接丢失(客户端)的主要内容,如果未能解决你的问题,请参考以下文章

Azure 搜索服务 REST API 删除错误:“文档密钥不能丢失或为空。”

将 JSON 请求循环到后端(REST API)

处理请求期间丢失的连接

处理对安全受限的 RestEasy 支持的 rest api 2.x 的 PreFlight 请求

谷歌日历 API。同时修补事件时修改丢失

SharePoint REST API Online 批处理请求问题:获取 400 Bad Request, odata.error Invalid request