Skip to main content

Umgang mit API-Ratenbegrenzungen

Copilot-Chat kann bei der Behandlung von API-Rate-Grenzwerten helfen, indem Code vorgeschlagen wird, der sie erkennt und 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 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

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

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.

Weiterführende Lektüre