Skip to main content

Umgehen mit API-Ratenbegrenzungen

Copilot Chat kann mit Codevorschlägen zum Erkennen und Implementieren von Wiederholungslogik beim Umgehen mit API-Ratenbegrenzungen helfen.

Beim Senden von Anforderungen an APIs stößt du oft auf Ratenbegrenzungen, die die Anzahl der Aufrufe beschränken, die du innerhalb eines bestimmten Zeitraums durchführen kannst. GitHub Copilot Chat kann mit Codevorschlägen zum Erkennen von Ratenbegrenzungsantworten und automatischem Wiederholen von Anforderungen nach einer Wartezeit beim Umgehen mit diesen Begrenzungen helfen.

Beispielszenario

Mit dem folgenden Python-Code werden Wetterdaten aus einer externen API abgerufen. Wenn die API Ratenbegrenzungen aufweist, können bei Anforderungen Fehler auftreten, falls Grenzwerte überschritten werden. Deine App sollte über eine Möglichkeit verfügen, mit diesen Antworten durch Implementieren von Wiederholungslogik umzugehen.

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

Beispiel für Prompt

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

Beispielantwort

Note

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 einen Code vorschlagen, mit dem ein Wiederholungsmechanismus mit exponentiellem Backoff zum Beschränken der Wiederholungsversuchshäufigkeit implementiert wird.

Zum 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 schlägt Copilot unter anderem vor, eine Wiederholungssitzung einzurichten, über die der Code Anforderungen automatisch wiederholen kann, wenn aufgrund von bestimmten Statuscodes (500, 502, 504) Fehler auftreten. Der backoff_factor erhöht die Wartezeit zwischen den Versuchen Stück für Stück, um die Ratenbegrenzung der API nicht noch weiter zu überschreiten.

Weitere Informationen