如何在 REST API 级别处理来自客户端的连续汇款请求(秒/毫秒内)



我正在尝试编写一个银行应用程序传输REST API。我使用SpringMVC,JDBCTemplate来开发相同的内容。我正在发送一个 POST 请求,其中包含 JSON 格式的有效负载(从帐户 ID、到帐户 ID、金额(。

如果用户错误地多次单击传输按钮(假设这未在 UI 上处理(,并且将相同的有效负载作为 JSON 发送到 API:

1.( 如何确保只处理第一个请求?

2.( 如何处理其余的重复请求?

3.(用户可能真的试图再次将相同的金额转移到同一目标帐户,因此重复项应该只处理几分钟。如何实现这一点?

4.( 如何在实时银行应用程序中处理此方案?

我正处于学习编写 REST API 的初始阶段,因此有关此用例的任何指导将不胜感激。

根据我的理解,请在下面找到相同的评论;

在这种情况下,我们需要在接口本身应用检查。

如果请求来自按钮,那么可以通过onclick事件和简单的确认对话框轻松处理

如果需要不要求用户确认并将请求发送到API以处理付款,则可以将以前的请求存储在某个地方(数组或会话(,如果匹配,则要求用户确认。

这是解决此问题的方法。

解决此问题的 RESTful 方法是确保仅使用幂等请求。幂等请求或多或少定义为:

执行一次请求后服务器上的状态将与执行相同的请求 n 次相同。

有一些 HTTP 请求被显式定义为幂等的,例如:

  • 删除
  • 获取

因此,如果可以设计应用程序,即使用PUT创建新传输,并且正确实现PUT,则 n 次接收相同的请求应该没有副作用。

不过,这并不总是特别容易,因为如果您正在使用PUT"创建"新的传输资源,这意味着客户端必须确定传输的新 URI 是什么。例如,客户端可以为 url 生成 UUID。

我认为这种方法是迄今为止最可取的。如果传输资源已存在,则可以通过包含If-None-Match: *标头,让服务器自动引发错误。如果使用此标头,则可以返回资源已存在412 Precondition Failed

我的猜测是,您的直觉本来是使用POST来创建新的转移,但是POST = create & PUT = update的想法是不正确的。PUT应用于创建和更新资源(如果客户端可以知道路径(。

最新更新