Skip to main content

Umgang mit API-Ratenbegrenzungen

Copilot-Chat kann beim Umgang mit API-Ratenbegrenzungen helfen, indem er Code vorschlägt, der sie erkennt, und indem er die Wiederholungslogik implementiert.

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 beim Umgang mit diesen Begrenzungen helfen, indem er Code vorschlägt, der Ratenbegrenzungsantworten erkennt, und indem er die Anforderungen nach einer bestimmten Wartezeit automatisch wiederholt.

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

Beispiel für Prompt

Copilot Chat prompt
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.

Um die Häufigkeit der Wiederholungsversuche zu beschränken, kann Copilot Code vorschlagen, mit dem ein Wiederholungsmechanismus mit exponentiellem Backoff implementiert wird.

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 verlängert schrittweise die Wartezeit zwischen den Versuchen. Dadurch wird verhindert, dass das Ratenlimit der API weiterhin überschritten wird.

Weiterführende Themen