Google Drive API文件监视率限制

时间:2015-02-16 22:09:49

标签: google-drive-api

我正在使用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 rate limit after only 1 insert per second,但它并没有真正提供答案

如果你能指出我正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

403率限制是你的敌人 - 避免它们。谷歌使用令牌/桶机制进行速率限制。这意味着您可以毫无问题地突破大约25-39的API调用。之后,令牌以每秒约1次的速度补充。这通常意味着在前30个之后,大多数后续交易都将失败,除非您自愿将它们每1.5秒低于一个。这比指数退避更有效,这通常会导致第一次退避也失败,第二次成功发生。结果是3次Drive API调用,成功呼叫需要3秒钟(加上网络)。如果你在第一个403之后加油,那么每个订阅将是一个Drive API调用,并且会在1.5秒后成功。如果您正在进行许多订阅,那么额外的1.5s很快就会加起来。

403的问题之一是有时交易实际上已成功。我怀疑它是否是手表订阅的问题,但可以用于插入和一些更新。

答案 1 :(得分:1)

Google似乎没有在任何地方记录费率限制。他们已经发布了一份文档,描述了handling API errors的推荐方法。

  

实现简单指数退避的流程如下:

  1. 向API提出请求。
  2. 接收HTTP 403速率限制响应,表示您应该重试该请求。
  3. 等待1 + random_number_milliseconds秒并重试请求。
  4. 接收HTTP 403速率限制响应,表示您应该重试该请求。
  5. 等待2 + random_number_milliseconds秒,然后重试请求。
  6. 接收HTTP 403速率限制响应,表示您应该重试该请求。
  7. 等待4 + random_number_milliseconds秒,然后重试请求。
  8. 接收HTTP 403速率限制响应,表示您应该重试该请求。
  9. 等待8 + random_number_milliseconds秒,然后重试该请求。
  10. 接收HTTP 403速率限制响应,表示您应该重试该请求。
  11. 等待16 + random_number_milliseconds秒,然后重试该请求。
  12. 停止。报告或记录错误。