Skip to main content

Gestion des limites de taux de l'API

Copilot Chat peut aider à gérer les limites de débit API en suggérant du code qui détecte et implémente une logique de nouvelle tentative.

Lorsque vous effectuez des demandes Ă  des API, il est courant de rencontrer des limites de dĂ©bit qui limitent le nombre d’appels que vous pouvez effectuer dans un dĂ©lai donnĂ©. GitHub Copilot Chat peut vous aider Ă  gĂ©rer ces limites en suggĂ©rant du code pour dĂ©tecter les rĂ©ponses de limitation de dĂ©bit et rĂ©essayer automatiquement les requĂȘtes aprĂšs un certain dĂ©lai.

Exemple de scénario

Le code Python suivant extrait des donnĂ©es mĂ©tĂ©orologiques Ă  partir d’une API externe. Si l’API a des limites de dĂ©bit, les requĂȘtes peuvent Ă©chouer lorsque des limites sont dĂ©passĂ©es et votre application peut avoir besoin d’un moyen de gĂ©rer ces rĂ©ponses correctement en implĂ©mentant la logique de nouvelle tentative.

from flask import Flask, request
import requests

app = Flask(__name__)

WEATHER_API_URL = "https://api.example.com/weather"

@app.route('/get_weather', methods=['GET'])
def get_weather():
    city = request.args.get('city')
    # Simulate an API request to the external weather service
    response = requests.get(WEATHER_API_URL, params={"city": city})
    weather_data = response.json()

    return weather_data

Exemples d’invite

How can I handle API rate limits within get_weather().

Exemple de réponse

Remarque

La réponse suivante est un exemple. Les réponses Copilot Chat ne sont pas déterministes, vous pouvez donc obtenir une réponse différente de celle affichée ici.

Copilot pourrait suggérer un code qui implémente un mécanisme de réessai avec un backoff exponentiel pour limiter la fréquence des tentatives de réessai.

Par exemple :

import requests
from flask import Flask, request
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

app = Flask(__name__)

WEATHER_API_URL = "https://api.example.com/weather"

def requests_retry_session(
    retries=3,
    backoff_factor=0.3,
    status_forcelist=(500, 502, 504),
    session=None,
):
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    return session

@app.route('/get_weather', methods=['GET'])
def get_weather():
    city = request.args.get('city')
    try:
        response = requests_retry_session().get(WEATHER_API_URL, params={"city": city})
        response.raise_for_status()
        weather_data = response.json()
    except requests.exceptions.RequestException as e:
        return {"error": str(e)}, 500

    return weather_data

Dans cet exemple, Copilot propose notamment de mettre en place une session de rĂ©pĂ©tition qui permet au code de relancer automatiquement les demandes si elles Ă©chouent en raison de codes d'Ă©tat spĂ©cifiques (500, 502, 504). Le backoff_factor augmente progressivement le dĂ©lai entre les nouvelles tentatives, ce qui permet d’éviter de dĂ©passer davantage la limite de dĂ©bit de l’API.

Pour aller plus loin