我使用Google Drive API以编程方式创建和共享文档。昨天我开始收到每条插入权限请求的错误消息:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"location" : "user.sharing",
"locationType" : "other",
"message" : "Rate limit exceeded. User message: \"Sorry, you have exceeded your sharing quota.\"",
"reason" : "userRateLimitExceeded"
} ],
"message" : "Rate limit exceeded. User message: \"Sorry, you have exceeded your sharing quota.\""
}
我仍然可以以编程方式创建文档,但插入权限的请求总是失败。
这是通过服务帐户完成的,其理念是服务帐户将为应用程序管理这些文档,并根据需要与授权用户共享。
在插入大约50-100个权限后,错误开始发生。我做过一些研究,听起来可能有一个"功能"在Google Drive API中限制了可插入的权限数量。有没有办法解决这个限制?
更新
为了记录,我每天可以创建51个权限。创建第52个权限始终会在24小时内失败。不幸的是,这种限制使权限API对服务帐户完全无用。
答案 0 :(得分:4)
正如@zdegenr所说,我也经历过每24小时只能创建约50个权限。我可以通过sendNotificationEmails
参数https://developers.google.com/drive/v2/reference/permissions/insert禁用发送通知电子邮件来解决此问题。
通过这种配置,我不再符合配额......
答案 1 :(得分:1)
尝试https://www.google.com.ph/search?q=you+have+exceeded+your+sharing+quota&oq=you+have+exceeded+your+sharing+quota&aqs=chrome..69i57&sourceid=chrome&es_sm=93&ie=UTF-8结果中有几条建议,包括请求支持的机制。它是速率限制错误之一,在这种情况下会减慢,或者是每日配额问题,在这种情况下请求更高的配额。尽管谷歌文档说的话,如果你获得了速率限制,那么不做指数退避,因为它会谋杀你的吞吐量。而是将您的请求限制在每3秒左右一次,然后加速或减速直到它们消失。
答案 2 :(得分:0)
这里是.NET的实现
var permissionsBody = new Google.Apis.Drive.v3.Data.Permission()
{
Type = "user",
Role = "reader",
EmailAddress = "emailAddress",
};
var permission = _service.Permissions.Create(permissionsBody, fileId);
permission.SendNotificationEmail = false;
permission.Execute();
答案 3 :(得分:-1)
您可能达到每秒限额。您一次只能提出这么多请求。实施Exponential Backoff,这样当你的请求失败时,你会在重新尝试之前给它一点时间。它应该减少您看到的速率限制错误的数量。