用量限额

Google 日历 API 设有配额,以确保所有用户都能公平地使用该 API。 使用 Calendar API 时,需要注意以下三项重要限制:

  • API 使用配额:按项目和用户强制执行。如需了解详情,请参阅日历 API 用量配额类型

  • Google 日历的一般使用量限制:Google 日历 API 是一项共享服务,具有一些限制,以保护 Google Workspace 系统的整体性能。如需了解详情,请参阅避免日历使用限制

  • 操作限制:这些限制随时可能会受到限制。例如,如果您尝试快速连续写入单个日历。

Calendar API 配额

系统会强制执行两种类型的配额:

  • 每分钟每个项目:这是您的 Google Cloud 项目在一分钟内可以发出的请求数。

  • 每位用户每个项目每分钟:这是任何一位特定用户可在您的云项目 中发出的请求数。此限制旨在帮助您确保用户之间的使用量分配公平合理。

配额是使用滑动窗口按分钟计算的。如果在一分钟内,流量快速突增并超过了每分钟配额,那么在下一个时间窗口内,系统会进行速率限制,以确保平均而言,您的用量保持在配额范围内。

下表详细列出了这些限制:

用量限额类型 限制
每个项目每分钟 1 万个请求
每位用户每个项目每分钟 600 次请求

每日结算起付金额

每天每个项目的限制规定了您的 Google Cloud 项目在 24 小时内可使用的请求数量上限,超过此上限将产生费用。

如果使用量低于此阈值,您无需支付额外费用,并且系统不会向您的 Google Cloud 账号收取费用。我们将在 2026 年晚些时候分享完整的结算详情,并在任何变更生效前至少提前 90 天通知您。

您不能申请提高此每日阈值限制。

下表详细介绍了此限制:

阈值限制类型 限制
每天每个项目 100 万次请求

如需了解详情,请参阅 Google Workspace 代理工具和 API 的标准化模型

解决基于时间的配额错误

对于所有基于时间的错误(每 X 分钟最多 N 个请求),我们建议您的代码捕获异常并使用截断指数退避算法,以确保设备不会产生过大的负载。

指数退避算法是网络应用的标准错误处理策略。指数退避算法以指数方式重试请求(不断增加各次请求之间的等待时间,直到达到最大退避时间)。如果请求仍然失败,请务必逐渐增加请求之间的延迟时间,直到请求成功为止。

示例算法

指数退避算法以指数方式重试请求(不断增加各次重试之间的等待时间,直到达到最大退避时间)。例如:

  1. 向 Google 日历 API 发出请求。
  2. 如果请求失败,请等待 1 + random_number_milliseconds 秒后再重试请求。
  3. 如果请求失败,请等待 2 + random_number_milliseconds 秒后再重试请求。
  4. 如果请求失败,请等待 4 + random_number_milliseconds 秒后再重试请求。
  5. 依此类推,等待时间上限为 maximum_backoff
  6. 继续等待并重试,直至达到重试次数上限,但不会增加重试之间的等待时间。

其中:

  • 等待时间为 min(((2^n)+random_number_milliseconds), maximum_backoff),其中,n 会在每次迭代(请求)后增加 1。
  • random_number_milliseconds 是小于或等于 1,000 的毫秒数(随机值)。这有助于避免出现以下情况:许多客户端在某些情况下全部同步进行处理并同时执行重试操作,导致同步发送每一波请求。每次重试请求后,系统都会重新计算 random_number_milliseconds 值。
  • maximum_backoff 通常为 32 或 64 秒。适当的值取决于用例。

客户端在达到 maximum_backoff 时间后可以继续重试。 此后执行的重试不需要继续增加退避时间。例如,如果客户端使用的 maximum_backoff 时间为 64 秒,则在达到此值后,客户端可以每 64 秒重试一次。到了特定时间点后,客户端应停止无限重试。

重试之间的等待时间和重试次数取决于您的用例和网络条件。

价格

