rest - 恢复连接后将离线本地数据与 REST API 同步的策略
问题描述
我有一个可在 android 上和通过浏览器使用的混合应用程序。两个客户端都使用 REST API 和 websockets。数据存储在 localStorage 中。我希望移动设备能够修改离线资源,并在连接到互联网后与API同步数据。
连接互联网后如何进行这样的数据对比,得到正确的版本?
问题场景:
- 用户拥有从手机上的 API 获取的笔记列表。
- 用户关闭互联网
- 用户使用 JWT 令牌保持登录状态。修改一个笔记,删除另一个笔记,添加一个新笔记或对笔记做任何其他事情
- 用户打开互联网。
- 这里应该发生什么?
我对如何解决这个问题的想法:
- 创建同步端点并在收到连接时按updated_at列比较集合。
- 使用此实用程序比较对象的差异
解决方案
根据您对应用程序的抱负,您可能希望实现一个适当的同步机制,该机制能够处理的不仅仅是笔记列表。
简单的方法:在更新日期上捎带,您可以比较版本日期并决定最后一次写入获胜。
困难的方式:我建议你看看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算法,有很多端口可用。
当心为应用程序实现真正的离线和同步功能绝非易事。
推荐阅读
- javascript - 更改要素图层中多边形的顺序?(arcgis js 4.xx)
- php - 用于 PHP 脚本加密狗的 FPGA
- c++ - 我怎样才能跳过一些 GTEST ::testing::Combine 案例?
- java - 使用 Springboot CRUD Repository 进行不区分大小写的查询
- reactjs - i18n 从 s3bucket 加载翻译
- angular - 引导选择不以角度动态更新
- sql-server - 分析服务连接问题
- angular - Angular从api获取特定字段数据
- node.js - Firebase 登录引发错误:在 NodeJS 中生成 cmd ENOENT
- xml - vb.net xml第二次运行代码不重复同样的结果