我正在开发一个库来编辑CardDAV服务器上的联系人,我想知道同步联系人的正确方法是什么。
因此,当我发现特定联系人的etag发生变化时:如何同步这两个?
我是否只合并了更改的数据,例如电话号码?或者一方(服务器或客户端)必须获胜?如何检测数字是否已更改或已添加?
答案 0 :(得分:1)
Building a CardDAV client文件很好地解释了这一切。
但要解决你的问题:
因此,当我发现特定联系人的etag已更改时:如何同步这两个?
您从服务器加载vCard。然后它取决于您的客户的逻辑。你想自动合并吗?您是否要提示用户是否要合并?等
通常你想自动合并。这样做。拥有合并的vCard后,再次将其PUT到服务器,但请确保使用If-Match
标头以确保它在服务器端没有再次更改。
我是否只合并了更改的数据,例如电话号码?
您认为有用的完全取决于您的申请。但只是组合字段可能不是你想要的。例如,您将无法检测到删除。 所以在大多数情况下,这将是一个三方合并:
或者必须一方(服务器或客户端)获胜?
有些客户这样做,但这不是必需的。但是,如果您在更改后进行修改,则需要非常小心同步周期!
如何检测数字是否已更改或已添加?
您存储您知道的旧版本和差异。
通常,最好在本地存储(最后已知的)不透明服务器副本,然后选择客户关心的字段。然后,当再次上传项目时,您只需再次修补它们。 (并保留服务器发送给你的其余部分)。
总结:正确的vCard差异和本地缓存并非易事。许多客户端失败并且松散或欺骗用户数据。 因此,除非您计划将必要的工作和测试纳入其中,否则更简单的方法是检测更改并询问用户他想要做什么(让服务器获胜,强制用户复制,合并)。