Google Drive API 请求限制

Posted

技术标签:

【中文标题】Google Drive API 请求限制【英文标题】:Google Drive API request limitations 【发布时间】:2014-11-02 20:38:00 【问题描述】:

我正在寻求支持或特殊知识。

在我的应用中,我使用 Google Drive,需要插入/删除 1000 多个文件的权限。 Google API 不允许我在一个请求中设置多个文件的权限,因此我需要发出 1000 多个请求(或将其打包成一批或几批)。

我的请求如下所示:

POST /drive/v2/files/0B18tlN6SgYRaUzl1MUlnNHlGSEE/permissions?sendNotificationEmails=false&quotaUser=00787465305247954313&alt=json

但是当我尝试向 Google Drive API 发出批量请求时,我收到了带有很多错误响应的批量响应。批处理中很少有第一个响应是可以的,但不是全部。

大部分错误响应如下所示:

Content-Type: application/http
Content-ID: <response-280781395>

HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=UTF-8
Date: Tue, 09 Sep 2014 11:45:03 GMT
Expires: Tue, 09 Sep 2014 11:45:03 GMT
Cache-Control: private, max-age=0
Content-Length: 199


 "error": 
  "errors": [
   
    "domain": "usageLimits",
    "reason": "rateLimitExceeded",
    "message": "Rate Limit Exceeded"
   
  ],
  "code": 403,
  "message": "Rate Limit Exceeded"
 

其中一些看起来像这样:

HTTP/1.1 500 Internal Server Error
Content-Type: application/json; charset=UTF-8
Date: Tue, 09 Sep 2014 11:45:03 GMT
Expires: Tue, 09 Sep 2014 11:45:03 GMT
Cache-Control: private, max-age=0
Content-Length: 180


 "error": 
  "errors": [
   
    "domain": "global",
    "reason": "internalError",
    "message": "Internal Error"
   
  ],
  "code": 500,
  "message": "Internal Error"
 

批处理中的最后几个响应如下所示:

Content-Type: application/http
Content-ID: <response-901482964>

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
Date: Tue, 09 Sep 2014 11:45:03 GMT
Expires: Tue, 09 Sep 2014 11:45:03 GMT
Cache-Control: private, max-age=0
Content-Length: 171


 "error": 
  "errors": [
   
    "domain": "global",
    "reason": "badRequest",
    "message": "Bad Request"
   
  ],
  "code": 400,
  "message": "Bad Request"
 

当我遇到配额限制错误并决定在 Google Drive Console 中增加请求/用户/秒配额时,这很奇怪。它设置为 10000/用户/秒。但是我只批量发送了 1000 个请求,但已经收到“403 Rate Limit Exceeded”错误。然后我开始收到“500 Internal Error”错误。

然后我发现我应该将 'quotaUser' 参数设置为请求,但没有任何改变。我仍然遇到这些错误。

对 Google Drive Web UI 的调查向我展示了如果决定共享 1000 多个文件,Google Drive 如何设置文件权限。我花了大约 20-30 分钟 才共享我的所有文件。在活动面板中,我看到文件成束共享。有时这些束是 1 个文件大小,有时是 40 个文件大小。但最终所有文件都共享了,看起来 Google Drive 团队使用了重试队列之类的东西,或者只是没有为自己的请求设置配额。

主要问题是:

为什么我仍然收到这些配额错误(指定为 10000 Google Cloud Console 中的请求/用户/秒限制)以及如何避免 他们? 为什么 Google Drive API 返回“500 内部错误”和“400 错误请求”错误? 有什么解决方法吗?

P.S.:我有兴趣帮助 Google Drive 团队,我可以提供完整的跟踪和代码示例。

【问题讨论】:

见***.com/questions/18529524/…和***.com/questions/18578768/…。这看起来像是 Google 知道但不会修复的错误 @pinoyyid 什么对你有用?任何优雅的批量大小或回退? 我放弃了批次,因为它们加剧了问题。你会认为在发送一批之后,Drive 的内部流控制会正确处理它们,但事实并非如此。似乎有一桶 20-30 个令牌,所以如果您更新的令牌少于 30 个,那就没问题了。高于该数字,代币补充感觉(传闻)约为每秒 1 次。这就是前 30 个之后的有效驱动器写入限制。退避是最后的手段 - 它会杀死吞吐量。您应该主动节流以避免它。我在 timeOut(,1500) 循环中提交更新并向我的用户道歉。 【参考方案1】:

虽然您可以设置每个用户的 QPS 以防止恶意用户消耗您的配额,但将其设置为任意高的数字并不意味着您可以发出那么多请求。每个应用程序的 QPS 限制也会生效。默认值远低于 1000qps。

如果您需要额外配额,请通过开发者控制台申请。

【讨论】:

好的。我得到了它!你说我的请求被隐藏的每个应用 QPS 配额阻止了,如果我要求额外的配额,它会消失吗?但是对于 500 个内部错误,我该怎么办?也是配额造成的吗? 增加配额会有所帮助,但可以授予的数量是有限的。 1000 的批量太大。我建议保持在 至于 500s,有很多东西会导致瞬时错误。我们对速率限制错误和 500 秒的建议是相同的 - 放慢速度并在延迟后重试请求。

以上是关于Google Drive API 请求限制的主要内容,如果未能解决你的问题,请参考以下文章

从Salesforce查看文件时,Google Drive API消息“超出未经身份验证的使用限制。”

每个帐户或项目的Google Drive API限制?

google drive Api 无法在生产环境中工作“无法启动浏览器”

将文件从 Google Drive 加载到 Bigquery

Google Drive API - 服务帐户存储限制 - 替代方案

Google Drive - 服务帐户存储限制