我正在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,但实际上我不知道...
我遵循了Google Drive API文档,以检查是否做错了什么。对于每个API请求,该请求都包含访问令牌,因此它应该可以正常工作!
该应用程序的演示可用:https://poc-drive-api.firebaseapp.com
源代码也可用:https://github.com/Mcdostone/poc-google-drive-api(文件App.js)
答案 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);