据我所知,目前谷歌的API每秒向其API(from their docs)提供10个请求,而且看起来远远不足以让您轻松使用邮件。我需要收到所有电子邮件'标题(或至少发件人和收件人)。有没有什么比等待numberOfMails / 10
秒更好的了?
我目前正在从客户端JavaScript应用程序访问API,我正在考虑通过多个计算机/应用程序为同一用户分发API调用,但仍不清楚他们的限制是否适用gmail用户或注册的应用程序。
无论如何,希望得到一些想法如何处理,目前的配额完全无法使用。
答案 0 :(得分:5)
您引用的10个请求/秒/用户限制不是以一秒钟的粒度强制执行,而是以更长的移动窗口强制执行。在您获得回击之前,您应该能够超过该限制(即显着)几秒钟。它是故意编写的,允许用户等短期爆发。
批处理有助于提高吞吐量,但不允许您在长时间窗口内超过此限制(批处理中的100个请求仍计为100个请求)。我不会批量发送超过50或100个请求,或者你肯定会注意到其中一些请求受到限制(429)。
是的,项目范围的限制比10个请求/秒更加慷慨。
答案 1 :(得分:4)
您可以使用批处理请求一起发送多个请求。本周我花了整整一天来搞清楚这一点。 java代码是这样的:
BatchRequest batchRequest = service.batch();
//callback function. (Can also define different callbacks for each request, as required)
JsonBatchCallback<Thread> callback = new JsonBatchCallback<Thread>() {
@Override
public void onSuccess(Thread t, HttpHeaders responseHeaders)
throws IOException {
System.out.println(t.getMessages().get(0).getPayload().getBody().getData());
}
@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders)
throws IOException {
}
};
// queuing requests on the batch request
for (Thread thread : threads) {
service.users().threads().get("me", threads.getId()).queue(batchRequest, callback);
}
batchRequest.execute();
由问题的作者添加:对于那些也遇到此问题的人:https://developers.google.com/gmail/api/guides/batch和https://developers.google.com/api-client-library/javascript/features/rpcbatch。虽然不推荐使用RpcBatch,但它现在正在运行,每批限制为1000个请求。