CalDAV API 开发者指南

CalDAV 是 WebDAV 的扩展,为客户端访问远程服务器上的日历信息提供了标准。

Google 提供了一个 CalDAV 接口,您可以使用该接口通过 CalDAV 协议查看和管理日历。

规格

对于每个相关规格,Google 的 CalDAV 支持情况如下:

  • rfc4918:Web 分布式创作和版本控制 (WebDAV) 的 HTTP 扩展
    • 支持 HTTP 方法 GETPUTHEADDELETEPOSTOPTIONSPROPFINDPROPPATCH
    • 不支持 HTTP 方法 LOCKUNLOCKCOPYMOVEMKCOL,也不支持 If* 标头(If-Match 除外)。
    • 不支持任意(用户定义的)WebDAV 属性。
    • 不支持 WebDAV 访问权限控制 (rfc3744)。
  • rfc4791:WebDAV 的日历扩展 (CalDAV)
    • 支持 HTTP 方法 REPORT。除了忙闲查询之外,所有报告都已实现。
    • 不支持 HTTP 方法 MKCALENDAR
    • 不支持 AUDIO 操作。
  • rfc5545:iCalendar
    • CalDAV 接口中公开的数据按照 iCalendar 规范进行格式化。
    • 目前不支持 VTODOVJOURNAL 数据。
    • 不支持 Apple iCal® 扩展,该扩展允许用户设置网址属性。
  • rfc6578:WebDAV 的集合同步
    • 客户端应用必须在初始同步后切换到此操作模式。
  • rfc6638:CalDAV 的安排扩展
    • 支持一个简单的“收件箱”,该收件箱始终为空。
    • 您收到的邀请会自动发送到“活动”集合,而不是放入“收件箱”中。
    • 不支持忙闲查询。
  • caldav-ctag-02:CalDAV 中的日历集合实体标记 (CTag)
    • 日历 ctag 类似于资源 etag;当日历中的任何内容发生更改时,它也会随之更改。这样,客户端应用就可以快速确定它不需要同步任何已更改的活动。
  • calendar-proxy:CalDAV 中的日历用户代理功能
    • 为了提高 iOS 设备(不支持委托)的日历同步性能,使用带有 iOS UserAgent 的 calendar-proxy-read-forcalendar-proxy-write-for 属性将会失败。

我们尚未完全实现所有相关规范。不过,对于许多客户端(例如 Apple 的日历应用),CalDAV 协议应该可以正确互操作。

注意:为了确保账号安全并防止滥用行为,Google 可能会在通过 CalDAV 访问数据的客户端应用上设置 Cookie。

创建客户端 ID

如需使用 CalDAV API,您需要拥有 Google 账号。 如果您已有可用的账号,则无需进行任何设置。

在向 CalDAV API 发送请求之前,您必须先注册 您的客户端,方法是在 Google API 控制台中创建项目。

转到 Google API 控制台。点击创建项目, 输入名称,然后点击创建

下一步是激活 CalDAV API

如需为您的项目启用 API,请执行以下操作:

  1. 在 Google API 控制台中打开 API 库。如果系统提示,请选择一个项目或创建一个新项目。API 库中列出了所有可用的 API(按产品系列和热门程度分组)。
  2. 如果列表中没有显示您要启用的 API,请使用搜索功能查找该 API。
  3. 选择要启用的 API,然后点击启用 按钮。
  4. 如果系统提示,请启用结算功能。
  5. 如果系统提示,请接受该 API 的服务条款。
如需执行 CalDAV API 请求,您需要提供客户端 ID客户端密钥

如需查找项目的客户端 ID 和客户端密钥,请执行以下操作:

  1. 选择现有的 OAuth 2.0 凭据,或打开“凭据”页面
  2. 如果您尚未创建项目的 OAuth 2.0 凭据,请点击 创建凭据 > OAuth 客户端 ID ,然后 提供创建凭据所需的信息。
  3. OAuth 2.0 客户端 ID 部分中查找客户端 ID 。 如需了解详情,请点击客户端 ID。

连接到 Google 的 CalDAV 服务器

如需使用 CalDAV 接口,客户端程序最初会从两个起始点之一连接到日历服务器。无论哪种情况,连接 都必须通过 HTTPS 进行,并且必须使用 OAuth 2.0 身份验证方案。除非请求通过 HTTPS 传入并使用 Google 账号的 OAuth 2.0 身份验证,否则 CalDAV 服务器将拒绝验证该请求。 尝试通过 HTTP 连接或使用基本身份验证会导致 HTTP 401 Unauthorized 状态代码。

如果客户端程序(例如 Apple 的日历应用)需要主集合作为起始点,则连接到的 URI 为:

https://apidata.googleusercontent.com/caldav/v2/valid/user

其中,valid 应替换为要访问的日历的“日历 ID”。您可以通过 Google 日历网页界面找到该 ID,具体方法如下:在日历名称旁边的下拉菜单中,选择日历设置 。在随即显示的页面上,日历 ID 会显示在名为日历地址 的部分中。用户主日历的日历 ID 与该用户的电子邮件地址相同。

如果客户端程序(例如 Mozilla Sunbird)需要 日历集合作为起始点,则连接到的 URI 为:

https://apidata.googleusercontent.com/caldav/v2/valid/events

旧端点 https://www.google.com/calendar/dav 已被废弃,不再受支持;使用该端点时,您需要自行承担风险。 我们建议您迁移到上述新端点格式。

iCal® 是 Apple Inc. 的商标。