Google 日历 API 有配额,以确保所有用户都能公平使用。 使用日历 API 时,需要考虑以下三个重要限制:
- API 用量配额 是按项目和用户强制执行的。如需了解详情,请参阅下一部分。
- 常规日历用量限制:避免 超出日历使用限制。
- 操作限制: 您随时可能会受到速率限制。例如,如果您尝试快速连续写入单个日历。
日历 API 用量配额类型
系统会强制执行以下两种类型的配额:
- 每分钟每个项目: 这是您的 Google Cloud 项目发出的请求数。
- 每分钟每个项目每位用户: 这是您的云项目中的任何一位特定用户发出的请求数。此限制旨在帮助您确保用户之间的用量公平分配。
配额是使用滑动窗口按分钟计算的,因此,如果在一分钟内流量快速突增并超出每分钟配额,则在下一个窗口期间会受到速率限制,以确保平均用量保持在配额范围内。
如果超出任一配额,您将受到速率限制,并且查询会收到
403 usageLimits状态代码
或
429 usageLimits状态代码
。如果发生这种情况,您可以执行以下操作:
- 确保遵循所有最佳实践: 使用指数退避算法、 随机化流量模式、 使用推送通知。
- 如果您的项目不断增长且用户数量增加,您可以申请增加每个项目的配额。
- 如果达到每位用户的配额限制,您可以执行以下操作:
申请增加配额
如需查看或更改项目的用量限制,或申请增加配额,请按以下步骤操作:
- 如果您的项目还没有结算账号,请创建一个。
- 在 API 控制台中访问 API 库中的“已启用的 API”页面,然后从列表中选择一个 API。
- 如需查看和更改配额相关设置,请选择配额。如需查看 用量统计信息,请选择使用量。
使用指数退避算法
如果我们希望您降低请求速率,将返回 403 “usageLimits”响应或 429 响应(请参阅 完整的错误文档)。 这不是致命错误,我们希望您在短暂间隔后重试请求。如果请求仍然过快到达,我们会再次要求您降低请求速率,依此类推。为了确保此操作正常运行,重要的是请求之间的延迟时间应随着时间的推移而增加。
通常,您应使用截断指数退避算法; Cloud Storage 文档 对这种算法的工作原理和首选算法进行了很好的说明。如果您使用的是 Google 客户端库,系统通常会为您处理此问题;请参阅库文档。通常,您应使用库实现,而不是自行编写。
随机化流量模式
日历客户端容易出现流量高峰模式,这是因为多个客户端同时执行操作。例如,日历客户端的一个常见不良做法是在午夜执行完全同步。这几乎肯定会导致超出每分钟配额,并导致速率限制和退避。
为避免这种情况,请尽可能确保流量全天分布。如果您的客户端需要执行每日同步,请让客户端确定随机时间(每个客户端的时间不同)。如果您需要定期执行操作,请将间隔时间更改为 +/- 25%。这样可以更均匀地分配流量,并提供更好的用户体验。
使用推送通知
一个常见的用例是,每当用户的日历发生变化时,都希望执行操作。这里的一种反模式是反复轮询每个感兴趣的日历。这会很快用完所有配额 - 例如,如果您的应用有 5,000 个用户,并且每分钟轮询每个用户的日历一次,那么即使在完成任何工作之前,也至少需要每分钟 5,000 个配额。
服务器端应用可以注册推送通知,以便在发生感兴趣的事件时通知您。这些通知需要更多设置工作,但可以大幅提高配额的使用效率,并提供更好的用户体验。请务必指定您希望收到通知的 eventType。如需了解详情,请参阅
推送通知。
使用服务账号进行适当的结算
如果您的应用使用
全网域授权执行请求,
默认情况下,系统会针对“每分钟每个
项目每位用户”配额向服务账号收费,而不是向您模拟的用户收费。这意味着,即使服务账号可能正在处理多个用户的日历,也可能会用完配额并受到速率限制。您可以使用 quotaUser 网址参数(或 x-goog-quota-user HTTP 标头)来指明将向哪个用户收费,从而避免这种情况。这仅用于配额计算。如需了解详情,请参阅 Cloud 文档中的
限制每位用户的请求数
。
测试配额限制处理
为确保您的应用能够在实际操作中妥善处理达到配额限制的情况(例如,通过使用指数退避算法进行重试),并尽可能减少对用户的潜在干扰,我们强烈建议您在真实环境中测试此场景。
为了确保此类测试不会干扰您的实际应用使用情况,我们 建议您在 Google API 控制台中注册一个仅用于测试的单独项目,并以与生产项目类似的方式 对其进行配置 。然后,您可以为此项目设置人为的低配额,并观察应用的行为。
价格
所有 Google 日历 API 的使用均免费。超出配额 请求限制不会产生额外费用,也不会向您的账号收费。