首页 > 解决方案 > 将移动应用程序中的离线数据同步到服务器时避免重复

问题描述

我们有一个移动应用程序。有一个销售模块。它调用 sales rest api 来创建销售订单。

销售 api POST 请求的格式:

//server generates primary key. there is no support for request id currently
{
    "customer_id" : 1,
    "items" : [
               { "item_id" : 123 },
               { "item_id" : 456} 
               ],
    "store_id" : 10,
    "sale_time" : "2019-10-01 13:45:01"

}

由于我们必须支持离线模式,所有销售都将存储在设备本地,当互联网连接可用时,它将与服务器同步。

但是我知道,如果互联网连接很差,http 库可以多次重试 http 请求。但这可能会导致在服务器上创建多个销售条目。

鉴于服务器(rest api)为新记录生成主键,如何正确实现离线数据同步?更新现有记录很好,因为它具有服务器生成的主键,但是如何处理没有主键的新记录?

设想:

  1. 应用处于离线模式
  2. 用户创建销售订单并在本地保存
  3. 一段时间后,假设互联网连接有限。
  4. 应用程序获取所有尚未同步的记录并为每个记录调用 rest API。
  5. 为第一条记录调用了销售休息 API,应用正在等待响应。
  6. 互联网连接失败,但服务器创建记录并未能通知应用程序
  7. 几分钟后说互联网连接恢复,现在应用程序尝试再次调用销售 api 以获取第一条记录并收到成功响应。但是服务器中有两个条目。

如何解决这个问题?

标签: androidrest

解决方案


2种方法来处理这个

1)使用同步状态

当您将数据存储在存储中时,再添加一个标志作为“同步状态”,数据类型将为布尔值,默认为 false。并且只获取那些同步状态为假的数据。如果数据成功发送到服务器更改状态为真。

2)服务器同步日期时间

如果您的服务器向您发送同步日期时间,那么这将是可能的,您需要检查服务器同步日期时间之后的日期,只有您需要与服务器同步数据


推荐阅读