如何检测vCard中的更改?

时间:2018-06-02 08:57:36

标签: vcard carddav

我正在开发一个库来编辑CardDAV服务器上的联系人,我想知道同步联系人的正确方法是什么。

因此,当我发现特定联系人的etag发生变化时:如何同步这两个?

我是否只合并了更改的数据,例如电话号码?或者一方(服务器或客户端)必须获胜?如何检测数字是否已更改或已添加?

1 个答案:

答案 0 :(得分:1)

Building a CardDAV client文件很好地解释了这一切。

但要解决你的问题:

  

因此,当我发现特定联系人的etag已更改时:如何同步这两个?

您从服务器加载vCard。然后它取决于您的客户的逻辑。你想自动合并吗?您是否要提示用户是否要合并?等

通常你想自动合并。这样做。拥有合并的vCard后,再次将其PUT到服务器,但请确保使用If-Match标头以确保它在服务器端没有再次更改。

  

我是否只合并了更改的数据,例如电话号码?

您认为有用的完全取决于您的申请。但只是组合字段可能不是你想要的。例如,您将无法检测到删除。 所以在大多数情况下,这将是一个三方合并:

  • 旧版本的服务器(本地存储)
  • 新版本的服务器(刚刚提取)
  • 本地应用程序的当前版本
  

或者必须一方(服务器或客户端)获胜?

有些客户这样做,但这不是必需的。但是,如果您在更改后进行修改,则需要非常小心同步周期!

  

如何检测数字是否已更改或已添加?

您存储您知道的旧版本和差异。

通常,最好在本地存储(最后已知的)不透明服务器副本,然后选择客户关心的字段。然后,当再次上传项目时,您只需再次修补它们。 (并保留服务器发送给你的其余部分)。

总结:正确的vCard差异和本地缓存并非易事。许多客户端失败并且松散或欺骗用户数据。 因此,除非您计划将必要的工作和测试纳入其中,否则更简单的方法是检测更改并询问用户他想要做什么(让服务器获胜,强制用户复制,合并)。