我正在googledriveapi之上构建一个web应用程序。基本上,web应用程序显示照片和视频。媒体存储在Google Drive文件夹中:一旦通过身份验证,应用程序将向Google Drive API发出请求,以获取媒体的URL,并显示每个URL。目前,我只有16幅图像要显示。这些图像是在应用程序中硬写的(用于演示)。
我的应用程序访问Google Drive API时遇到问题。事实上,在多次尝试之后,对于随机请求,我得到了这个错误
超出了用户速率限制。用户请求的速率超过配置的项目配额。您可以考虑重新评估API的预期每个用户流量,并相应地调整项目配额限制。您可以在API控制台中监视聚合配额使用情况并调整限制:https://console.developers.google.com/apis/api/drive.googleapis.com/quotas?project=XXXXXXX"
所以我看了一下API控制台,没有看到什么特别的,根据我的说法,我没有超过速率限制。也许我用错了谷歌API,我不知道事实上...
我按照GoogleDriveAPI文档检查我是否做错了什么。对于每个API请求,请求都包含访问令牌,因此应该可以正常工作!
该应用程序的演示:https://poc-drive-api.firebaseapp.com
源代码也可从以下位置获得:https://github.com/Mcdostone/poc-google-drive-api (App.js文件)
我使用限制器库来强制执行“每100秒1000次查询”限制,但我仍然得到403个错误。我终于偶然发现了这一页,上面提到:
在API控制台中,有一个类似的配额,称为每个用户每100秒的请求数。默认情况下,它设置为每个用户每100秒100个请求,并且可以调整为最大值1000。但对API的请求数量限制为每个用户每秒最多10个请求。
因此,我更新了limiter库,使其每秒只允许10个请求,而不是每100秒1000个请求,并且它工作得非常出色。
const RateLimiter = require('limiter').RateLimiter;
const limiter = new RateLimiter(10, 1000);
在我的例子中,我并行地在Google驱动器文件夹中递归,得到了这个错误。我通过使用瓶颈库实现客户端速率限制解决了这个问题,请求之间的延迟为110毫秒:
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...
}));
403:用户速率限制超过即为防洪。用户一次只能发出这么多请求。不幸的是,用户速率限制没有显示在您正在查看的图表中。这张图表实际上很不擅长显示真实发生的事情。谷歌在后台测试,如果你超过了你的限制,就会排除错误。他们不需要在图表中向我们展示
403:超出用户速率限制
已达到每个用户的限制。这可能是开发人员控制台的限制,也可能是驱动器后端的限制。
{“error”:{“errors”:[{“domain”:“usageLimits”,“reason”:“userratelimetextered”,“message”:“userratelimetextered”}],“code”:403,“message”:“userratelimetextered”}
建议的行动:
在我看来,当您开始遇到此错误消息时,要做的主要事情是实现指数退避,这样您的应用程序将能够减速并再次发出请求。
在我的jenkins工作中,我得到这个错误为我的bot用户。我的限制是5000,我看到每秒钟大约有100个请求,我不确定哪个工作/服务正在使用机器人的请求。理想情况下,我的其他jenkins工作应该每分钟最多占用1个请求。 有没有办法找出是什么导致了如此高的请求率?或者任何API调用来列出在最后一分钟内进行的所有API调用或类似的东西?
我正在使用SpringWebFlux和netty构建一个微服务。在内部,我使用web客户端进行RESTAPI调用。如何控制通过webclient调用RESTAPI的速率?我猜backnpressure只适用于单个请求/回复,不适用于对我的微服务的多个请求。Amy pointers将不胜感激。谢谢
我们正在使用Google的Admin SDK API。当我们执行超过2个线程向谷歌服务器发出批量请求时,我们会遇到很多403(超过速率限制)错误。 我们在项目管理面板中更改了每秒请求的速率限制,但似乎没有效果。正如谷歌在https://developers.google.com/admin-sdk/directory/v1/limits我们已尝试使用每个线程一个用户的凭据。 我们每秒可以发送多少个
我检索用户的照片使用管理sdk在java。我也实现了指数退避。 但在几次请求之后,我得到了403个错误代码和速率受限的异常消息。 有2000名用户和10至20名用户的照片。它开始给出403错误,并使用指数回退,这需要很长时间才能执行。 有人能给我一些关于这个问题的建议吗。?
我正在使用quarkus.rest客户端调用外部API,并希望将这些调用的频率限制在每秒50次,这样我就不会淹没外部服务。在没有侧车方法的情况下(通过代码),推荐的实现方法是什么?
假设我正在创建一个PWA(渐进式网络应用程序),用户可以在其中添加产品。这些产品的价格从0.01 EUR到1.00 EUR不等。我使用条纹支付。条纹订单对象不支持动态价格,动态传递,没有任何引用(一种外键)。要接受订单,Stripe需要引用SKU。在我的例子中,这个SKU将是产品价格的变化。这意味着,为了涵盖所有变化,我需要100个SKU,从1(0.01欧元)到100(1,00欧元)。因此,对于在