Implementera hastighetsbegränsning i Azure API Management
Med hastighetsbegränsning kan du begränsa antalet API-anrop som en användare eller tjänst kan göra inom en viss tidsram. Hastighetsbegränsning hjälper dig att säkerställa rättvis användning och förhindrar att en enskild användare eller tjänst monopoliserar API-resurserna. Azure API Management (APIM) är ett bekvämt sätt att implementera hastighetsbegränsning för dina API:er.
Varför Azure API Management?
Azure API Management är en kraftfull och mångsidig molntjänst som hjälper organisationer att publicera API:er till externa, partnerbaserade och interna utvecklare. Den innehåller verktyg för att skydda, hantera och skala API-anrop. En av dess funktioner är att kontrollera hastighetsbegränsningen, vilket är användbart för att upprätthålla hälsotillståndet och tillförlitligheten för dina API:er.
Konfigurera hastighetsbegränsning i Azure API Management
Azure API Management använder principer för att framtvinga hastighetsbegränsning. Du kan definiera dessa principer i olika omfång: global, produkt eller API-specifik. Med den här flexibiliteten kan du anpassa hastighetsbegränsningen enligt api:ets krav och användningsmönster.
Innan du börjar implementera hastighetsbegränsning ska du bestämma hastighetsgränserna. Vilka gränser du anger beror på ditt API:s kapacitet och vilken trafik du förväntar dig. Vanliga gränser anges som ett antal anrop per sekund, minut eller timme. Du kan till exempel tillåta 1 000 samtal per minut per användare.
Om du vill definiera hastighetsbegränsningar för ditt API i Azure API Management använder du rate-limit
principerna eller rate-limit-by-key
. Den förra anger en gräns för alla användare, medan den senare tillåter gränser per identifierad nyckel (till exempel en prenumeration eller ett användar-ID).
Här är ett exempel på en princip som begränsar anropen till 1 000 per minut.
<policies>
<inbound>
<base />
<rate-limit calls="1000" renewal-period="60" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
När du överskrider det angivna antalet anrop skickar Azure API Management en statuskod på 429 för många begäranden, tillsammans med retry-after
svarshuvudet och ett meddelande som anger när du kan försöka igen.
HTTP/1.1 429 Too Many Requests
content-type: application/json
retry-after: 60
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 60 seconds."
}
Exponera information om hastighetsbegränsning i svarshuvuden
Som standardinställning exponerar Azure API Management inte information om hastighetsbegränsningar i svarshuvudena. Att inte kommunicera hastighetsgränser gör det svårt för appar att undvika att överskrida gränsen och begränsas. För att exponera information om hastighetsbegränsning utökar du rate-limit
principen med remaining-calls-header-name
och total-calls-header-name
egenskaperna.
<policies>
<inbound>
<base />
<rate-limit calls="1000" renewal-period="60" remaining-calls-header-name="ratelimit-remaining" total-calls-header-name="ratelimit-limit" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
När du anropar ditt API nu innehåller varje svar rubrikerna ratelimit-remaining
och ratelimit-limit
som kommunicerar hur många fler anrop API:et kan hantera innan gränsen överskrids.
Sammanfattning
Genom att implementera hastighetsbegränsning i Azure API Management kan du skapa robusta och skalbara API:er. Genom att använda hastighetsbegränsning kan du se till att ditt API hanterar användarna på ett tillförlitligt och effektivt sätt. Kom ihåg att nyckeln är att hitta rätt balans – för strikt, och du kan hindra användbarhet; för överseende och du riskerar att överbelasta ditt API. Med noggrann planering och kontinuerlig övervakning kan du uppnå den här balansen och upprätthålla en felfri API-miljö.