CalDAV API 开发者指南

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

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

规格

对于每个相关规范,Google 对 CalDAV 的支持如下所示:

  • rfc4918:适用于 Web 分布式创作和版本控制的 HTTP 扩展 (WebDAV)
    • 支持 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 设备同步日历的性能,将 calendar-proxy-read-forcalendar-proxy-write-for 属性与 iOS UserAgent 搭配使用将会失败。

我们尚未全面实现所有相关规范。不过,对于许多客户端(例如 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 请求,您需要有 Client IDClient Secret

如需查找项目的客户端 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/calid/user

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

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

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

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

iCal® 是 Apple Inc. 的商标。