Google Drive API超出了用户速率限制

时间:2018-12-06 13:47:19

标签: javascript google-api google-drive-api

我正在Google Drive API的基础上构建一个Web应用程序。基本上,Web应用程序显示照片和视频。媒体存储在Google云端硬盘文件夹中:通过身份验证后,应用程序会向Google云端硬盘API发出请求,以获取媒体的网址并显示每个网址。目前,我只有16张图像要显示。这些图像在应用程序中(用于演示)是手写的。

我的应用程序访问Google云端硬盘API时遇到问题。确实,经过多次尝试,对于随机请求,我遇到了这个错误

  

超出用户速率限制。用户请求率超过配置的项目配额。       您可以考虑重新评估API的预期每用户流量,       相应地调整项目配额限制。       您可以在API控制台中监控总配额使用情况并调整限制:       https://console.developers.google.com/apis/api/drive.googleapis.com/quotas?project=XXXXXXX

因此,我查看了API控制台,没有发现什么特别之处,我没有超出速率限制。也许我使用了错误的Google API,但实际上我不知道...

the bar on the right is my last try: 32 queries

我遵循了Google Drive API文档,以检查是否做错了什么。对于每个API请求,该请求都包含访问令牌,因此它应该可以正常工作!

该应用程序的演示可用:https://poc-drive-api.firebaseapp.com

源代码也可用:https://github.com/Mcdostone/poc-google-drive-api(文件App.js)

3 个答案:

答案 0 :(得分:1)

403: User Rate Limit Exceeded是防洪功能。用户一次只能发出这么多请求。不幸的是,用户速率限制没有显示在您正在查看的图形中。该图实际上在显示真实情况方面确实很糟糕。 Google会在后台进行测试,如果超出限制,则会踢出错误。他们并不需要在图表中向我们实际显示

  

403:超出用户速率限制

     

已达到每用户限制。这可能是开发者控制台的限制,也可能是云端硬盘后端的限制。

     

{   “错误”:{    “错误”:[      {       “ domain”:“ usageLimits”,       “ reason”:“ userRateLimitExceeded”,       “消息”:“超出用户速率限制”      }     ],     “代码”:403,     “消息”:“超出用户速率限制”    }   }

     

建议的操作

     
      
  • 在开发者控制台项目中提高每用户配额。
  •   
  • 如果一个用户代表G Suite域中的许多用户发出大量请求,请考虑使用具有授权委派的服务帐户(设置quotaUser参数)。
  •   
  • 使用指数补偿。
  •   

IMO,当您开始遇到此错误消息时,主要要做的就是以这种方式实现exponential backoff,您的应用程序将能够放慢速度并再次发出请求。

答案 1 :(得分:0)

就我而言,我并行地通过Google云端硬盘文件夹进行递归操作并收到此错误。我通过使用Bottleneck库实现客户端限速来解决此问题,请求之间的延迟为110ms:

const limiter = new Bottleneck({
    // Google allows 1000 requests per 100 seconds per user,
    // which is 100ms per request on average. Adding a delay
    // of 100ms still triggers "rate limit exceeded" errors,
    // so going with 110ms.
    minTime: 110,
});

// Wrap every API request with the rate limiter
await limiter.schedule(() => drive.files.list({
    // Params...
}));

答案 2 :(得分:0)

我正在使用limiter库来强制执行“每100秒1000个查询”的限制,但仍然出现403错误。最后,我偶然发现了this页面,其中提到:

  

在API控制台中,有一个类似的配额,称为每用户每100秒请求数。默认情况下,它设置为每用户每100秒100个请求,并且可以调整为最大值1,000。但是对API的请求数限制为每位用户每秒最多10个请求。

因此,我将限制器库更新为每秒仅允许10个请求,而不是每100秒发送1,000个,它就像一个魅力。

const RateLimiter = require('limiter').RateLimiter;

const limiter = new RateLimiter(10, 1000);