Beim Senden von Anforderungen an APIs treten häufig Ratenbegrenzungen auf, die die Anzahl der Aufrufe beschränken, die Sie innerhalb eines bestimmten Zeitraums durchführen können. GitHub Copilot Gespräch kann Ihnen helfen, diese Beschränkungen zu handhaben, indem es Code vorschlägt, um Rate-Limit-Antworten zu erkennen und Anfragen nach einer Wartezeit automatisch erneut zu senden.
Beispielszenario
Mit dem folgenden Python-Code werden Wetterdaten aus einer externen API abgerufen. Wenn für die API Ratenbegrenzungen festgelegt sind, können bei Anforderungen Fehler auftreten, wenn die Grenzwerte überschritten werden. Ihre App sollte die Möglichkeit haben, mit diesen Antworten ordnungsgemäß umzugehen, indem die Wiederholungslogik implementiert wird.
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
Beispielaufforderung
How can I handle API rate limits within get_weather().
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
How can I handle API rate limits within get_weather().
How can I handle API rate limits within get_weather().
Beispielantwort
Hinweis
Die folgende Antwort ist ein Beispiel. Da die Copilot-Chat-Antworten nicht deterministisch sind, erhältst du möglicherweise eine andere Antwort als die hier beschriebene.
Copilot kann Code vorschlagen, der einen Wiederholungsmechanismus mit exponentiellem Backoff implementiert, um die Häufigkeit der Wiederholungsversuche zu begrenzen.
Beispiel:
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
In diesem Beispiel Copilotsind die Vorschläge zum Einrichten einer Wiederholungssitzung enthalten, mit der der Code Anforderungen automatisch wiederholen kann, wenn sie aufgrund bestimmter Statuscodes fehlschlagen (500, 502, 504). Der backoff_factor verlängert schrittweise die Wartezeit zwischen den Versuchen. Dadurch wird verhindert, dass das Ratenlimit der API weiterhin überschritten wird.