Aufrufrate nach Schlüssel begrenzen

GILT FÜR: Entwickler | Basic | Basic v2 | Standard | Standard v2 | Premium

Die rate-limit-by-key-Richtlinie verhindert API-Nutzungsspitzen auf Schlüsselbasis, indem sie die Aufrufrate auf eine angegebene Anzahl pro angegebenem Zeitraum beschränkt. Der Schlüssel kann einen beliebigen Zeichenfolgenwert aufweisen und wird in der Regel über einen Richtlinienausdruck angegeben. Optional kann eine inkrementelle Bedingung hinzugefügt werden, um anzugeben, welche Anforderungen für den Grenzwert gezählt werden sollen. Wenn diese Aufrufrate überschritten wird, empfängt der Aufrufer einen 429 Too Many Requests-Antwortstatuscode.

Informationen zu den Unterschieden zwischen Ratenbegrenzungen und Kontingenten finden Sie unter Ratenbegrenzungen und Kontingente.

Achtung

Da die Einschränkungsarchitektur verteilt ist, ist die Begrenzung der Rate nie ganz genau. Die Differenz zwischen der konfigurierten und der tatsächlichen Anzahl zugelassener Anforderungen variiert basierend auf Anforderungsvolumen und -rate, Back-End-Latenz und anderen Faktoren.

Hinweis

Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Das Portal unterstützt Sie bei der Konfiguration dieser Richtlinie durch einen formularbasierten, angeleiteten Editor. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.

Richtlinienanweisung

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   retry-after-header-name="custom header name, replaces default 'Retry-After'" 
                   retry-after-variable-name="policy expression variable name"
                   remaining-calls-header-name="header name"  
                   remaining-calls-variable-name="policy expression variable name"
                   total-calls-header-name="header name"/> 

Attribute

Attribut BESCHREIBUNG Erforderlich Standard
calls Die maximale Gesamtanzahl von Aufrufen, die während des in der renewal-period angegebenen Zeitraums zulässig sind. Richtlinienausdrücke sind zulässig. Ja
counter-key Der Schlüssel, der für die Ratenbegrenzungsrichtlinie verwendet werden soll. Für jeden Schlüsselwert wird ein einzelner Indikator für alle Bereiche verwendet, in denen die Richtlinie konfiguriert ist. Richtlinienausdrücke sind zulässig. Ja
increment-condition Dieser boolesche Ausdruck gibt an, ob die Anforderung auf die Ratenbegrenzung angerechnet werden soll (true). Richtlinienausdrücke sind zulässig. Nein
increment-count Die Zahl, um die der Zähler pro Anforderung erhöht wird. Richtlinienausdrücke sind zulässig. Nein 1
renewal-period Die Länge des gleitenden Fensters in Sekunden, in der die Anzahl zulässiger Anforderungen den in calls angegebenen Wert nicht überschreiten darf. Maximal zulässiger Wert: 300 Sekunden. Richtlinienausdrücke sind zulässig. Ja
retry-after-header-name Der Name eines benutzerdefinierten Antwort-Headers, dessen Wert das empfohlene Wiederholungsintervall in Sekunden ist, nachdem die angegebene Anrufrate überschritten wurde. Richtlinienausdrücke sind nicht zulässig. No Retry-After
retry-after-variable-name Der Name einer Richtlinienausdrucksvariablen, die das empfohlene Wiederholungsintervall in Sekunden speichert, nach dem die angegebene Aufrufrate überschritten wird. Richtlinienausdrücke sind nicht zulässig. Nein
remaining-calls-header-name Der Name einer Antwortheaders, dessen Wert nach jeder Richtlinienausführung die Anzahl der verbleibenden Aufrufe ist, die für den Zeitraum zulässig sind, der in renewal-period angegeben ist. Richtlinienausdrücke sind nicht zulässig. Nein
remaining-calls-variable-name Der Name einer Richtlinienausdrucksvariablen, in der nach jeder Richtlinienausführung die Anzahl der verbleibenden Aufrufe gespeichert wird, die für den Zeitraum zulässig sind, der in renewal-period angegeben ist. Richtlinienausdrücke sind nicht zulässig. Nein
total-calls-header-name Der Name eines Antwortheaders, dessen Wert der in calls angegebene Wert ist. Richtlinienausdrücke sind nicht zulässig. Nein

Verwendung

Hinweise zur Verwendung

  • Ratengrenzwerte in einem selbstgehosteten Gateway können so konfiguriert werden, dass sie lokal (zwischen Gatewayinstanzen über Clusterknoten hinweg) synchronisiert werden, z. B. über die Helm-Diagrammbereitstellung für Kubernetes oder mithilfe der Azure-Portal Bereitstellungsvorlagen. Ratengrenzwerte werden jedoch nicht mit anderen in der API Management-Instanz konfigurierten Gateway-Ressourcen synchronisiert, einschließlich des verwalteten Gateways in der Cloud. Weitere Informationen

Beispiel

Im folgenden Beispiel wird die Ratenbegrenzung von 10 Aufrufen pro 60 Sekunden anhand der IP-Adresse des Aufrufers bestimmt. Nach jeder Richtlinienausführung werden die verbleibenden Aufrufe, die im Zeitraum zulässig sind, in der Variablen remainingCallsPerIP gespeichert.

<policies>
    <inbound>
        <base />
        <rate-limit-by-key  calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Weitere Informationen und Beispiele zu dieser Richtlinie finden Sie unter Erweiterte Anforderungsbegrenzung mit Azure API Management.

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: