已超出Google Drive API配额

我正在创建一个接收我的应用程序上的用户更改的频道。 主要问题是在2-3次webhook之后,我收到一条错误,指出用户已超出配额限制。

这没有任何意义,因为我只收到了2条post(我在ngrok上看到过)。

我已经在驱动器API和配额上使用谷歌控制台了。 每次收到webhook时,查询量都会增加500.因此,当用户进行两次更改并收到两个webhook时,查询数量超过了Google允许的1000次,我收到了该错误。

这是我启用频道的代码:

@GET @Path("/enable") public void enable(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException { Credential credential = initFlow().loadCredential("user"); Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); Channel channel = new Channel(); channel.setId(UUID.randomUUID().toString()); channel.setType("web_hook"); channel.setAddress("https://389825dc.ngrok.io/GDriveRest/app/gdrive/webhook"); StartPageToken page = service.changes().getStartPageToken().execute(); GDrive.savedPageToken = page.getStartPageToken(); service.changes().watch(savedPageToken, channel).execute(); } 

以下是webhook:

  @POST @Path("/webhook") public void webhook(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException { Credential credential = initFlow().loadCredential("user"); Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); String pageToken = savedPageToken; while (pageToken != null) { ChangeList changes = service.changes().list(pageToken).execute(); for (Change change : changes.getChanges()) { Log.info("Change found for file: " + change.getFileId()); } if (changes.getNewStartPageToken() != null) { savedPageToken = changes.getNewStartPageToken(); } pageToken = changes.getNewStartPageToken(); } response.setStatus(200); } 

这是错误:

 Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { "code" : 403, "errors" : [ { "domain" : "usageLimits", "message" : "User Rate Limit Exceeded", "reason" : "userRateLimitExceeded" } ], "message" : "User Rate Limit Exceeded" } 

为什么会这样?

代码中有错误。 我不得不改变以下内容:

 PageToken = changes.getNewStartPageToken(); 

 pageToken = changes.getNextPageToken(); 

大量的查询是因为我在每个循环上请求一个新的开始页面标记,强制进行无限循环。

您在本指南中讨论了遇到的错误。

建议采取的行动:

  • 在Developer Console项目中提高每用户配额。
  • 如果一个用户代表G Suite域的许多用户提出了大量请求,请考虑具有权限委派的服务帐户(设置quotaUser参数)。
  • 使用指数退避。

您也可以尝试访问此SOpost以了解相关问题。