使用服务器作为 CalDAV 客户端来同步日历数据和关注点
Using a Server as a CalDAV client to sync calendar data and concerns
对于日历应用程序,我想了解第 3 方日历事件的更改。例如,用户将 iCal/Google 日历添加到我的应用程序中。我的应用程序应该收到事件更改的通知。经过一些研究,CalDAV 似乎是实现它的方法。但我不完全理解该应用程序应该如何工作。
到目前为止我的理解是:我会让我的服务器充当 CalDAV 客户端。用户将向我的应用程序提供登录凭据以从他们的日历中获取数据?我有 2 个问题:安全性和性能(如何同步)
安全
这听起来好像可行,但它是否非常不安全(因为我必须向某些不受信任的服务器提供我的登录凭据)?似乎应该改用 OAuth?有什么我没有正确理解的吗?
如何同步和性能
我想收到日历更改通知(例如,如果用户更新 Google 日历)。类似webhooks的东西应该是最好的。但是有这样的事情吗?当我在 NPM 中查看包 dav
时,它似乎都是基于拉取的。如果我必须不断地轮询变化,它可能会非常低效?
我打算使用 NodeJS 构建服务器
关于安全,你是对的。对于许多(大多数)CalDAV 服务器,您需要存储用户凭据(通常使用基本或摘要身份验证)。这不好。虽然有些服务器,例如 Google CalDAV API,支持(甚至需要)OAuth。
Wrt推,你又对了。目前还没有推送 DAV 的标准。有些服务器确实会推送,例如 iCloud 或 Apple CalendarServer,但它们使用专有协议进行推送,这对您的用例没有帮助。所以是的,您很可能必须进行轮询(确保使用 sync-reports 来提高效率)。尽管所需的轮询请求并不太贵,而且通常 运行。
总之:你的分析是对的。当前版本的 CalDAV 主要针对纯 client-server 交互,并且对您的应用程序存在不足。虽然它仍然是您的最佳选择:-)
对于日历应用程序,我想了解第 3 方日历事件的更改。例如,用户将 iCal/Google 日历添加到我的应用程序中。我的应用程序应该收到事件更改的通知。经过一些研究,CalDAV 似乎是实现它的方法。但我不完全理解该应用程序应该如何工作。
到目前为止我的理解是:我会让我的服务器充当 CalDAV 客户端。用户将向我的应用程序提供登录凭据以从他们的日历中获取数据?我有 2 个问题:安全性和性能(如何同步)
安全
这听起来好像可行,但它是否非常不安全(因为我必须向某些不受信任的服务器提供我的登录凭据)?似乎应该改用 OAuth?有什么我没有正确理解的吗?
如何同步和性能
我想收到日历更改通知(例如,如果用户更新 Google 日历)。类似webhooks的东西应该是最好的。但是有这样的事情吗?当我在 NPM 中查看包 dav
时,它似乎都是基于拉取的。如果我必须不断地轮询变化,它可能会非常低效?
我打算使用 NodeJS 构建服务器
关于安全,你是对的。对于许多(大多数)CalDAV 服务器,您需要存储用户凭据(通常使用基本或摘要身份验证)。这不好。虽然有些服务器,例如 Google CalDAV API,支持(甚至需要)OAuth。
Wrt推,你又对了。目前还没有推送 DAV 的标准。有些服务器确实会推送,例如 iCloud 或 Apple CalendarServer,但它们使用专有协议进行推送,这对您的用例没有帮助。所以是的,您很可能必须进行轮询(确保使用 sync-reports 来提高效率)。尽管所需的轮询请求并不太贵,而且通常 运行。
总之:你的分析是对的。当前版本的 CalDAV 主要针对纯 client-server 交互,并且对您的应用程序存在不足。虽然它仍然是您的最佳选择:-)