Google 日历 API 的所有标准使用均无需额外付费。我们计划在 2026 年晚些时候开始,对超出配额请求限制的行为向您的 Google Cloud 结算账号收取费用。 如需了解详情,请参阅 Google Workspace 代理工具和 API 的标准化模型

申请增加配额

根据项目的资源用量,您可能需要申请调整配额。服务账号的 API 调用被视为使用单个账号。我们无法保证您的调整配额请求一定会得到批准。如果配额调整申请会大幅增加配额值,则可能需要更长时间才能获得批准。

并非所有项目的配额都完全相同。随着您对 Google Cloud 的使用量逐步增加,您可能需要增加配额值。如果您预计用量即将显著增加,可以在 Google Cloud 控制台的配额和系统限制页面中主动申请调整配额

如需了解详情,请参阅以下资源:

问题排查

如果超出任一配额,您将受到速率限制,并且在响应查询时会收到 403 usageLimits 状态代码或 429 usageLimits 状态代码。

如果出现这种情况,您可以尝试以下操作:

  1. 请务必遵循所有最佳实践:使用指数退避随机化流量模式,并使用推送通知

  2. 如果您的项目不断发展壮大,用户数量也在增加,您可以申请增加配额

  3. 如果您达到每用户配额限制,可以执行以下操作:

    • 如果您使用服务账号,请将负载分配给用户或在多个服务账号之间分摊负载。

    • 虽然您可以申请提高单用户配额,但一般情况下,不建议将其提高到高于默认值,因为您的应用可能会开始触及其他类型的限制,例如常规日历用量限额或操作限制。

  4. 注册一个仅用于测试的项目,该项目的配置与您的正式版项目类似,然后测试您的配额限制。如需了解详情,请参阅测试配额限制处理

随机化流量模式

日历客户端容易出现流量高峰,这是因为多个客户端同时执行操作。例如,日历客户端的一种常见不良做法是在午夜执行完全同步。这几乎肯定会导致您超出每分钟配额,并导致速率限制和退避。

为避免出现这种情况,请尽可能确保流量在全天均匀分布。如果客户端需要每天同步一次,请让客户端确定一个随机时间(每个客户端的时间都不同)。如果您需要定期执行某项操作,请将间隔时间调整为 +/- 25%。这样可以更均匀地分配流量,并提供更好的用户体验。

使用推送通知

一个常见的用例是,每当用户日历中的内容发生变化时,都执行某项操作。一种反模式是反复轮询每个感兴趣的日历。这会很快耗尽您的所有配额。例如,如果您的应用有 5,000 名用户,并且每分钟轮询每位用户的日历一次,那么即使在完成任何工作之前,每分钟也至少需要 5,000 的配额。

服务器端应用可以注册推送通知,以便在发生感兴趣的事情时通知您。虽然设置这些功能需要更多工作,但可以大幅提高配额使用效率,并提供更好的用户体验。请务必指定您希望接收通知的 eventType。如需了解详情,请参阅推送通知

使用服务账号进行适当的分配

如果您的应用使用全网域授权执行请求,默认情况下,服务账号会根据“每分钟每位用户每个项目”的配额收费,而不是您模拟的用户。这意味着,即使服务账号可能在多个用户的日历上运行,也可能会用完配额并受到速率限制。

为避免出现此问题,您可以使用 quotaUser 网址参数(或 x-goog-quota-user HTTP 标头)来指明向哪个用户收取费用。此指标仅用于计算配额。如需了解详情,请参阅限制每个用户的请求数

测试配额限制处理

为确保您的应用能够在实践中妥善处理达到配额限制的情况(例如,通过指数退避重试),并最大限度地减少对用户的任何潜在干扰,我们强烈建议您在真实环境中测试您的方案。

为了在不影响实际应用使用的情况下进行测试,我们建议您在 Google Cloud 控制台中注册一个仅用于测试的项目,然后以类似于生产环境项目的方式配置 OAuth 权限请求页面。然后,您可以为此项目设置人为的低配额限制,并观察应用的运行情况。