Google 驱动器 API - 权限 - 超出速率限制。用户留言:抱歉,您已超出分享配额

Google Drive API - Permissions - Rate limit exceeded. User message: Sorry, you have exceeded your sharing quota

我一直在使用 Google 驱动器 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 驱动器 API 中可能有一个 "feature",它限制了可以插入的权限数量。有什么方法可以绕过这个限制吗?


更新:

郑重声明,我每天可以创建恰好 51 个权限。创建第 52 个权限在 24 小时内总是失败。不幸的是,此限制使权限 API 对服务帐户完全无用。

您可能达到了每秒配额限制。您一次只能提出这么多请求。实现 Exponential Backoff,这样当你的请求失败时,你会在重试之前给它一点时间。它应该减少您看到的速率限制错误的数量。

尝试 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 结果中有几项建议,包括请求支持的机制。它要么是速率限制错误之一,在这种情况下速度变慢,要么是每日配额问题,在这种情况下请求更高的配额。不管 google 文档怎么说,如果您得到速率限制,请执行 而不是 执行指数退避,因为它会扼杀您的吞吐量。而是将您的请求限制在每 3 秒一个左右,然后加速或减速直到它们消失。

如@zdegenr 所述,我还遇到过每 24 小时只能创建大约 50 个权限。我可以通过禁用通过 sendNotificationEmails 参数发送通知电子邮件来解决此问题:https://developers.google.com/drive/v2/reference/permissions/insert .

使用此配置我不再达到配额...

这里是.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();