1

Google API PHP クライアント ( http://code.google.com/p/google-api-php-client/ ) を使用して OAuth リクエストを作成し、新しいアクセス トークンを取得します。

リフレッシュ トークンをキャッシュし、これを使用して新しいアクセス トークンを生成します。私はドキュメント(https://developers.google.com/accounts/docs/OAuth2https://developers.google.com/storage/docs/developer-guide)を調べましたが、更新の制限についてのみ説明していますトークン (クライアント/ユーザーの組み合わせごとに 1 つの制限、およびすべてのクライアントのユーザーごとに別の制限) はありますが、アクセス トークンの制限については何もありません (アクセス トークンが 1 時間のみ有効であるという事実を除いて)。

何千ものバケットにわたってバケット サイズの使用状況を計算しようとしています。時間を短縮するために、このタスクを並列化しようとしています。これを行うには、バケットごとに新しいプロセスを生成し、各プロセスが新しいアクセス トークンを要求します。これは、発行されるアクセス トークンの数に制限がないという前提と、大量のオブジェクトを含むバケットの場合、計算時間 + 潜在的な指数関数的バックオフ時間は、理論的にはアクセス トークンの有効期間を超える可能性があるためです。

しかし、これを実行しようとすると、次のエラーが表示されます。

Error No: 1
Error on Line: 242
Error Message: Uncaught exception 'apiAuthException' with message 'Error refreshing the OAuth2 token, message: 
<HTML>
<HEAD>
<TITLE>User Rate Limit Exceeded</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>User Rate Limit Exceeded</H1>
<H2>Error 403</H2>
</BODY>
</HTML>

これは、アクセス トークンを大量 (現時点で 16 個) 生成しているためですか?

そうでない場合、このエラーの原因は何ですか? このエラーを回避する最善の方法は何ですか?

ユーザー レート制限を文書化した Google ドキュメント ページはありますか?

4

2 に答える 2

1

アクセストークンの数には制限があります。更新トークンを使用して新しいアクセス トークンを要求すると、時間制限を超えていなくても、以前に割り当てられたアクセス トークンが上書きされる場合があります (はい、一度にアクティブにできるアクセス トークンの最大数があります)。

また、更新トークンを使用して新しいアクセス トークンを要求できる頻度にはレート制限があります。

これを回避する最善の方法は、x 分ごとに新しいアクセス トークンを取得する役割を担う中央のキー管理プロセスを用意することです (たとえば、タイムアウトが 1 時間の場合は 30 分にします)。次に、並列化されたプロセスは、中央のキー管理プロセスから単一のアクセス トークンを要求します。

https://developers.google.com/accounts/docs/OAuth2に従って:

アクセス トークンの有効期間は限られており、場合によっては、アプリケーションが 1 つのアクセス トークンの有効期間を超えて Google API にアクセスする必要があります。この場合、アプリケーションはリフレッシュ トークンと呼ばれるものを取得できます。リフレッシュ トークンを使用すると、アプリケーションで新しいアクセス トークンを取得できます。

発行される更新トークンの数には制限があることに注意してください。クライアントとユーザーの組み合わせごとに 1 つの制限があり、すべてのクライアントでユーザーごとに別の制限があります。更新トークンは長期ストレージに保存し、有効である限り引き続き使用する必要があります。アプリケーションが要求する更新トークンが多すぎると、これらの制限に達する可能性があり、その場合、古い更新トークンは機能しなくなります。

于 2013-05-04T06:36:49.450 に答える