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 加载到 Bigquery