上限に達する前にキーの使用状況を監視する
割り当てヘッダーを随時確認しておけば、リクエストが実際に拒否されるよりずっと前に、上限が近づいていることが分かります。
パーソナライズ、初期設定、分析をはじめとするほとんどの用途では、ジオロケーションはサーバー側で行うべきものです。訪問者のブラウザの協力も、クライアント側で動くスクリプトも一切必要ないからです。
言語にかかわらず、呼び出しは/v1/ipへの同じシンプルなHTTP GETリクエストで、キーはヘッダーで送信します。
GET /v1/ip?ip=203.0.113.60
X-API-Key: mg_live_examplekey123{
"status": "ok",
"ip": "203.0.113.60",
"version": 4,
"found": true,
"country": "Netherlands",
"country_code": "NL",
"region": "North Holland",
"city": "Amsterdam",
"postcode": "1012",
"lat": 52.3702,
"lon": 4.8952,
"timezone": "Europe/Amsterdam",
"asn": 3344,
"org": "Example ISP"
}リクエストから訪問者自身のアドレスを取得し(通常は$_SERVER['REMOTE_ADDR'])、ipパラメーターとして渡します。そのうえで、PHP環境ですでに使っているHTTPクライアント(curl、またはそれをラップしたライブラリ)でHTTPリクエストを送ります。このサイト自体もクライアント側のJavaScriptを使わないサーバーレンダリングのPHPで作られているため、このパターンはページの通常のレンダリングの流れに自然に収まり、ページのマークアップが生成される前に位置データを利用できます。
受信したリクエストオブジェクトから訪問者のアドレスを読み取ります。一般的にはreq.socket.remoteAddress、アプリの前段にリバースプロキシがある場合はX-Forwarded-Forなどそのプロキシが設定するヘッダーです。そして、レスポンスをレンダリングする前に、好みのHTTPクライアントで同じGETリクエストを送ります。
アプリがロードバランサーやリバースプロキシの背後にある場合、コードが直接見るアドレスは訪問者ではなくプロキシ自身のアドレスかもしれません。接続の生のリモートアドレスに頼るのではなく、プロキシが設定する転送元アドレスのヘッダーを確認し、そのアドレスをipパラメーターとして明示的に渡してください。そうしないと、訪問者ではなく自社のインフラの位置を特定することになります。
検索のコストは、PHPから呼び出しても、Nodeやその他のバックエンド言語から呼び出しても、同じ1リクエストです。コストは何が呼び出したかではなく、APIに届いたリクエストに結び付いているからです。どちらの言語でも、ページごとに検索を繰り返さないよう、結果をセッションの間キャッシュしてください。
サーバー側のジオロケーションは、バックエンドの言語にかかわらず同じように機能します。訪問者のアドレスを付けた1回のHTTP呼び出しです。認証方法の詳細は認証のドキュメントに、フィールドの一覧はIPv4検索のドキュメントにあります。