找不到处理 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获取具有该名称的文件ID

如何在Google Drive API上按文件夹获取文件列表

我看不到使用 php 在我的 Google Drive 中通过 api 创建的文件和文件夹

在 Google Drive 中使用 Google Spreadsheets API 创建电子表格