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 un code pour détecter les réponses aux limites de taux et réessayer automatiquement les demandes 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
Note
La réponse suivante est un exemple. Copilot Chat Les réponses ne sont pas déterministes, il est donc possible que vous obteniez une réponse différente de celle présenté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.