我正在使用Google Drive API,在通过观看通知(频道)时收到以下错误
Error calling POST https://www.googleapis.com/drive/v2/files/xxxxxxxxxxxxxx/watch: (403) Rate limit exceeded for creating file subscriptions
是否有具体的、记录在案的费率限制
a) 每秒请求新频道(观看通知)
b) 每天并发频道(观看通知)
我已经通读了这个问题403每秒仅插入1次后的速率限制,但它并不能真正提供答案
如果你能给我指明正确的方向,我将不胜感激。
403速率限制是你的敌人-避开它们。谷歌使用令牌/桶机制进行费率限制。这意味着你可以爆发API调用的数量,高达25-39个左右,没有任何问题。之后,代币以大约每秒1个的速度被补充。这通常意味着,在前30个交易之后,除非你自愿每1.5秒将其限制在1以下,否则你的大多数后续交易都会失败。这远比指数退让有效,指数退让通常会导致第一次退让也失败,第二次成功。结果是3个驱动器API调用,成功调用需要3秒(加上网络)。如果你在第一个403之后节流,每个订阅将是一个单独的驱动器API调用,并将在1.5秒后成功。如果你正在进行许多订阅,这些额外的1.5秒很快就会累积起来。
403的问题之一是,有时事务实际上已经成功。我怀疑这是否是手表订阅的问题,但可能是插入和一些更新的问题。
谷歌似乎没有在任何地方记录费率限制。他们已经发布了一份文档,描述了处理API错误的推荐方法。
实现简单指数回退的流程如下:
- 向API发出请求
- 收到HTTP 403速率受限的响应,这表示您应该重试该请求
- 等待1+random_number_milliseconds,然后重试请求
- 收到HTTP 403速率受限的响应,这表示您应该重试该请求
- 等待2+random_number_milliseconds,然后重试请求
- 收到HTTP 403速率受限的响应,这表示您应该重试该请求
- 等待4+random_number_milliseconds,然后重试请求
- 收到HTTP 403速率受限的响应,这表示您应该重试该请求
- 等待8+random_number_milliseconds,然后重试请求
- 收到HTTP 403速率受限的响应,这表示您应该重试该请求
- 等待16+random_number_milliseconds,然后重试请求
- 停下。报告或记录错误