{"meta":{"title":"API のレート制限の処理","intro":"Copilot Chat は、API レート制限を検出して再試行ロジックを実装するコードを提案することで、API レートの制限を処理するのに役立ちます。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/tutorials","title":"チュートリアル"},{"href":"/ja/copilot/tutorials/copilot-cookbook","title":"GitHub Copilot クックブック"},{"href":"/ja/copilot/tutorials/copilot-cookbook/debug-errors","title":"エラーをデバッグする"},{"href":"/ja/copilot/tutorials/copilot-cookbook/debug-errors/handle-api-rate-limits","title":"API のレート制限を処理する"}],"documentType":"article"},"body":"# API のレート制限の処理\n\nCopilot Chat は、API レート制限を検出して再試行ロジックを実装するコードを提案することで、API レートの制限を処理するのに役立ちます。\n\nAPI への要求を行うとき、一定の期間内に実行できる呼び出しの数を制限するレート制限が発生することがよくあります。\nGitHub Copilot Chat は、レート制限応答を検出し、遅延後に要求を自動的に再試行するコードを提案することで、これらの制限を処理するのに役立ちます。\n\n## サンプル シナリオ\n\n次の Python コードは、外部 API から気象データをフェッチします。 API にレート制限がある場合、制限を超えると要求が失敗する可能性があり、再試行ロジックを実装してこれらの応答を適切に処理する方法がアプリに必要になる場合があります。\n\n```python id=rate-limit-example\nfrom flask import Flask, request\nimport requests\n\napp = Flask(__name__)\n\nWEATHER_API_URL = \"https://api.example.com/weather\"\n\n@app.route('/get_weather', methods=['GET'])\ndef get_weather():\n    city = request.args.get('city')\n    # Simulate an API request to the external weather service\n    response = requests.get(WEATHER_API_URL, params={\"city\": city})\n    weather_data = response.json()\n\n    return weather_data\n```\n\n## プロンプトの例\n\n```copilot copy prompt ref=rate-limit-example\nHow can I handle API rate limits within get_weather().\n```\n\n## 応答の例\n\n> \\[!NOTE] 次の応答は例です。 Copilot Chat の応答は非決定的であるため、ここで示したものとは異なる応答が返される可能性があります。\n\nCopilot は、再試行の頻度を制限するために指数バックオフを使用して再試行メカニズムを実装するコードを提案する場合があります。\n\n例えば次が挙げられます。\n\n```python\nimport requests\nfrom flask import Flask, request\nfrom requests.adapters import HTTPAdapter\nfrom requests.packages.urllib3.util.retry import Retry\n\napp = Flask(__name__)\n\nWEATHER_API_URL = \"https://api.example.com/weather\"\n\ndef requests_retry_session(\n    retries=3,\n    backoff_factor=0.3,\n    status_forcelist=(500, 502, 504),\n    session=None,\n):\n    session = session or requests.Session()\n    retry = Retry(\n        total=retries,\n        read=retries,\n        connect=retries,\n        backoff_factor=backoff_factor,\n        status_forcelist=status_forcelist,\n    )\n    adapter = HTTPAdapter(max_retries=retry)\n    session.mount(\"http://\", adapter)\n    session.mount(\"https://\", adapter)\n    return session\n\n@app.route('/get_weather', methods=['GET'])\ndef get_weather():\n    city = request.args.get('city')\n    try:\n        response = requests_retry_session().get(WEATHER_API_URL, params={\"city\": city})\n        response.raise_for_status()\n        weather_data = response.json()\n    except requests.exceptions.RequestException as e:\n        return {\"error\": str(e)}, 500\n\n    return weather_data\n```\n\nこの例では、 Copilotの提案には、特定の状態コード (500、502、504) が原因で失敗した場合に、コードが要求を自動的に再試行できるようにする再試行セッションの設定が含まれます。\n`backoff_factor` によって再試行の間隔が徐々に長くなり、API のレート制限をそれ以上超えないようにするのに役立ちます。\n\n## 詳細については、次を参照してください。\n\n* [GitHub Copilot Chat のプロンプト エンジニアリング](/ja/copilot/concepts/prompting/prompt-engineering)\n* [GitHub Copilot の使用に関するベスト プラクティス](/ja/copilot/get-started/best-practices)"}