找不到处理 Google Drive API 403 Rate Limit Exceeded 的方法
Posted
技术标签:
【中文标题】找不到处理 Google Drive API 403 Rate Limit Exceeded 的方法【英文标题】:Can't find a way to deal with Google Drive API 403 Rate Limit Exceeded 【发布时间】:2015-11-22 12:21:56 【问题描述】:我在 Google 云端硬盘域中有大量用户和文件。 +100k 用户,+10M 文件。我需要每个月获取这些文件的所有权限。
每个用户都有自己拥有的文件,以及由其他域用户和/或外部用户(不属于域的用户)共享的文件。大多数文件归域用户所有。域用户拥有超过 700 万个唯一文件。
我的应用是一个后端应用,它使用域管理员用户授予的令牌运行。
我认为执行批量请求是最好的方法。然后,我在谷歌开发者控制台中将我的应用程序配置为每个用户 1000 个请求。
我尝试了以下几种情况:
-
每批 1000 个请求,每个用户最多 1000 个 -> 大量用户速率限制
每批 1000 个请求,每个用户最多 100 个 -> 大量速率限制错误
每批 100 个请求,每个用户最多 100 个 -> 大量速率限制错误
每批 100 个请求,每个用户最多 50 个 -> 大量速率限制错误
每批 100 个请求,每个用户最多 10 个 -> 不再出错
我正在使用 quotaUser 参数来唯一标识批处理请求中的每个用户。
我检查了我的应用程序,以确认每个批次都不会超出时间。我还检查了每个批次是否不超过配置为获取的 file_id 的限制。一切正常。
我也会等待每批完成后再发送下一批。
每次看到超过 403 速率限制时,我都会进行指数退避。有时我必须在 9 步后重试,即等待 2**9 秒。
所以,我看不出 Google Drive API 限制的意义。我确定我的应用程序一切正常,但我无法提高每秒获取更多权限的限制。
【问题讨论】:
不清楚每个用户是否有不同的文件,它们是否归用户或单个谷歌帐户所有,以及您是否使用用户的访问令牌或所有用户的相同令牌执行请求。 @ZigMandel 我很确定用户速率是由 UserIP 或 quotaUser 参数控制的,谁拥有该文件并不重要。这是我们可以测试的。 您是否尝试过进入 Google Developers 控制台 API -> google Drive -> 配额并增加每用户限制? 是的,我问的很重要。回答所有这些问题,也许我可以提供帮助 @ZigMandel 有 +7M 的唯一文件,还有很多用户之间共享的文件,但我的应用程序足够聪明,可以跳过它们。我使用相同的令牌代表每个域用户获取权限。 【参考方案1】:我相信这是谷歌设置的限制,以阻止人们向服务发送垃圾邮件并将其捆绑。它与您的应用程序本身没有任何关系,但设置在 Google 服务器端。如果 Google 服务器在特定时间内收到超过特定数量的请求,这就是您得到的错误。您无法在您的应用程序中做任何事情来克服这个问题。您可以与 Google 讨论它,通常为 Google 许可证付费等可以让您在受到限制之前获得更高的限制。
【讨论】:
以上是关于找不到处理 Google Drive API 403 Rate Limit Exceeded 的方法的主要内容,如果未能解决你的问题,请参考以下文章
Google Drive API Python 服务帐户示例
使用API 恢复Google Drive Spreadsheet的修订版
如何在Google Drive API上按文件夹获取文件列表