我请求支持或特殊知识。
在我的应用程序中,我使用谷歌硬盘,需要插入/删除1000多个文件的权限。Google API不允许我在一个请求中设置多个文件的权限,因此我需要进行1000+个请求(或将其打包为批或几个批)。
我的请求如下:
POST /drive/v2/files/0B18tlN6SgYRaUzl1MUlnNHlGSEE/permissions?sendNotificationEmails=false"aUser=00787465305247954313&alt=json
但当我试图向Google Drive API发出批量请求时,我得到了大量错误响应的批量响应。批处理中的第一个响应很少是可以的,但不是全部。
大多数错误的响应看起来是这样的:
Content-Type: application/http
Content-ID: <response-280781395>
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=UTF-8
Date: Tue, 09 Sep 2014 11:45:03 GMT
Expires: Tue, 09 Sep 2014 11:45:03 GMT
Cache-Control: private, max-age=0
Content-Length: 199
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "rateLimitExceeded",
"message": "Rate Limit Exceeded"
}
],
"code": 403,
"message": "Rate Limit Exceeded"
}
}
其中一些看起来像这样:
HTTP/1.1 500 Internal Server Error
Content-Type: application/json; charset=UTF-8
Date: Tue, 09 Sep 2014 11:45:03 GMT
Expires: Tue, 09 Sep 2014 11:45:03 GMT
Cache-Control: private, max-age=0
Content-Length: 180
{
"error": {
"errors": [
{
"domain": "global",
"reason": "internalError",
"message": "Internal Error"
}
],
"code": 500,
"message": "Internal Error"
}
}
批次中的最后几个响应如下所示:
Content-Type: application/http
Content-ID: <response-901482964>
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
Date: Tue, 09 Sep 2014 11:45:03 GMT
Expires: Tue, 09 Sep 2014 11:45:03 GMT
Cache-Control: private, max-age=0
Content-Length: 171
{
"error": {
"errors": [
{
"domain": "global",
"reason": "badRequest",
"message": "Bad Request"
}
],
"code": 400,
"message": "Bad Request"
}
}
奇怪的是,当我收到配额限制错误,并决定在谷歌硬盘控制台中增加请求/用户/秒配额时。它被设置为10000/用户/秒。但我只批量发送了1000请求,但已经收到"403超过速率限制"错误。然后我开始得到"500内部错误"错误。
然后我发现我应该将"quotaUser"参数设置为request,但没有任何更改。我仍然会犯这种错误。
对Google Drive Web UI的调查向我展示了如果Google Drive决定共享1000多个文件,它是如何设置文件权限的。在共享我的所有文件之前,它会提示我大约20-30分钟。在"活动"面板中,我看到文件以束的形式共享。有时这些束是1个文件大小,有时是40个文件大小。但所有文件最终都被共享了,看起来谷歌硬盘团队使用了类似重试队列的东西,或者只是没有为自己的请求设置配额。
主要问题是:
- 为什么我仍然会收到这些配额错误(指定为10000谷歌云控制台中的请求/用户/秒限制)以及如何避免他们
- 为什么Google Drive API返回"500内部错误"one_answers"400错误请求"错误
- 有什么解决办法吗
附言:我有兴趣帮助谷歌驱动团队,我可以提供完整的跟踪和代码样本。
虽然您可以设置每个用户的QPS来防止恶意用户消耗您的配额,但将其设置为任意高的数字并不意味着您可以发出那么多请求。每个应用程序也有QPS限制。默认值远低于1000qps。
如果您需要额外的配额,请通过开发人员控制台请求。