Wie man mit Ratenbegrenzung umgeht

Die Ratenbegrenzung ist eine gängige Technik, die von API-Anbietern verwendet wird, um die Anzahl der Anforderungen zu verwalten, die in einem bestimmten Zeitraum an ihren Dienst gestellt werden können. API-Anbieter verwenden eine Ratenbegrenzung, um sicherzustellen, dass ihr Dienst für alle Benutzer verfügbar und reaktionsschnell bleibt, und um Missbrauch oder übermäßige Nutzung des Dienstes zu verhindern.

Wenn Sie Cloud-APIs in Ihrer Anwendung verwenden, sollten Sie deren Ratenbegrenzungen kennen. Die folgenden Techniken können Ihnen bei der Handhabung der Ratenbegrenzung in Ihren Anwendungen helfen:

  • Ratenbegrenzungen verstehen Überprüfen Sie die Dokumentation der API, die Sie verwenden, um die Ratenlimits zu verstehen. Ratenlimits können vom API-Anbieter oder dem von Ihnen verwendeten Serviceplan abhängen. Einige APIs können beispielsweise unterschiedliche Rate-Limits für kostenlose und kostenpflichtige Pläne haben.
  • Verwenden Sie Informationen zur Ratenbegrenzung. APIs, die Ratelimits verwenden, kommunizieren in der Regel die aktuellen Grenzwerte in den Antwortheadern. Der RateLimit-Remaining Header gibt z. B. die Anzahl der Anfragen an, die im aktuellen Zeitfenster verbleiben. Wenn Sie eine Antwort erhalten, bei der dieser Header auf 0 gesetzt ist, wissen Sie, dass Sie das Ratenlimit erreicht haben, und sollten auf das nächste Fenster warten, bevor Sie eine weitere Anforderung senden. Der RateLimit-Reset Header gibt den Zeitpunkt an, zu dem die Ratenbegrenzung zurückgesetzt wird. Headernamen und Formate unterscheiden sich je nach API: GitHub z. B. verwendet x-ratelimit-remaining und x-ratelimit-reset in UTC-Epochen sekunden. Einige APIs senden die Header erst, nachdem Sie einen Schwellenwert erreicht haben. Ein Beispiel ist, wenn Sie noch 10 % der Anfragen haben.
  • Optimieren Sie die API-Nutzung. Einige Dienste ordnen verschiedenen Anfragen je nach Komplexität unterschiedliche Kosten zu. Einige APIs können z. B. höhere Gebühren für Anfragen berechnen, die mehr Daten zurückgeben. Um die Kosten Ihrer Anwendung zu senken, optimieren Sie Ihre API-Nutzung, indem Sie nur die Daten abrufen, die Sie benötigen. Verwenden Sie Batch-Anforderungen, wenn die API sie unterstützt. Sie helfen Ihnen, die Anzahl der Ressourcen zu reduzieren, die für die Verarbeitung der Antwort erforderlich sind, und die Ratengrenzen einzuhalten.
  • Implementieren Sie einen lokalen Ratenbegrenzer. Implementieren Sie einen Ratenbegrenzer in der Anwendung selbst, um die Anzahl der Anforderungen zu begrenzen, die in einem bestimmten Zeitraum an die API gesendet werden können. Sie können dies tun, indem Sie Techniken wie Token-Bucket- oder Leaky-Bucket-Algorithmen verwenden, die es der Anwendung ermöglichen, viele Anfragen pro Zeitraum zu stellen. Alle weiteren Anforderungen werden in die Warteschlange eingereiht oder verworfen.
  • Vermeiden Sie das Überschreiten von Ratenlimits. Wenn Sie die Ratenlimits überschreiten, drosselt die API Ihre Anfragen, in der Regel mit einem HTTP-Statuscode 429 Too Many Requests. Die Drosselung wirkt sich stärker auf den Durchsatz Ihrer Anwendung aus als die Ratenbegrenzung. Verwenden Sie die Informationen in Antwortheadern zur Ratebegrenzung, um innerhalb der Grenzwerte zu bleiben und Drosselungen zu vermeiden.

Mithilfe dieser Techniken können Sie Anwendungen erstellen, die gegenüber Ratenbegrenzungen resilient sind und auch dann weiterhin funktionieren, wenn die API stark ausgelastet ist. Testen Sie dann, ob sie dies tun, da Sie während der Entwicklung selten an eine Rategrenze stoßen.

So testen Sie den Umgang mit Rate-Limits

Approach Was Sie finden Was Ihnen fehlt
Warten auf die Produktion Tatsächliche Ratenbegrenzungen Alles, bis ein Benutzer darauf klickt
Mocken Sie die API in Ihren Tests, oder lassen Sie Ihren Coding-Agenten den Mock schreiben. Ob Ihr Code die von Ihnen simulierten Header liest. Die tatsächlichen Headernamen, Formate und das Reset-Verhalten der API sowie die Wiederholungsrichtlinie Ihres SDK. Ihre App benötigt außerdem einen reinen Testschalter, um den Mock zu erreichen.
Rufen Sie die echte API auf, bis Sie den Grenzwert erreicht haben Tatsächliches Verhalten Sie können das Limit nicht beliebig erreichen, Sie brauchen Ihr tatsächliches Kontingent auf, und einige Grenzwerte werden erst nach einer Stunde zurückgesetzt.
Fangen Sie den realen Datenverkehr Ihrer App ab und simulieren Sie das Limit Echte URLs, ein Limit und ein Zeitfenster Ihrer Wahl sowie die eigenen Header der API Ihr Code in Isolation. Bewahren Sie sich das für Ihre Unit-Tests auf.

Probieren Sie sie mit Ihrer App aus

Dev Proxy zählt die Anfragen Ihrer App an die von Ihnen ausgewählten APIs, fügt den Antworten Rate-Limit-Header hinzu und antwortet mit 429, wenn Ihre App den Grenzwert überschreitet, während Ihre App weiterhin die tatsächlichen URLs aufruft. Sie wählen das Limit und das Zeitfenster aus, sodass Sie es in einer Minute anstelle einer Stunde erreichen können.

Laden Sie für GitHub die Voreinstellung herunter, und starten Sie Dev Proxy damit:

devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"

Verwenden Sie für Microsoft Graph Aufrufe von OneDrive und SharePoint (/drive, /shares, /sites) die microsoft-graph-rate-limiting Voreinstellung. Zum Installieren von Dev Proxy siehe Einrichten von Dev Proxy.

Nächster Schritt