首页 > 解决方案 > 恢复连接后将离线本地数据与 REST API 同步的策略

问题描述

我有一个可在 android 上和通过浏览器使用的混合应用程序。两个客户端都使用 REST API 和 websockets。数据存储在 localStorage 中。我希望移动设备能够修改离线资源,并在连接到互联网后与API同步数据。

连接互联网后如何进行这样的数据对比,得到正确的版本?

问题场景:

  1. 用户拥有从手机上的 API 获取的笔记列表。
  2. 用户关闭互联网
  3. 用户使用 JWT 令牌保持登录状态。修改一个笔记,删除另一个笔记,添加一个新笔记或对笔记做任何其他事情
  4. 用户打开互联网。
  5. 这里应该发生什么?

我对如何解决这个问题的想法:

标签: restsynchronizationoffline-mode

解决方案


根据您对应用程序的抱负,您可能希望实现一个适当的同步机制,该机制能够处理的不仅仅是笔记列表。

简单的方法:在更新日期上捎带,您可以比较版本日期并决定最后一次写入获胜。

困难的方式:我建议你看看CRDTs。这些数据结构确保状态最终保持一致,使其非常适合您的需求。存在许多实现,它取决于您的工具链,例如Logux为 javascript 提供了一些 CRDT。

您还可以依赖用于数据同步和冲突解决的数据库,例如 https://couchdb.apache.org//https://pouchdb.com/。https://riak.com/products/riak-kv/riak-distributed-data-types/index.html?p=10947.html 还提供 CRDT 支持。

如果您想深入研究合并文本数据,我建议您查看Google 为他们的 Docs 应用程序开发的Diff-Match-Patch算法,有很多端口可用。

当心为应用程序实现真正的离线和同步功能绝非易事。


推荐阅读