Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje

Co
Za pomocą zasady dotyczącej limitu ustalisz liczbę wiadomości z żądaniem, które serwer proxy interfejsu API zezwala wysyłać w określonym przedziale czasu, np. w ciągu minuty, godziny, dnia, tygodnia lub miesiąca. Możesz ustawić ten limit na taki sam dla wszystkich aplikacji uzyskujących dostęp do proxy interfejsu API, albo możesz ustawić go na podstawie:
- Produkt, który zawiera serwer proxy interfejsu API
- Aplikacja wysyłająca żądanie do interfejsu API
- Deweloper aplikacji
- wiele innych kryteriów.
Nie używaj limitu do ochrony przed ogólnymi wzrostami ruchu. W tym celu użyj zasady Spike Arrest. Zapoznaj się z zasadami dotyczącymi zatrzymywania treści.
Filmy
Te filmy wprowadzają zarządzanie limitem na podstawie zasad dotyczących limitu:
Wprowadzenie (Nowy Edge)
Wprowadzenie (Edge klasyczny)
Limit dynamiczny
Rozproszone i synchroniczne
Waga wiadomości
Kalendarz
Okno ruchome
Flexi
Limit warunkowy
Zmienne przepływu
Obsługa błędów
Przykłady
Te przykłady kodu zasad pokazują, jak rozpoczynać i kończyć okresy limitu:
Więcej informacji o limitach dynamicznych
<Quota name="CheckQuota"> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/> </Quota>
Limity dynamiczne umożliwiają skonfigurowanie jednej zasady dotyczącej limitu, która narzuca różne ustawienia limitu na podstawie informacji przekazywanych do tej zasady. Innym terminem na określenie ustawień limitu w tym kontekście jest „Plan usług”. Dynamiczna kwota sprawdza „Plan usługi” aplikacji, a następnie stosuje te ustawienia.
Uwaga: jeśli określisz zarówno wartość, jak i odniesienie elementu, pierwszeństwo ma odniesienie. Jeśli odwołanie nie zostanie rozwiązane w czasie wykonywania kodu, zostanie użyta wartość.
Podczas tworzenia produktu interfejsu API możesz opcjonalnie ustawić dozwoloną ilość limitu, jednostkę czasu i interwał. Ustawienie tych wartości w usłudze interfejsu API nie wymusza ich używania w interfejsie API proxy. Musisz też dodać do serwera proxy interfejsu API politykę dotyczącą limitów, która odczytuje te wartości. Więcej informacji znajdziesz w artykule Tworzenie usług API.
W przykładzie powyżej serwer proxy interfejsu API zawierający zasadę dotyczącą limitu korzysta z zasady o nazwie verify-api-key
, która weryfikuje klucz interfejsu API przekazany w żądaniu. Następnie zasada dotycząca limitu dostępności uzyskuje dostęp do zmiennych przepływu z zasady VerifyAPIKey, aby odczytać wartości limitu dostępności ustawione w usłudze interfejsu API. Więcej informacji o przepływie danych w procesie weryfikacji klucza interfejsu API znajdziesz w zasadach dotyczących weryfikacji klucza interfejsu API.
Inną opcją jest ustawienie atrybutów niestandardowych dla poszczególnych deweloperów lub aplikacji, a następnie odczytanie tych wartości w zasadach dotyczących limitu. Możesz na przykład ustawić różne wartości limitów dla poszczególnych deweloperów. W tym przypadku ustawiasz atrybuty niestandardowe dla dewelopera zawierające limit, jednostkę czasu i interwał. Następnie odwołuj się do tych wartości w zasadach dotyczących limitu, jak pokazano na poniższym przykładzie:
<Quota name="DeveloperQuota"> <Identifier ref="verifyapikey.verify-api-key.client_id"/> <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> </Quota>
W tym przykładzie używamy też zmiennych procesu VerifyAPIKey, aby odwoływać się do atrybutów niestandardowych określonych dla dewelopera.
Do ustawienia parametrów zasady dotyczącej limitu możesz użyć dowolnej zmiennej. Te zmienne mogą pochodzić z:
- Zmienne przepływu
- Właściwości usługi API, aplikacji lub dewelopera
- mapa klucz-wartość (KVM);
- nagłówek, parametr zapytania, parametr formularza itp.
Do każdego serwera proxy interfejsu API możesz dodać zasady dotyczące limitu, które odwołują się do tej samej zmiennej co wszystkie inne zasady dotyczące limitu w przypadku pozostałych serwerów proxy lub do zmiennych unikalnych dla tych zasad i serwera proxy.
Czas rozpoczęcia
<Quota name="QuotaPolicy" type="calendar"> <StartTime>2017-02-18 10:30:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
W przypadku limitu z wartością type
równą calendar
musisz zdefiniować jawną wartość <StartTime>
. Wartość czasu to czas GMT, a nie lokalny. Jeśli nie podasz wartości <StartTime>
dla zasady typu calendar
, Edge wyświetli błąd.
Licznik limitu dla każdej aplikacji jest odświeżany na podstawie wartości <StartTime>
, <Interval>
i <TimeUnit>
. W tym przykładzie limit zaczyna się odliczać 18 lutego 2017 r. o godzinie 10:30 czasu GMT i odświeża się co 5 godzin. Dlatego następne odświeżenie nastąpi 18 lutego 2017 r. o godz. 15:30 czasu GMT.
Licznik dostępu
<Quota name="QuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Serwer proxy interfejsu API ma dostęp do zmiennych przepływu ustawionych przez zasadę limitu. Do tych zmiennych przepływu w przekaźniku interfejsu API możesz mieć dostęp, aby wykonywać przetwarzanie warunkowe, monitorować zasadę, gdy zbliża się ona do limitu, zwracać bieżący licznik limitu do aplikacji lub z innych powodów.
Ponieważ dostęp do zmiennych przepływu dla zasady jest oparty na atrybucie name
zasad, w przypadku zasady o nazwie QuotaPolicy
możesz uzyskać dostęp do jej zmiennych przepływu w tej formie:
ratelimit.QuotaPolicy.allowed.count
: dozwolona liczba.ratelimit.QuotaPolicy.used.count
: bieżąca wartość licznika.ratelimit.QuotaPolicy.expiry.time
: czas UTC, w którym licznik się resetuje.
Dostępnych jest wiele innych zmiennych przepływu, do których możesz uzyskać dostęp, jak opisano poniżej.
Możesz na przykład użyć tej zasady przypisywania wiadomości, aby zwracać wartości zmiennych przepływu limitu jako nagłówków odpowiedzi:
<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars"> <AssignTo createNew="false" type="response"/> <Set> <Headers> <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header> <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header> <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Pierwsze żądanie
<Quota name="MyQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </Quota>
Użyj tego przykładowego kodu,aby narzucić limit 10 tys. wywołań na godzinę. Zasada resetuje licznik limitu na początku każdej godziny. Jeśli licznik osiągnie limit 10 tys. połączeń przed końcem godziny, połączenia powyżej tej liczby są odrzucane.
Jeśli np. licznik zaczyna się od 2017-07-08 07:00:00
, to wraca do 0 o 2017-07-08 08:00:00
(1 godzinę od czasu rozpoczęcia). Jeśli pierwsza wiadomość została odebrana o 2017-07-08 07:35:28
, a liczba wiadomości osiągnie 10 tys. przed 2017-07-08 08:00:00
, połączenia powyżej tej liczby będą odrzucane, dopóki ich liczba nie zostanie zresetowana na początku godziny.
Czas zresetowania licznika zależy od kombinacji reguł <Interval>
i <TimeUnit>
. Jeśli np. ustawisz wartość <Interval>
na 12, a <TimeUnit>
na godzinę, licznik będzie się resetować co 12 godzin.
Możesz ustawić <TimeUnit>
na minuty, godziny, dni, tygodnie lub miesiące.
Możesz odwoływać się do tej zasady w kilku miejscach w swoim interfejsie proxy API. Możesz na przykład umieścić ją w prefiltrze proxy, aby była wykonywana przy każdej prośbie. Możesz też umieścić go w kilku przepływach w serwerze proxy API. Jeśli używasz tej zasady w kilku miejscach w proxy, w przypadku każdego wystąpienia zasady jest używany jeden licznik.
Możesz też zdefiniować w proxy interfejsu API kilka zasad dotyczących limitu. Każda polityka dotycząca limitu ma własny licznik oparty na atrybucie name
tej polityki.
Ustaw identyfikator
<Quota name="QuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>2017-02-18 10:00:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Domyślnie zasada dotycząca limitu definiuje jeden licznik dla serwera proxy interfejsu API niezależnie od źródła żądania. Możesz też użyć atrybutu <Identifier>
z zasadą dotyczącą limitu, aby utrzymać osobne liczniki na podstawie wartości atrybutu <Identifier>
.
Na przykład za pomocą tagu <Identifier>
możesz zdefiniować osobne liczniki dla każdego identyfikatora klienta. W żądaniu wysłanym do serwera proxy aplikacja klienta przekazuje nagłówek zawierający wartość clientID
, jak pokazano w przykładzie powyżej.
W atrybucie <Identifier>
możesz podać dowolną zmienną przepływu. Możesz na przykład określić, że parametr zapytania o nazwie id
zawiera unikalny identyfikator:
<Identifier ref="request.queryparam.id"/>
Jeśli do weryfikacji klucza API używasz zasady VerifyAPIKey lub zasad OAuthV2 z tokenami OAuth, możesz użyć informacji z klucza API lub tokena, aby zdefiniować osobne liczniki dla tej samej zasady dotyczącej limitu. Na przykład tag <Identifier>
używa zmiennej przepływu client_id
z zasady o nazwie VerifyAPIKey o nazwie verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Każda niepowtarzalna wartość client_id
definiuje teraz własny licznik w zasadach dotyczących limitu.
Klasa
<Quota name="QuotaPolicy"> <Interval>1</Interval> <TimeUnit>day</TimeUnit> <Allow> <Class ref="request.header.developer_segment"> <Allow class="platinum" count="10000"/> <Allow class="silver" count="1000" /> </Class> </Allow> </Quota>
Limity limitów możesz ustawiać dynamicznie, korzystając z liczby limitów na podstawie klasy. W tym przykładzie limit kwoty jest określany przez wartość nagłówka developer_segment
przekazanego z każdym żądaniem. Ta zmienna może mieć wartość platinum
lub silver
. Jeśli nagłówek ma nieprawidłową wartość, zasada zwraca błąd naruszenia limitu.
Zasady dotyczące limitów
Limit to przydział wiadomości z prośbami, które serwer proxy interfejsu API może obsłużyć w określonym przedziale czasu, np. w ciągu minuty, godziny, dnia, tygodnia lub miesiąca. Zasady zawierają liczniki, które zliczają liczbę żądań otrzymanych przez serwer proxy interfejsu API. Ta funkcja umożliwia dostawcom interfejsów API nakładanie limitów na liczbę wywołań interfejsu API wykonywanych przez aplikacje w danym przedziale czasu. Za pomocą zasad dotyczących limitu możesz na przykład ograniczyć liczbę żądań wysyłanych przez aplikacje do 1 żądania na minutę lub 10 tys. żądań na miesiąc.
Jeśli na przykład limit wynosi 10 tys. wiadomości miesięcznie, ograniczanie szybkości rozpoczyna się po wysłaniu 10 tysięcznego wiadomości. Nie ma znaczenia,czy 10 tys. wiadomości zostało zliczonych pierwszego dnia czy ostatniego dnia tego okresu. Nie można wysyłać dodatkowych żądań, dopóki licznik limitu nie zostanie automatycznie zresetowany na koniec podanego przedziału czasu lub dopóki limit nie zostanie wyraźnie zresetowany za pomocą zasad resetowania limitu.
Różnica w przypadku limitu zwana SpikeArrest zapobiega nagłym wzrostom (lub skokom) natężenia ruchu, które mogą być spowodowane nagłym wzrostem wykorzystania, błędnymi klientami lub atakami złośliwymi. Więcej informacji o SpikeArrest znajdziesz w zasadach dotyczących SpikeArrest.
Limity dotyczą poszczególnych serwerów proxy interfejsu API i nie są rozkładane na nie. Jeśli np. masz 3 serwery proxy API w ramach usługi interfejsu API, jeden limit nie jest udostępniany wszystkim 3 serwerom, nawet jeśli wszystkie 3 serwery korzystają z tej samej konfiguracji zasady dotyczącej limitu.
Typy zasad dotyczących limitów
Zasady dotyczące limitów obsługują kilka różnych typów zasad: domyślne, calendar
, flexi
i rollingwindow
. Każdy typ określa, kiedy licznik limitu zaczyna się odliczać i kiedy się resetuje, jak pokazano w tabeli poniżej:
Jednostka czasu | Domyślny (lub pusty) reset | resetowanie kalendarza | flexi reset |
---|---|---|---|
minuta | Początek następnej minuty | 1 minuta po: <StartTime> |
1 minuta po pierwszym żądaniu |
godzina | Początek następnej godziny | 1 godzinę po: <StartTime> |
1 godzinę po pierwszym żądaniu |
dzień | Północ czasu uniwersalnego według Greenwich w bieżącym dniu. | 24 godziny po: <StartTime> |
24 godziny po pierwszym żądaniu |
tydzień | Niedziela o północy GMT na koniec tygodnia | 1 tydzień po: <StartTime> |
Tydzień po pierwszym żądaniu |
miesiąc | Północ czasu GMT ostatniego dnia miesiąca | miesiąc (28 dni) po: <StartTime> |
miesiąc (28 dni) od wysłania pierwszej prośby. |
W przypadku type="calendar"
musisz podać wartość <StartTime>
.
Tabela nie zawiera wartości typu rollingwindow
. Okno kumulacyjne
limity działają poprzez ustawienie rozmiaru „okna” limitu, np. 1 godziny lub 1 dnia. Gdy wpłynie nowe żądanie, zasady określają, czy w ostatnim „oknie” czasowym nie przekroczono limitu.
Możesz na przykład zdefiniować 2-godzinne okno, w którym dozwolisz na 1000 żądań. Nowe żądanie przychodzi o 16:45.Polityka oblicza limit na podstawie liczby żądań w ciągu ostatnich 2 godzin, czyli od 14:45. Jeśli w tym 2-godzinnym oknie nie przekroczysz limitu, żądanie zostanie zaakceptowane.
Minutę później, o 16:46, przychodzi kolejna prośba. Teraz zasada oblicza liczbę limitów od godziny 14:46, aby ustalić, czy limit został przekroczony.
W przypadku typu rollingwindow
licznik nigdy się nie resetuje, ale jest ponownie obliczany przy każdym żądaniu.
Liczniki limitów
Domyślnie zasada dotycząca limitu korzysta z jednego licznika niezależnie od tego, ile razy jest ona wywoływana w interfejsie API. Nazwa licznika limitu jest tworzona na podstawie atrybutu name
w regułach.
Na przykład tworzysz politykę dotyczącą limitu o nazwie MyQuotaPolicy
z limitem 5 żądań i umieszczasz ją w wielu przepływach (przepływ A, B i C) w interfejsie proxy API. Chociaż jest używany w kilku przepływach danych, utrzymuje jeden licznik, który jest aktualizowany przez wszystkie wystąpienia zasad:
- Przepływ A jest wykonywany -> MyQuotaPolicy jest wykonywany i jego licznik = 1
- Wykonywanie przepływu B -> zasada MyQuotaPolicy jest wykonywana i jej licznik = 2
- Przepływ A jest wykonywany -> MyQuotaPolicy jest wykonywany, a jego licznik = 3.
- Przepływ C jest wykonywany -> MyQuotaPolicy jest wykonywany i jego licznik = 4
- Przepływ A jest wykonywany > MyQuotaPolicy jest wykonywany i jego licznik = 5
Kolejne żądanie do dowolnego z tych 3 przepływów jest odrzucane, ponieważ licznik limitu osiągnął swój limit.
Używanie tej samej polityki dotyczącej limitów w więcej niż 1 miejscu w przepływie zapory API, co może nieumyślnie spowodować wyczerpanie limitu szybciej niż się spodziewasz, to antywzorzec opisany w książce The Book of Apigee Edge Antipatterns (Książka o antywzorcach Apigee Edge).
Możesz też zdefiniować w serwerze proxy interfejsu API wiele zasad dotyczących limitów i stosować inną zasadę w każdej ścieżce. Każda polityka dotycząca limitu ma własny licznik oparty na atrybucie name
tej polityki.
Możesz też użyć elementów <Class>
lub <Identifier>
w zasadzie dotyczącej limitu, aby zdefiniować w jednej zasadzie wiele unikalnych liczników. Dzięki tym elementom jedna zasada może utrzymywać różne liczniki na podstawie aplikacji wysyłającej żądanie, dewelopera aplikacji wysyłającego żądanie, identyfikatora klienta lub innego identyfikatora klienta itp. Więcej informacji o używaniu elementów <Class>
lub <Identifier>
znajdziesz w przykładach powyżej.
Notacja czasu
Wszystkie limity czasowe są ustawione na uniwersalny czas koordynowany (UTC).
Notacja czasu w przypadku limitu jest zgodna z międzynarodowym standardem ISO 8601.
Daty są definiowane jako rok, miesiąc i dzień w formacie YYYY-MM-DD
.
Na przykład 2015-02-04
oznacza 4 lutego 2015 r.
Godzina jest definiowana jako liczba godzin, minut i sekund w tym formacie:
hours:minutes:seconds
. Na przykład 23:59:59
oznacza czas 1 sekunda przed północą.
Pamiętaj, że do rozróżnienia 2 północy, które mogą być powiązane z 1 datą, dostępne są 2 notacje: 00:00:00
i 24:00:00
. Dlatego 2015-02-04
24:00:00
ma tę samą datę i godzinę co 2015-02-05 00:00:00
. Druga z nich jest zwykle preferowaną notacją.
Pobieranie ustawień limitu w ramach konfiguracji produktu interfejsu API
Limity limitów możesz ustawiać w konfiguracjach usług API. Te limity nie powodują automatycznego stosowania limitu. Zamiast tego możesz użyć ustawień limitu dla produktu w zasadach dotyczących limitu. Oto kilka zalet ustawienia limitu dla usługi na potrzeby zasad dotyczących limitów:
- Zasady dotyczące limitów mogą używać jednolitych ustawień we wszystkich serwerach proxy interfejsu API w danym interfejsie API.
- Możesz wprowadzać zmiany ustawień limitu w czasie wykonywania w przypadku usługi interfejsu API, a zasady dotyczące limitu, które odwołują się do tej wartości, będą automatycznie aktualizować wartości limitu.
Więcej informacji o używaniu ustawień limitu w usłudze interfejsu API znajdziesz w przykładzie „Dynamiczny limit” powyżej.
Informacje o konfigurowaniu usług interfejsu API z ograniczeniami dotyczącymi limitów znajdziesz w artykule Tworzenie usług interfejsu API.
Element referencyjny
Poniżej znajdziesz elementy i atrybuty, które możesz skonfigurować w ramach tej zasady. Pamiętaj, że niektóre kombinacje elementów wykluczają się wzajemnie lub nie są wymagane. Zapoznaj się ze wzorami dotyczącymi konkretnego zastosowania. Poniższe zmienne verifyapikey.VerifyAPIKey.apiproduct.*
są domyślnie dostępne, gdy w żądaniu używana jest zasada weryfikacji klucza API o nazwie „VerifyAPIKey” do sprawdzania klucza API aplikacji.
Wartości zmiennych pochodzą z ustawień limitu usługi interfejsu API, z którą powiązany jest klucz, zgodnie z opisem w artykule Pobieranie ustawień limitu z konfiguracji usługi interfejsu API.
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar"> <DisplayName>Quota 3</DisplayName> <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow> <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit> <StartTime>2017-7-16 12:00:00</StartTime> <Distributed>false</Distributed> <Synchronous>false</ Synchronous> <AsynchronousConfiguration> <SyncIntervalInSeconds>20</ SyncIntervalInSeconds> <SyncMessageCount>5</ SyncMessageCount> </AsynchronousConfiguration> <Identifier/> <MessageWeight/> </Quota>
Atrybuty <Quota>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
Te atrybuty są związane z tymi zasadami.
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
typ |
Określa, kiedy i jak licznik limitu sprawdza wykorzystanie limitu. Więcej informacji znajdziesz w zasadach dotyczących limitów. Jeśli pominiesz wartość Prawidłowe wartości:
|
kalendarz | Opcjonalny |
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> element
Używaj oprócz atrybutu name
do oznaczania zasady w
edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślny |
Nie dotyczy Jeśli pominiesz ten element, atrybut |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Element <Allow>
Określa limit liczby dla limitu. Jeśli licznik dla tej zasady osiągnie tę wartość, kolejne wywołania będą odrzucane, dopóki licznik się nie wyzeruje.
Poniżej znajdziesz 3 sposoby ustawienia elementu <Allow>
:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
Jeśli określisz zarówno parametr count
, jak i countRef
, pierwszeństwo będzie miał parametr countRef
. Jeśli countRef
nie zostanie rozwiązany w czasie wykonywania kodu, zostanie użyta wartość count
.
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalny |
Typ: | Liczba całkowita |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
liczba |
Użyj tego pola, aby określić liczbę wiadomości dla limitu. Na przykład wartość atrybutu |
2000 | Opcjonalny |
countRef |
Użyj tego parametru, aby określić zmienną przepływu zawierającą liczbę wiadomości dla limitu.
Atrybut |
brak | Opcjonalny |
Element <Allow>/<Class>
Element <Class>
umożliwia warunkowe nadawanie wartości elementom <Allow>
na podstawie wartości zmiennej przepływu. W przypadku każdego tagu podrzędnego <Allow>
elementu <Class>
zasada używa innego licznika.
Aby użyć elementu <Class>
, wskaż zmienną przepływu, używając atrybutu ref
w tagu <Class>
. Następnie Edge używa wartości zmiennej przepływu, aby wybrać jeden z tagów podrzędnych <Allow>
, który określi dozwoloną liczbę zasad. Edge dopasowuje wartość zmiennej przepływu do atrybutu class
tagu <Allow>
, jak pokazano poniżej:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
W tym przykładzie bieżący licznik limitu jest określany przez wartość parametru zapytania time_variable
przekazywanego z każdym żądaniem. Ta zmienna może mieć wartość peak_time
lub off_peak_time
. Jeśli parametr zapytania zawiera nieprawidłową wartość, zasady zwracają błąd naruszenia limitu.
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalny |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
ref |
Użyj tego parametru, aby określić zmienną przepływu zawierającą klasę limitu dla limitu. |
brak | Wymagane |
<Allow>/<Class>/<Allow> element
Element <Allow>
określa limit dla licznika limitu określonego przez element <Class>
. W przypadku każdego innego tagu podrzędnego <Allow>
elementu <Class>
zasada utrzymuje inny licznik.
Na przykład:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
W tym przykładzie zasada dotycząca limitu korzysta z 2 liczników limitu o nazwach peak_time
i off_peak_time
.
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalny |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
klasa |
Określa nazwę licznika limitu. |
brak | Wymagane |
liczba | Określa limit kwoty dla licznika. | brak | Wymagane |
Element <Interval>
Użyj tego parametru, aby określić liczbę całkowitą (np. 1, 2, 5, 60 itd.), która zostanie połączona z określonym parametrem TimeUnit
(minuty, godziny, dni, tygodnie lub miesiące), aby określić przedział czasu, w którym Edge oblicza wykorzystanie limitu.
Na przykład Interval
24
z TimeUnit
hour
oznacza, że limit zostanie obliczony w ciągu 24 godzin.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Domyślnie: | brak |
Obecność: | Wymagane |
Typ: | Liczba całkowita |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
ref |
Służy do określenia zmiennej przepływu zawierającej interwał dla limitu. |
brak | Opcjonalny |
Element <TimeUnit>
Użyj tego pola, aby określić jednostkę czasu obowiązującą w przypadku limitu.
Na przykład Interval
24
z TimeUnit
hour
oznacza, że limit zostanie obliczony w ciągu 24 godzin.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Domyślnie: | brak |
Obecność: | Wymagane |
Typ: |
Ciąg tekstowy. Wybierz |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
ref | Użyj tego polecenia, aby określić zmienną przepływu zawierającą jednostkę czasu dla limitu. ref ma pierwszeństwo przed jawną wartością odstępu. Jeśli ref nie zostanie rozwiązane w czasie wykonywania, zostanie użyta wartość. |
brak | Opcjonalny |
Element <StartTime>
Gdy wartość type
jest ustawiona na calendar,
, określa datę i godzinę, od której licznik limitu zacznie się odliczać, niezależnie od tego, czy aplikacje wysłały jakieś żądania.
Na przykład:
<StartTime>2017-7-16 12:00:00</StartTime>
Domyślnie: | brak |
Obecność: | Wymagane, gdy wartość type to calendar . |
Typ: |
Ciąg znaków w formacie daty i godziny ISO 8601. |
Element <Distributed>
Instalacja przeglądarki Edge może używać co najmniej 1 procesora wiadomości do przetwarzania żądań. Ustaw ten element na true
, aby określić, że zasada powinna utrzymywać centralny licznik i ciągle go synchronizować we wszystkich procesorach wiadomości. Przetwarzanie wiadomości może odbywać się w różnych strefach dostępności lub regionach.
Jeśli użyjesz wartości domyślnej false
, możesz przekroczyć limit, ponieważ liczba dla każdego procesora wiadomości nie jest współdzielona:
<Distributed>true</Distributed>
Aby mieć pewność, że liczniki są synchronizowane i aktualizowane przy każdym żądaniu, ustaw wartości <Distributed>
i <Synchronous>
na prawda:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
Domyślnie: | fałsz |
Obecność: | Opcjonalny |
Typ: | Wartość logiczna |
Element <Synchronous>
Ustaw na true
, aby zsynchronizować zliczanie rozproszonego limitu. Oznacza to, że zliczanie jest aktualizowane w tym samym czasie, gdy sprawdzany jest limit w żądaniu wysyłanym do interfejsu API. Ustaw na true
, jeśli chcesz, aby żadne wywołania interfejsu API nie przekraczały limitu.
Aby zaktualizować licznik limitu asynchronicznie, ustaw wartość false
. Oznacza to, że niektóre wywołania interfejsu API, które przekraczają limit, mogą być realizowane, w zależności od tego, kiedy licznik limitu w repozytorium centralnym jest aktualizowany asynchronicznie. Nie będziesz jednak mieć do czynienia z potencjalnymi problemami z wydajnością związanymi z aktualizacjami synchronicznymi.
Domyślny asynchroniczny interwał aktualizacji to 10 sekund. Aby skonfigurować to zachowanie asynchroniczne, użyj elementu AsynchronousConfiguration
.
<Synchronous>false</Synchronous>
Domyślnie: | fałsz |
Obecność: | Opcjonalny |
Typ: | Wartość logiczna |
Element <AsynchronousConfiguration>
Konfiguruje interwał synchronizacji między rozłożonymi na wiele serwerów licznikami limitu, gdy element konfiguracji zasad <Synchronous>
jest nieobecny lub obecny i ustawiony na false
.
Synchronizację możesz wykonać po upływie określonego czasu lub po osiągnięciu określonej liczby wiadomości, używając elementów podrzędnych SyncIntervalInSeconds
lub SyncMessageCount
.
Te opcje wzajemnie się wykluczają. Na przykład
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
lub
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Domyślnie: | SyncIntervalInSeconds = 10 sekund |
Obecność: | Opcjonalna; ignorowana, gdy <Synchronous> ma wartość true . |
Typ: |
Kompleks budowlany |
Element <AsynchronousConfiguration>/<SyncIntervalInSeconds>
Użyj tej opcji, aby zastąpić domyślne zachowanie, w którym asynchroniczne aktualizacje są wykonywane co 10 sekund.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
Interval synchronizacji musi wynosić co najmniej 10 sekund, zgodnie z opisem w artykule Limity.
Domyślnie: | 10 |
Obecność: | Opcjonalny |
Typ: |
Liczba całkowita |
<AsynchronousConfiguration>/<SyncMessageCount> element
Określa liczbę żądań w ramach wszystkich procesorów wiadomości Apigee między aktualizacjami limitu.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
W tym przykładzie określamy, że limit jest aktualizowany co 5 żądań w przypadku każdego procesora wiadomości Apigee Edge.
Domyślnie: | nie dotyczy |
Obecność: | Opcjonalny |
Typ: |
Liczba całkowita |
Element <Identifier>
Aby skonfigurować zasady w celu tworzenia unikalnych liczników na podstawie zmiennej przepływu, użyj elementu <Identifier>
.
Jeśli nie używasz tego elementu, zasada używa jednego licznika, który jest stosowany w przypadku limitu.
Ten element jest również omawiany w tym poście w społeczności Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.
<Identifier ref="verifyapikey.verify-api-key.client_id"/>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalny |
Typ: |
Ciąg znaków |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
ref |
Określa zmienną przepływu, która identyfikuje licznik do użycia w prośbie. Identyfikator może być nagłówkiem HTTP, parametrem zapytania, parametrem formularza lub treścią wiadomości, która jest unikalna dla każdej aplikacji, użytkownika aplikacji, dewelopera aplikacji, produktu interfejsu API lub innej cechy.
W niektórych okolicznościach ustawienia limitu muszą być pobierane, gdy nie ma dostępnego elementu |
Nie dotyczy | Opcjonalny |
Element <MessageWeight>
Użyj tego pola, aby określić wagę przypisaną do każdej wiadomości. Użyj wagi wiadomości, aby zwiększyć wpływ wiadomości żądania, które na przykład zużywa więcej zasobów obliczeniowych niż inne.
Możesz na przykład uznać, że żądania POST są dwa razy „cięższe” lub droższe niż żądania GET. Dlatego w przypadku metody POST ustawiasz wartość MessageWeight
na 2, a w przypadku metody GET – na 1. Możesz nawet ustawić wartość parametru MessageWeight
na 0, aby prośba nie wpływała na licznik. W tym przykładzie, jeśli limit wynosi 10 wiadomości na minutę, a MessageWeight
dla żądań POST wynosi 2
, limit będzie zezwalać na 5 żądań POST w dowolnym 10-minutowym interwale. Każde dodatkowe żądanie POST lub GET przed zresetowaniem licznika zostanie odrzucone.
Wartość reprezentująca MessageWeight
musi być określona przez zmienną przepływu. Można ją wyodrębnić z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON albo dowolnej innej zmiennej przepływu. Na przykład w nagłówku o nazwie weight
:
<MessageWeight ref="message_weight"/>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalny |
Typ: |
Liczba całkowita |
Zmienne przepływu
Gdy zadziała reguła dotycząca limitu, automatycznie wypełnią się te wstępnie zdefiniowane zmienne przepływu: Więcej informacji o zmiennych w Flow znajdziesz w artykule Informacje o zmiennych.
Zmienne | Typ | Uprawnienia | Opis |
---|---|---|---|
ratelimit.{policy_name}.allowed.count | Długie | Tylko do odczytu | Zwraca dozwoloną liczbę kont |
ratelimit.{policy_name}.used.count | Długie | Tylko do odczytu | Zwraca bieżącą ilość miejsca na dysku używaną w ramach limitu. |
ratelimit.{policy_name}.available.count | Długie | Tylko do odczytu | Zwraca liczbę dostępnych limitów w przedziale limitu |
ratelimit.{policy_name}.exceed.count | Długie | Tylko do odczytu | Zwraca 1 po przekroczeniu limitu. |
ratelimit.{policy_name}.total.exceed.count | Długie | Tylko do odczytu | Zwraca 1 po przekroczeniu limitu. |
ratelimit.{policy_name}.expiry.time | Długie | Tylko do odczytu |
Zwraca czas UTC w milisekundach, który określa, kiedy kończy się limit i rozpoczyna się nowy przedział limitu. Gdy typ zasad dotyczących limitu wynosi |
ratelimit.{policy_name}.identifier | Ciąg znaków | Tylko do odczytu | Zwraca odwołanie do identyfikatora (klienta) powiązanego z zasadami |
ratelimit.{policy_name}.class | Ciąg znaków | Tylko do odczytu | Zwraca klasę powiązaną z identyfikatorem klienta. |
ratelimit.{policy_name}.class.allowed.count | Długie | Tylko do odczytu | Zwraca dozwoloną liczbę jednostek dostępnych w ramach limitu określonego w klasie. |
ratelimit.{policy_name}.class.used.count | Długie | Tylko do odczytu | Zwraca wykorzystany limit w ramach klasy. |
ratelimit.{policy_name}.class.available.count | Długie | Tylko do odczytu | Zwraca liczbę dostępnych limitów w klasie. |
ratelimit.{policy_name}.class.exceed.count | Długie | Tylko do odczytu | Zwraca liczbę żądań, które przekraczają limit w klasie w bieżącym interwale limitu |
ratelimit.{policy_name}.class.total.exceed.count | Długie | Tylko do odczytu | Zwraca łączną liczbę żądań, które przekraczają limit na zajęciach, w przypadku wszystkich interwałów limitu, czyli jest to suma wartości class.exceed.count dla wszystkich interwałów limitu. |
ratelimit.{policy_name}.failed | Wartość logiczna | Tylko do odczytu |
Wskazuje, czy zasada się nie powiodła (prawda lub fałsz). |
Odniesienie do błędu
W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 | Występuje, jeśli element <Interval> nie jest zdefiniowany w zasadzie dotyczącej limitów. Ten element
jest wymagany i służy do określania przedziału czasu obowiązującego w odniesieniu do limitu. Przedział czasu
mogą być minutami, godzinami, dniami, tygodniami lub miesiącami, zgodnie z definicją za pomocą elementu <TimeUnit> . |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 | Występuje, jeśli element <TimeUnit> nie jest zdefiniowany w zasadzie dotyczącej limitów. Ten element
jest obowiązkowy i służy do określania jednostki czasu mającej zastosowanie do limitu. Przedział czasu
mogą być wyrażone w minutach, godzinach, dniach, tygodniach lub miesiącach. |
build |
policies.ratelimit.InvalidMessageWeight |
500 | Występuje, jeśli wartość elementu <MessageWeight> określona za pomocą zmiennej przepływu
jest nieprawidłowa (nie jest liczbą całkowitą). |
build |
policies.ratelimit.QuotaViolation |
500 | Przekroczono limit. | Nie dotyczy |
Błędy wdrażania
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidQuotaInterval |
Jeśli interwał limitu określony w elemencie <Interval> nie jest
liczba całkowita, wdrożenie serwera proxy interfejsu API się nie uda. Jeśli na przykład interwał limitu
określony to 0.1 w elemencie <Interval> , wdrożenie
Błąd serwera proxy interfejsu API.
|
build |
InvalidQuotaTimeUnit |
Jeśli jednostka czasu określona w elemencie <TimeUnit> nie jest obsługiwana,
wdrożenie serwera proxy interfejsu API się nie uda. Obsługiwane jednostki czasu to minute ,
hour , day , week i month .
|
build |
InvalidQuotaType |
Jeśli typ limitu określony przez atrybut type w <Quota>
element jest nieprawidłowy, wdrożenie serwera proxy interfejsu API się nie uda.
obsługiwane typy limitów to default , calendar , flexi i rollingwindow .
|
build |
InvalidStartTime |
Jeśli format godziny określony w elemencie <StartTime> to
jest nieprawidłowy, wdrożenie serwera proxy interfejsu API się nie uda. Prawidłowy format to yyyy-MM-dd HH:mm:ss ,
w formacie ISO 8601. Dla:
Jeśli na przykład czas określony w elemencie <StartTime> to
7-16-2017 12:00:00 , wdrożenie serwera proxy interfejsu API się nie uda.
|
build |
StartTimeNotSupported |
Jeśli określono element <StartTime> , którego typ limitu jest inny niż
calendar , wdrożenie serwera proxy interfejsu API się nie uda. Element <StartTime> to
obsługiwane tylko w przypadku typu limitu calendar . Jeśli na przykład ustawiony jest atrybut type
do flexi lub rolling window w elemencie <Quota> , a następnie
nie uda się wdrożyć serwera proxy interfejsu API.
|
build |
InvalidTimeUnitForDistributedQuota |
Jeśli element <Distributed> ma wartość true , a element <TimeUnit> ma wartość
second , wdrożenie serwera proxy interfejsu API się nie uda. Jednostka czasu second jest nieprawidłowa dla pola
w przypadku rozproszonego limitu. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
Jeśli wartość określona dla elementu <SyncIntervalInSeconds> w parametrze
<AsynchronousConfiguration> w zasadzie dotyczącej limitów ma wartość mniejszą niż 0, wartość
nie uda się wdrożyć serwera proxy interfejsu API. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
Jeśli wartość elementu <AsynchronousConfiguration> w zasadzie limitów jest ustawiona na true , która również
ma konfigurację asynchroniczną zdefiniowaną za pomocą elementu <AsynchronousConfiguration> , a następnie
nie uda się wdrożyć serwera proxy interfejsu API. |
build |
Zmienne błędów
Te zmienne są ustawiane, gdy ta zasada wywołuje błąd. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | ratelimit.QT-QuotaPolicy.failed = true |
Przykładowa odpowiedź na błąd
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Przykładowa reguła błędu
<FaultRules> <FaultRule name="Quota Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "QuotaViolation") </Condition> </Step> <Condition>ratelimit.Quota-1.failed=true</Condition> </FaultRule> </FaultRules>