使用 Node dav 客户端实现增量 CardDAV 同步

Achieving incremental CardDAV sync with Node dav client

我正在尝试编写一个简单的 node.js 程序来将一些地址簿从 CardDAV 服务器同步到本地 MySQL 数据库。我正在使用节点 dav 客户端。

我知道 CardDAV 仅支持自上次通过 sync-token 同步以来的同步更改,当我浏览 dav 客户端的源和 readme 时,我看到了一些对同步令牌的引用。但是,我对 DAV 很陌生,所以我不是 100% 确定如何将它们组合在一起。

我猜我需要存储服务器在我 运行 同步后发回的同步令牌(和级别?),然后将其包含在我的下一个同步请求中。我在正确的轨道上吗?

Building a CardDAV client is a great resource which describes how all that works, including WebDAV Sync,就是你要找的。

请注意,不需要服务器来提供 WebDAV 同步(而且很多服务器不需要)。 另请注意,即使他们支持 WebDAV 同步,他们也可以使他们想要的令牌过期 however/whenever(例如,有些只存储单个令牌,或仅存储有限的时间)。

简而言之:不要依赖 WebDAV 同步。如果它不可用,或者令牌已过期,您需要回退到完整的定期同步(比较 href 和 etag)。

I'm guessing I need to store the sync token (and level?) the server sends back after I run a sync and then include that in my next sync request. Am I on the right track?

是的,您走在正确的轨道上。同步令牌通常是每个集合(深度:1,我认为它们可以是 Depth:infinity,但我不确定)。 因此,您需要将其与正在同步的集合的 URL 一起存储。 然后在下一个同步请求中,将其嵌入到同步报告中。如果令牌仍然有效,您将取回 new/deleted/changed 记录。如果令牌已失效,您需要执行完全同步。

希望对您有所帮助:-)