2

私が理解しているように、現在、Google の API は 1 秒あたり 10 のリクエストを API に提供しており (ドキュメントから)、メールを快適に操作するには不十分なようです。すべてのメールのヘッダー (または少なくとも送信者と受信者) を取得する必要があります。numberOfMails / 10数秒待つよりも良いことはありますか?

現在、クライアント側の JavaScript アプリケーションから API にアクセスしています。同じユーザーの API 呼び出しを多数のマシン/アプリケーションに分散することを考えていますが、制限が gmail ユーザーまたは登録済みアプリケーションに適用されるかどうかはまだ不明です。

とにかく、それをどうするかについていくつかのアイデアを得たいと思っています。現在のクォータでは、まったく使用できません。

4

2 に答える 2

5

引用した10リクエスト/秒/ユーザーの制限は、1秒の粒度ではなく、より長い移動ウィンドウで適用されます。プッシュバックを受ける前に、数秒間、その制限を (つまり、大幅に) 超えることができるはずです。ユーザーなどに短期間のバーストを許可するために意図的に書かれています。

バッチ処理はスループットに役立ちますが、長いウィンドウでこの制限を超えることはできません (バッチ内の 100 リクエストは 100 リクエストとしてカウントされます)。バッチで 50 または 100 を超えるリクエストを送信することはありません。そうしないと、そのうちのいくつかがスロットルされていることに間違いなく気付くでしょう (429)。

はい、プロジェクト全体の制限は、1 秒あたり 10 リクエストよりもはるかに寛大です。

于 2014-07-07T22:29:00.377 に答える
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 リクエストに制限されています。

于 2014-07-05T20:51:02.163 に答える