Begränsa anropsfrekvens efter nyckel
GÄLLER FÖR: Utvecklare | Grundläggande | Basic v2 | Standard | Standard v2 | Premie
Principen rate-limit-by-key
förhindrar api-användningstoppar per nyckel genom att begränsa anropsfrekvensen till ett angivet tal per angiven tidsperiod. Nyckeln kan ha ett godtyckligt strängvärde och tillhandahålls vanligtvis med hjälp av ett principuttryck. Valfritt inkrementsvillkor kan läggas till för att ange vilka begäranden som ska räknas mot gränsen. När den här samtalsfrekvensen överskrids får anroparen en 429 Too Many Requests
svarsstatuskod.
Information om skillnaden mellan hastighetsgränser och kvoter finns i Hastighetsgränser och kvoter.
Varning
På grund av begränsningsarkitekturens distribuerade karaktär är hastighetsbegränsningen aldrig helt korrekt. Skillnaden mellan det konfigurerade och det verkliga antalet tillåtna begäranden varierar beroende på begärandevolymen och hastigheten, svarstiden i serverdelen och andra faktorer.
Kommentar
Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. För att hjälpa dig att konfigurera den här principen tillhandahåller portalen en guidad, formulärbaserad redigerare. Läs mer om hur du anger eller redigerar API Management-principer.
Principuttryck
<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"/>
Attribut
Attribut | beskrivning | Obligatoriskt | Standardvärde |
---|---|---|---|
Samtal | Det maximala totala antalet anrop som tillåts för nyckelvärdet under tidsintervallet som anges i renewal-period . Principuttryck tillåts. |
Ja | Ej tillämpligt |
counter-key | Nyckeln som ska användas för principen för hastighetsbegränsning. För varje nyckelvärde används en enskild räknare för alla omfång där principen har konfigurerats. Principuttryck tillåts. | Ja | Ej tillämpligt |
increment-condition | Det booleska uttrycket som anger om begäran ska räknas mot frekvensen (true ). Principuttryck tillåts. |
Nej | Ej tillämpligt |
increment-count | Antalet som räknaren ökas med per begäran. Principuttryck tillåts. | Nej | 1 |
förnyelseperiod | Längden i sekunder för skjutfönstret där antalet tillåtna begäranden inte ska överskrida det värde som anges i calls . Högsta tillåtna värde: 300 sekunder. Principuttryck tillåts. |
Ja | Ej tillämpligt |
retry-after-header-name | Namnet på en anpassad svarsrubrik vars värde är det rekommenderade återförsöksintervallet i sekunder efter att den angivna anropsfrekvensen har överskridits för nyckelvärdet. Principuttryck tillåts inte. | Nej | Retry-After |
retry-after-variable-name | Namnet på en principuttrycksvariabel som lagrar det rekommenderade återförsöksintervallet i sekunder efter att den angivna anropsfrekvensen har överskridits för nyckelvärdet. Principuttryck tillåts inte. | Nej | Ej tillämpligt |
remaining-calls-header-name | Namnet på en svarsrubrik vars värde efter varje principkörning är antalet återstående anrop som tillåts för nyckelvärdet i tidsintervallet som anges i renewal-period . Principuttryck tillåts inte. |
Nej | Ej tillämpligt |
remaining-calls-variable-name | Namnet på en principuttrycksvariabel som efter varje principkörning lagrar antalet återstående anrop som tillåts för nyckelvärdet i tidsintervallet som anges i renewal-period . Principuttryck tillåts inte. |
Nej | Ej tillämpligt |
total-calls-header-name | Namnet på en svarsrubrik vars värde är det värde som anges i calls . Principuttryck tillåts inte. |
Nej | Ej tillämpligt |
Användning
- Principavsnitt: inkommande
- Principomfattningar: global, arbetsyta, produkt, API, åtgärd
- Gatewayer: klassisk, v2, lokalt installerad, arbetsyta
Användningsanteckningar
- API Management använder en enskild räknare för varje
counter-key
värde som du anger i principen. Räknaren uppdateras i alla omfång där principen har konfigurerats med det nyckelvärdet. Om du vill konfigurera separata räknare i olika omfång (till exempel ett specifikt API eller en specifik produkt) anger du olika nyckelvärden i de olika omfången. Du kan till exempel lägga till en sträng som identifierar omfånget till värdet för ett uttryck. - Frekvensgränsantal i en lokalt installerad gateway kan konfigureras för att synkronisera lokalt (bland gatewayinstanser mellan klusternoder), till exempel via Helm-diagramdistribution för Kubernetes eller med hjälp av Azure Portal distributionsmallar. Frekvensgränsantal synkroniseras dock inte med andra gatewayresurser som konfigurerats i API Management-instansen, inklusive den hanterade gatewayen i molnet. Läs mer
Exempel
I följande exempel styrs hastighetsgränsen på 10 anrop per 60 sekunder av anroparens IP-adress. Efter varje principkörning lagras de återstående anrop som tillåts för anroparens IP-adress under tidsperioden i variabeln remainingCallsPerIP
.
<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>
Mer information och exempel på den här principen finns i Avancerad begränsning av begäranden med Azure API Management.
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Skapa principer med Microsoft Copilot i Azure