{"meta":{"title":"Обработка ограничений скорости API","intro":"Копилот Чат может помочь справиться с ограничениями скорости API, предлагая код, который их обнаруживает и реализует logic retry.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/copilot","title":"GitHub Copilot"},{"href":"/ru/copilot/tutorials","title":"Учебники"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook","title":"Кулинарная книга чата GitHub Copilot"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook/debug-errors","title":"Ошибки отладки"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook/debug-errors/handle-api-rate-limits","title":"Обработка ограничений скорости API"}],"documentType":"article"},"body":"# Обработка ограничений скорости API\n\nКопилот Чат может помочь справиться с ограничениями скорости API, предлагая код, который их обнаруживает и реализует logic retry.\n\nПри выполнении запросов к API обычно возникают ограничения скорости, ограничивающие количество вызовов, которые можно выполнять в течение определенного интервала времени. Чат GitHub Copilot помогает обрабатывать эти ограничения, предлагая код для обнаружения ответов ограничения скорости и автоматического повторения запросов после задержки.\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] Следующий ответ является примером. Ответы Копилот Чат являются недетерминированными, поэтому вы можете получить другой ответ, показанный здесь.\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). Постепенно `backoff_factor` увеличивает задержку между повторными попытками, что помогает избежать превышения ограничения скорости API дальше.\n\n## Дополнительные материалы\n\n* [Инженерия подсказок для GitHub Copilot Chat](/ru/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [Лучшие практики использования GitHub Copilot](/ru/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}