Cloud Endpoints の割り当てを使用して、アプリケーションが API を呼び出せるペース(レート)を制御できます。割り当てを設定することで、呼び出し元アプリケーションによる過剰な数のリクエストから API を保護するための使用制限を指定できます。過剰な数のリクエストは、単純な入力ミスや、不必要に API を呼び出す非効率的な設計のシステムが原因で発生する場合があります。こうした原因とは無関係に、API の全体的な正常性を維持するには、ソースからのトラフィックが一定のレベルに達した場合にトラフィックをブロックする必要があります。割り当てを設定することで、あるアプリケーションが、API を使用している他のアプリケーションに悪影響を与えないようにできます。
このページでは、割り当てによって実現できる主な機能の概要を示します。
リクエスト数とユーザー プロジェクトの関係
Endpoints で割り当てを構成すると、ユーザーの Google Cloud プロジェクトでの 1 分あたりのリクエスト数が追跡されます。API を呼び出す各アプリケーションは、次の条件を満たしている必要があります。
- Google Cloud Project を作成する。
- Google Cloud プロジェクトで API が有効になっている。
- API キーをAPI に対する各リクエストで送信する。これにより、Endpoints は呼び出し元アプリケーションと関連付けられている Google Cloud プロジェクトを識別し、その Google Cloud プロジェクトに対するリクエストのカウンタをインクリメントできます。
API キーの構成については、次をご覧ください。
API ユーザーに Google Cloud Console で独自のプロジェクトを作成させることも、管理者が API ユーザーのためにプロジェクトを作成することもできます。Endpoints ではプロジェクトごとに割り当てが適用されるため、API ユーザーごとに 1 つのプロジェクトが必要です。
1 分あたりのリクエスト数を制限する
割り当てを設定することで、API 全体または特定のメソッドに対する 1 分あたりのリクエスト数の上限を設定できます。構成した上限値をユーザー プロジェクトのクライアント コードが超えた場合、リクエストは API に到達する前に拒否され、「429 too many
requests
」という HTTP ステータス コードが返されます。呼び出し元アプリケーションは、ステータス コード 429
を処理し、指数バックオフやその他の再試行ロジックを使用して、API の呼び出しレートを下げる必要があります。
1 つ以上の割り当てを設定する
名前付きの割り当てをいくつか設定し、割り当てごとに異なるレート制限を指定できます。たとえば、大量のリソースを必要とするメソッド(複雑なクエリを実行して大きな結果リストを返すメソッドなど)と、高速かつ軽量なメソッドが API 内に混在している場合があります。その場合は、レート制限の異なる 2 つの割り当てを設定し、一方の割り当てをリソース消費量の多いメソッドに、他方の割り当てを軽量メソッドに関連付けることができます。
コストを設定する
メソッドに割り当てを関連付ける場合は、常にリクエストのコストを指定します。これにより、異なるメソッドが同じ割り当てを異なるレートで消費できます。コストは、異なる割り当てを設定する場合の代替手段として使用できます。たとえば、1 分あたりのリクエスト数を 1,000 に制限する割り当てを設定するとします。軽量メソッドの場合は、コストを 1 に設定します。これは、クライアントが軽量メソッドを 1 分間に 1,000 回呼び出せることを意味します。大量のリソースを必要とするメソッドでは、コストを 2 に設定します。つまり、クライアントがこのメソッドを呼び出すたびに、リクエストのカウンタは(上限値の 1,000 に達するまで)2 ずつインクリメントされます。これは実質的に、大量のリソースを必要とするメソッドによる 1 分あたりのリクエスト数を 500 に制限したのと同じになります。
構成された割り当てをオーバーライドする
[エンドポイント] > [サービス] ページには、API の各メソッドに構成されている割り当てが表示されます。必要に応じて、特定のユーザー プロジェクトに構成されている制限をオーバーライドできます。オーバーライドを設定するには、[エンドポイント] > [サービス] ページでユーザー プロジェクトのプロジェクト番号を入力する必要があります。オーバーライド対象のユーザー プロジェクトへのアクセス権がない場合は、プロジェクト番号を取得する権限を持つ担当者に連絡する必要があります。