Drosseln von API-Anforderungen

Abgeschlossen

Häufig überlasten einige Benutzer*innen eine API. Manchmal wird eine API so weit überlastet, dass zusätzliche Kosten anfallen oder die Reaktionsfähigkeit für andere Benutzer*innen verringert wird. Sie können die Drosselung (Ratenbegrenzung) verwenden, um API-Endpunkte zu schützen, indem Sie die Anzahl der Aufrufe einer API innerhalb eines bestimmten Zeitraums begrenzen.

Die Erhebungs-API wird z. B. an viele Regierungsbehörden verteilt, wodurch sich die Anzahl der Aufrufe der API deutlich erhöht. Durch Anwenden einer Richtlinie für Ratenbegrenzungen kann auf alle Anforderungen schnell geantwortet werden, da es nicht möglich ist, dass ein einzelner Client alle Ressourcen für die Erhebungs-API belegt.

In dieser Lerneinheit erfahren Sie, wie Sie mit API Management-Richtlinien zwei Arten von Drosselung festlegen können.

Beschränkung durch Abonnementdrosselung

Mithilfe der Abonnementdrosselung können Sie Ratenbegrenzungen durch einen bestimmten API-Vorgang festlegen. Es erfolgt keine clientbezogene Unterscheidung. Stattdessen wird jede Anforderung an die API oder den angegebenen Vorgang auf die gleiche Weise gedrosselt. In unserem Erhebungs-API-Beispiel könnten wir die Abonnementdrosselung verwenden, um die Häufigkeit zu begrenzen, mit der APIs innerhalb eines bestimmten Zeitraums aufgerufen werden. Diese Konfiguration würde dazu führen, dass Clients einen 429-Fehler erhalten, wenn diese Grenze erreicht wird. Das Problem bei dieser Art von Drosselung besteht darin, dass sie einem Client ermöglicht, alle Anforderungen zu beanspruchen, bevor ein anderer Client sie verwenden kann.

Beispiel: Der folgende Code zeigt eine Beispielkonfiguration, die für alle API-Vorgänge gilt. Der Grenzwert ist auf drei Aufrufe pro 15 Sekunden festgelegt:

<rate-limit calls="3" renewal-period="15" />

Alternativ kann diese Konfiguration verwendet werden, um einen bestimmten API-Vorgang als Ziel zu verwenden:

<rate-limit calls="number" renewal-period="seconds">
    <api name="API name" id="API id" calls="number" renewal-period="seconds" />
        <operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
    </api>
</rate-limit>

Beschränkung durch Schlüsseldrosselung

Die Schlüsseldrosselung ermöglicht die Konfiguration von verschiedenen Ratenbegrenzungen durch beliebige Clientanforderungswerte. Diese Art der Drosselung bietet eine bessere Möglichkeit, die Ratenbegrenzungen zu verwalten, da sie den Grenzwert auf einen angegebenen Anforderungsschlüssel (häufig die Client-IP-Adresse) anwendet. Der Client erhält die gleiche Bandbreite für den Aufruf der API:

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   counter-key="key value" />

Die folgende Beispielkonfiguration schränkt den Ratengrenzwert anhand der IP-Adresse einer Anforderung ein. Hier wird der Grenzwert auf 10 Aufrufe pro 60 Sekunden festgelegt:

<rate-limit-by-key calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"/>

Wenn Sie die Drosselung nach Schlüssel durchführen, müssen Sie bestimmte Anforderungen für die Ratenbegrenzung festlegen. In der folgenden Tabelle sind drei gängige Methoden zum Festlegen des Zählerschlüssels aufgeführt:

Wert BESCHREIBUNG
context.Request.IpAddress Durch Client-IP-Adresse beschränkte Raten
context.Subscription.Id Durch Abonnement-ID beschränkte Raten
context.Request.Headers.GetValue("My-Custom-Header-Value") Durch einen angegebenen Wert für den Clientanforderungsheader beschränkte Raten

Sie können festlegen, dass jede einzelne Client-IP eine eigene Bandbreite haben soll. In diesem Fall würden Sie context.Request.IpAddress verwenden. Vielleicht möchten Sie jedoch stattdessen, dass alle Anforderungen von einem bestimmten Domänennamen gedrosselt werden, da bestimmte Domänen viele API-Aufrufe erhalten. In diesem Fall würden Sie context.Request.Headers.GetValue("host") angeben und die Ratenbegrenzung durch die Domänen festlegen, von denen der Anruf durchgeführt wurde.

Hinweis

Die <rate-limit-by-key>-Richtlinie ist nicht verfügbar, wenn sich Ihr API Management-Gateway im Verbrauchstarif befindet. Sie können stattdessen <rate-limit> verwenden.