处理 POST api 和互联网连接丢失的良好实践

Mik*_*378 7 javascript rest http angularjs cordova

我拥有一个混合应用程序,其主要语言是Javascript(AngularJs)等。
基本上,我有一个旨在通过我的 REST api (在不同的服务器上)创建对象的表单。

我的save函数在概念上是这样的:

$scope.save = function () {
  var promise = CRUDService.post($scope.myElementToPost);
  promise.then(function (response) {
      //when 20X status
  }, function () {
      //when 40X - 50X status
  });            
};
Run Code Online (Sandbox Code Playgroud)

让我们假设触发该save函数,并且在POST请求之后,移动设备立即失去互联网连接,导致客户端出现错误,因此涉及错误回调

在这种“例外”情况下,该元素将在服务器的数据库上很好地创建,但不会触发 javascript 成功回调,因为互联网连接丢失会导致“错误”。

此案如何处理?
如何避免用户重新提交表单(他会不知道服务器端第一次创建元素)?

kab*_*apy 3

您可以创建一个交易模型:

  1. 客户端为此请求创建一个唯一的事务 ID 并附加到 Rest 调用

  2. 服务器收到请求,检查事务日志中是否有具有相同 id 的先前调用。

  3. 如果是新事务,服务器会将此事务 ID 存储在日志中,状态为“待处理”。然后服务器处理该请求。服务器将事务日志状态更新为“已处理”。然后服务器将响应发送给客户端并将响应存储在事务日志中

  4. 如果是旧事务,服务器重新向客户端发送响应

  5. 客户端收到响应,客户端向服务器发送交易完成信号。

  6. 服务器将事务日志删除/更新为“已完成”

第5步失败,客户端可以用相同的transaction id重新发送请求,没有重复记录的风险