ウェブサービスの使用を最適化する

概要

アプリケーションで Google Maps APIs ウェブサービスの使用制限を超過した場合、サービスはエラー メッセージを返します。アプリケーションで使用制限の超過が続く場合、ウェブサービスへのアクセスがブロックされ、場合によっては "403 Forbidden" のレスポンスが返されます。

アプリケーションのウェブサービス リクエストでエラー メッセージが表示された場合は、次の対策をとることができます。

  1. ウェブサービスを効率良く使用できるようにアプリケーションを最適化して、使用量を削減する。
  2. 可能であれば、Maps APIs Credits を追加で購入し、使用制限を引き上げる。

はじめに

アプリケーションによるウェブサービスの使用を最適化する前に、ユースケースに応じた適切なサービスや、適切な Maps API ライセンスを使用していることを確認してください。

ユースケースを検証する

Google Maps APIs ウェブサービスは、ユーザーからのリアルタイム入力を必要としないアプリケーションや、ウェブブラウザを使用しない場合に最適です。たとえば、アプリケーションで、ユーザーの入力と無関係のデータセット(不動産サイトでジオコーディングを必要とする固定の住所など)を使用する場合は、ウェブサービスを使用する必要があります。

ウェブサービスを使用すると、Premium Plan ライセンスでは、送信元の IP アドレス リクエスト数にかかわらず 1 秒あたりのクエリ数(QPS)の制限が適用されます。

一方、Google Maps JavaScript API で使用できるクライアント側サービスは、リクエストがすべてのユーザーに分散され、ユーザー数の増加に応じてスケーリングできるように、ブラウザ セッションごとのレート制限があります。したがってクライアント側サービスは、店舗案内でユーザーの住所の近くにある店舗を検索するなど、リアルタイムでユーザーが入力した住所をジオコーディングするアプリケーションに最適です。

ウェブサービスを使用するケースの詳細については、ジオコーディングの方法をご覧ください。このドキュメントの推奨事項はジオコーディングに特化していますが、サーバー側のウェブサービスとクライアント側の同等の機能の使い分けに関する説明は、あらゆるウェブサービスにあてはまります。

Google Maps APIs Premium Plan ライセンスの使用

アプリケーションのリクエストには必ず、Google Maps APIs Premium Plan ライセンスの正しい認証情報を設定してください。認証情報は、Google API Console の Premium Plan プロジェクトに設定したクライアント ID または API キーです。

アプリケーションで Premium Plan ライセンスが正しく使用されていないと、標準プランの使用制限と利用規約の制限に従う必要があります。また、Premium Plan SLA の対象外となります。さらに、アプリケーションのテクニカル サポートを利用できなくなります。

ウェブサービスの使用を最適化する方法

ウェブサービスをより効率的に使用するには、必要なときにのみリクエストを送信し、制限内に収まるように使用量を均等に分散させ、使用量を削減します。

結果をキャッシュする

Maps API 利用規約の10.5.d 項で、アプリケーションのパフォーマンスを向上するため、Google Maps のデータを一時的に、最大 30 日間キャッシュできることが規定されています。ウェブサービスのレスポンスをキャッシュすることで、アプリケーションは短期間に重複するリクエストを送信することを避けられます。実際、ウェブサービスのレスポンスには常に Cache-Control HTTP ヘッダーが含まれています。これは、結果をキャッシュできる期間を示します。例: Cache-Control: public, max-age=86400。効率を上げるため、アプリケーションでは少なくともこのヘッダーで指定された期間は結果をキャッシュしてください。ただし、Maps API の利用規約で規定された期間の上限を超えないようにしてください。

ウェブプロキシを使用してキャッシュ機能を実装できます。ほとんどのウェブプロキシでは、この機能を初期設定のまま実行できます。独自のウェブプロキシの実装を使用することも可能です。なお、一部の HTTP クライアント ライブラリでも、HTTP レスポンスをキャッシュします。

キャッシュ ヒット率を上げるには、緯度と経度(lat/long)座標を小数点以下 6 桁に正規化します。これにより、赤道上の差で約 11 センチメートルの精度が実現します。これ以上小数点以下の桁数を増やしても、ウェブサービスからの結果は変わらず、キャッシュ ヒット率が下がります。

リクエストのスロットリング(絞り込み)

使用制限の超過を避けるため、リクエストの送信日時を監視するキューにリクエストを入れて、リクエストを絞り込むようにアプリケーションを設定できます。アプリケーションが QPS 制限を超える追加のリクエストを受信した場合、最初のリクエストのタイムスタンプを確認し、1 秒待ちます。

スロットリングを行ってもアプリケーションがステータス コード OVER_QUERY_LIMIT のレスポンスを受け取る可能性があります。このようなレスポンスを受信したら、短時間の遅延(20 ms)を挿入するようにアプリケーションを設定し、再試行してください。

QPS 制限を引き上げる

適切なスロットリングを実装すれば、アプリケーションで使用制限を超過するほどのリクエストを送信することはないはずです。しかし、ウェブサービスの使用制限(通常、50 QPS)を超える大量または高速の入力を受信する場合があります。このような場合、スロットル キューの量が増加し、未処理のリクエストが発生します。また、Places API Web Service は最初 5 QPS に制限されています。アプリケーションで、このような未処理のリクエストが毎日特定の時間帯や一日を通して定期的に発生する場合は、Google Maps APIs Premium Plan ライセンスの QPS 制限の引き上げが必要である可能性があります。QPS の引き上げをリクエストするには、Google Maps APIs の Sales Account Manager にお問い合わせください。