Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Co
Użyj zasady dotyczącej limitów, aby skonfigurować liczbę komunikatów żądań, na które zezwala serwer proxy interfejsu API okres, np. minuta, godzina, dzień, tydzień lub miesiąc. Możesz ustawić limit na tak samo w przypadku wszystkich aplikacji korzystających z serwera proxy interfejsu API. Możesz też ustawić limit na podstawie tych kryteriów:
- Usługa zawierająca serwer proxy interfejsu API
- Aplikacja żądająca interfejsu API
- Deweloper aplikacji
- Wiele innych kryteriów
Nie używaj limitu w celu zabezpieczenia się przed ogólnym wzrostem natężenia ruchu. Do tego celu użyj Spike Arrest . Zobacz Spike Arest .
Filmy
W tych filmach omówiono zarządzanie limitami za pomocą zasad dotyczących limitów:
Wprowadzenie (nowa wersja Edge)
Wprowadzenie (Classic Edge)
Limit dynamiczny
Rozproszone i Synchroniczny
Waga wiadomości
Kalendarz
Okno zwijane
Flexi
Limit warunkowy
Zmienne przepływu
Obsługa błędów
Przykłady
Poniższe przykłady kodu zasad pokazują, jak rozpocząć i zakończyć okres obowiązywania limitu przez:
Bardziej dynamiczny limit
<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 limitów, która wymusza różne limity na podstawie informacji przekazanych do zasady dotyczącej limitów. Inny termin dotyczący ustawień limitów w usłudze ten kontekst to „Abonament usługi”. Dynamiczny limit sprawdza „Abonament” a potem wymusza stosowanie tych ustawień.
Uwaga: jeśli określisz zarówno wartość, jak i odwołanie do elementu, to odwołanie ma priorytet. Jeśli odwołanie nie jest rozwiązywane w czasie działania, wartość to .
Na przykład podczas tworzenia usługi API możesz opcjonalnie ustawić dozwolony limit (limit, jednostka czasu i odstęp). Jednak ustawienie tych wartości w usłudze API nie spowoduje wymuszać ich użycie na serwerze proxy API. Musisz również dodać zasadę limitów do serwera proxy interfejsu API, który odczytuje te wartości. Zapoznaj się z sekcją Tworzenie interfejsu API .
W powyższym przykładzie serwer proxy interfejsu API zawierający zasadę limitów używa klucza VerifyAPIKey
o nazwie verify-api-key
, aby zweryfikować klucz interfejsu API przekazany w żądaniu.
Zasada limitów uzyskuje dostęp do zmiennych przepływu z zasady VerifyAPIKey, aby odczytywać limit
wartości ustawionych w usłudze API. Więcej informacji o zmiennych przepływu VerifyAPIKey znajdziesz w artykule Sprawdzanie zasad klucza interfejsu API.
Możesz też ustawić atrybuty niestandardowe dla poszczególnych deweloperów lub aplikacji, a następnie te wartości w zasadzie limitów. Załóżmy, że chcesz ustawić różne limity na Google Play. W tym przypadku ustawiasz atrybuty niestandardowe u programisty, które zawierają limit. jednostkę czasu i przedział czasu. Następnie możesz odwoływać się do tych wartości w zasadzie dotyczącej limitów, jak pokazano poniżej:
<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żyto też zmiennych przepływu VerifyAPIKey do odwoływania się do atrybutów niestandardowych. na poziomie deweloperskim.
Do ustawiania parametrów zasady dotyczącej limitów możesz używać dowolnej zmiennej. Te zmienne mogą źródło:
- Zmienne przepływu
- Właściwości usługi API, aplikacji lub dewelopera
- Mapa klucz-wartość (KVM)
- Nagłówek, parametr zapytania, parametr formularza itp.
Dla każdego serwera proxy interfejsu API możesz dodać zasadę limitów, która odwołuje się do tej samej zmiennej co wszystkich innych zasad dotyczących limitów we wszystkich innych serwerach proxy albo zasada dotycząca limitów może odnosić się do unikalne dla danej zasady 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 type
ustawionym na calendar
musisz zdefiniować
jawna wartość <StartTime>
. Wartość czasu jest podana według czasu GMT (nie czasu lokalnego)
obecnie się znajdujesz. Jeśli nie podasz wartości <StartTime>
dla zasady danego typu
calendar
, Edge powoduje błąd.
Licznik limitu dla każdej aplikacji jest odświeżany na podstawie tych zasad: <StartTime>
,
<Interval>
i <TimeUnit>
wartości. Do tego celu
Na przykład Limit zaczyna liczyć o 10:30 czasu GMT 18 lutego 2017 roku i jest odświeżany co
5 godzin. Dlatego najbliższa aktualizacja odbędzie się 18 lutego 2017 roku o godzinie 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ę dotyczącą limitów. Masz dostęp do: te zmienne procesu na serwerze proxy interfejsu API w celu przeprowadzania przetwarzania warunkowego, należy monitorować zasadę gdy zbliży się do limitu, zwróć bieżący licznik limitu do aplikacji lub .
Ponieważ dostęp do zmiennych przepływu dla zasady zależy od zasad
name
, w przypadku powyższej zasady o nazwie QuotaPolicy
wartość
możesz uzyskać dostęp do jego zmiennych przepływu w formacie:
ratelimit.QuotaPolicy.allowed.count
: dozwolona liczba.ratelimit.QuotaPolicy.used.count
: bieżąca wartość licznika.ratelimit.QuotaPolicy.expiry.time
: czas UTC, kiedy licznik jest resetowany.
Istnieje 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 AssignMessage, aby zwrócić wartości pola Limit zmienne przepływu jako nagłówki 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 wymusić limit 10 000 wywołań na godzinę. Zasada się resetuje licznika przydziału widoczny u góry każdej godziny. Jeśli licznik połączeń osiągnie limit 10 000 połączeń przed końcem godziny połączenia powyżej 10 000 są odrzucane.
Jeśli np. licznik zaczyna się od 2017-07-08 07:00:00
, to później się resetuje do
0 o 2017-07-08 08:00:00
(1 godzina od godziny rozpoczęcia). Jeśli pierwsza wiadomość to
odebrane o 2017-07-08 07:35:28
,a liczba wiadomości osiągnie 10 000
przed 2017-07-08 08:00:00
wywołania powyżej tej liczby są odrzucane do
licznik jest resetowany w górnej części godziny.
Czas resetowania licznika jest oparty na kombinacji parametrów <Interval>
i
<TimeUnit>
Jeśli na przykład ustawisz <Interval>
na
12 przez <TimeUnit>
godzinę, a potem licznik jest resetowany co 12 godzin.
Możesz ustawić <TimeUnit>
na minutę, godzinę, dzień, tydzień lub miesiąc.
Możesz odwoływać się do tych zasad w różnych miejscach serwera proxy interfejsu API. Możesz na przykład: umieść go na serwerze proxy PreFlow, aby był wykonywany przy każdym żądaniu. Możesz też umieścić go w wielu przepływach w serwerze proxy API. Jeśli korzystasz z tej zasady w wielu miejscach w serwera proxy, utrzymuje jeden licznik, który jest aktualizowany przez wszystkie instancje zasady.
Możesz też zdefiniować wiele zasad dotyczących limitów na serwerze proxy interfejsu API. Każda zasada dotycząca limitów
utrzymuje własny licznik zdarzeń na podstawie atrybutu name
tej zasady.
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 limitów definiuje jeden licznik dla serwera proxy interfejsu API, niezależnie od
pochodzenie żądania. Możesz też użyć atrybutu <Identifier>
z zasadą limitu, która pozwala utrzymywać osobne liczniki na podstawie wartości
<Identifier>
.
Na przykład za pomocą tagu <Identifier>
możesz zdefiniować osobne liczniki dla:
każdego identyfikatora klienta. W żądaniu do serwera proxy aplikacja kliencka przekazuje nagłówek zawierający
clientID
, jak widać w przykładzie powyżej.
W atrybucie <Identifier>
możesz podać dowolną zmienną przepływu. Dla:
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 interfejsu API używasz zasad VerifyAPIKey lub zasad OAuthV2
przy użyciu tokenów OAuth możesz użyć informacji w kluczu API lub tokenie, aby zdefiniować
dla tej samej zasady dotyczącej limitów. Na przykład:
Tag <Identifier>
korzysta ze zmiennej przepływu client_id
zmiennej
Zasada 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 ramach 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 za pomocą wartości limitów na podstawie klas. W tym przykładzie
limit jest określany na podstawie wartości developer_segment
przekazywane z każdym żądaniem. Ta zmienna może mieć wartość platinum
lub silver
. Jeśli nagłówek zawiera nieprawidłową wartość, zasada zwraca limit
błąd związany z naruszeniem zasad.
Informacje o zasadzie limitów
Limit to przydział komunikatów dotyczących żądań, które serwer proxy interfejsu API może obsłużyć w danym okresie. takie jak minuta, godzina, dzień, tydzień lub miesiąc. Zasada posiada liczniki, które liczą liczbę żądań odbieranych przez serwer proxy interfejsu API. Ta funkcja pozwala dostawcom interfejsów API egzekwować limity na liczbę wywołań interfejsu API przez aplikacje w określonym przedziale czasu. Za pomocą dostępnych zasad dotyczących limitów możesz na przykład ograniczyć do 1 żądania na minutę lub do 10 tys. żądań miesięcznie.
Jeśli na przykład limit jest zdefiniowany jako 10 000 wiadomości miesięcznie, ograniczenie szybkości rozpoczyna się po dziesiąta tysięczna wiadomość. Nie ma znaczenia,czy 10 000 wiadomości zostało zliczonych dnia albo ostatniego dnia danego okresu; dodatkowe żądania nie są dozwolone do czasu licznika limitów jest automatycznie resetowany po zakończeniu określonego przedziału czasu lub dopóki limit nie zostanie wyraźnie określony resetuj za pomocą opcji Resetuj limit .
Odmiana limitu o nazwie SpikeArrest zapobiega gwałtownym wzrostom natężenia ruchu, które mogą może być spowodowane nagłym wzrostem liczby użytkowników, błędnymi klientami lub złośliwymi atakami. Więcej Więcej informacji na temat SpikeArrest znajdziesz w zasadach dotyczących aresztowania SpikeArrest.
Limity dotyczą poszczególnych serwerów proxy interfejsów API i nie są rozłożone między serwery proxy interfejsu API. Przykład: Jeśli w usłudze API masz 3 serwery proxy interfejsu API, pojedynczy limit nie będzie współużytkowany przez wszystkie 3 z nich nawet jeśli wszystkie 3 korzystają z tej samej konfiguracji zasad limitów.
Typy zasad dotyczących limitów
Zasada limitów obsługuje kilka różnych typów zasad: domyślne, calendar
,
flexi
i rollingwindow
. Każdy typ określa, kiedy licznik limitu
rozpoczyna się i kiedy jest resetowany, jak w poniższej tabeli:
Jednostka czasu | Resetowanie domyślne (lub zerowe) | resetowanie kalendarza | Flexi reset |
---|---|---|---|
minuta | Początek następnej minuty | Minutę po: <StartTime> |
Minutę po pierwszym żądaniu |
godz. | Początek następnej godziny | Godzinę po: <StartTime> |
Godzinę po pierwszym żądaniu |
dzień | Północ czasu GMT bieżącego dnia | 24 godziny po: <StartTime> |
24 godziny po pierwszym żądaniu |
tydzień | Niedziela o północy czasu GMT, koniec tygodnia | Tydzień po: <StartTime> |
Tydzień po pierwszej prośbie |
miesiąc | Północ (GMT) ostatniego dnia miesiąca | Miesiąc (28 dni) po: <StartTime> |
Miesiąc (28 dni) od pierwszej prośby |
W polu type="calendar"
musisz podać wartość
<StartTime>
Tabela nie zawiera wartości typu rollingwindow
. Okres obserwacji
działają, ustawiając rozmiar „okna” limitu, na przykład na godzinę lub jeden dzień. Gdy
pojawi się nowe żądanie, zasada określa, czy limit został przekroczony w przeszłości
„okno” czasu.
Na przykład zdefiniujesz 2-godzinne okno, które zezwala na wysłanie 1000 żądań. Nowa prośba przychodzi o 16:45.Zgodnie z zasadami oblicza limit dla okresu 2-godzinnego, czyli liczbę żądań od godziny 14:45. Jeśli limit nie został przekroczony w dwie godziny, wtedy żądanie jest dozwolone.
Minutę później, o 16:46, przychodzi kolejna prośba. Teraz zasada oblicza od godziny 14:46, aby sprawdzić, czy limit został przekroczony.
W przypadku typu rollingwindow
licznik nigdy nie jest resetowany, ale jest
przeliczane dla każdego żądania.
Omówienie liczników limitów
Domyślnie zasada dotycząca limitów przechowuje jeden licznik niezależnie od tego, ile razy
do niego w serwerze proxy interfejsu API. Nazwa licznika limitów jest oparta na danych
atrybut name
zasady.
Możesz na przykład utworzyć zasadę limitów o nazwie MyQuotaPolicy
z limitem wynoszącym 5
i umieszczać ją w kilku przepływach (Przepływ A, B i C) na serwerze proxy API. Mimo że jest to
jest używany w wielu przepływach, utrzymuje jeden licznik, który jest aktualizowany przez wszystkie instancje
zasady:
- Przepływ A jest wykonywany -> Wykonywana jest zasada MyLimitPolicy, a jej licznik wynosi 1
- Wykonywany jest przepływ B -> Wykonywana jest zasada MyLimitPolicy, a jej licznik wynosi 2
- Przepływ A jest wykonywany -> Wykonywana jest zasada MyLimitPolicy, a jej licznik wynosi 3
- Proces C jest wykonywany -> Wykonywana jest zasada MyLimitPolicy, a jej licznik wynosi 4
- Przepływ A jest wykonywany -> Wykonywana jest zasada MyLimitPolicy, a jej licznik wynosi 5
Następne żądanie do dowolnego z 3 przepływów zostało odrzucone, ponieważ osiągnięto limit jej granicach.
Ta sama zasada dotycząca limitów w więcej niż jednym miejscu w procesie serwera proxy interfejsu API, która może nieumyślnie powoduje wyczerpanie limitu szybciej niż oczekiwano, to antywzorzec opisany w The Book of Apigee Edge Antipatterns (Książka o antywzorcach Apigee Edge).
Możesz też zdefiniować wiele zasad dotyczących limitów na serwerze proxy interfejsu API i użyć
zasady obowiązują w przypadku każdego procesu. Każda zasada dotycząca limitów zachowuje własny licznik,
atrybut name
zasady.
Możesz też skorzystać z
Elementy <Class>
lub <Identifier>
w
zasady limitów do definiowania wielu unikalnych liczników w ramach jednej zasady. Za pomocą tych
elementów, jedna zasada może utrzymywać różne liczniki w zależności od aplikacji wysyłającej żądanie.
identyfikator klienta lub inny identyfikator klienta, który przesłał żądanie aplikacji, oraz inne dane. Zobacz
powyższych przykładów.
Elementy <Class>
lub <Identifier>
.
Zapis czasu
Wszystkie limity czasu są ustawione na uniwersalny limit koordynowany Czas (UTC).
Format czasu przydziału jest zgodny z międzynarodowym, standardowym zapisem daty określonym w językach międzynarodowych Standardowy ISO 8601.
Daty definiuje się jako rok, miesiąc i dzień w takim formacie: YYYY-MM-DD
.
Na przykład 2015-02-04
oznacza datę 4 lutego 2015 r.
Pora dnia jest określana jako godziny, minuty i sekundy w takim formacie:
hours:minutes:seconds
Na przykład 23:59:59
oznacza godzinę,
sekundę przed północą.
Pamiętaj, że dla00:00:00
24:00:00
rozróżnienie dwóch północy, które można powiązać z jedną datą. Dlatego 2015-02-04
24:00:00
to ta sama data i godzina co 2015-02-05 00:00:00
. To drugie
zwykle jest to preferowany zapis.
Pobieram ustawienia limitów z konfiguracji usługi API
Limity możesz ustawić w konfiguracjach usług API. Limity te nie są automatycznie wyegzekwuj limit. Zamiast tego możesz odwoływać się do ustawień limitów produktów w zasadach dotyczących limitów. Oto kilka zalety ustawienia limitu w usłudze, aby można było się odwoływać do zasad dotyczących limitów:
- Zasady dotyczące limitów mogą stosować jednolite ustawienie dla wszystkich serwerów proxy API w usłudze API.
- Możesz zmieniać ustawienia limitu w usłudze API oraz zasady dotyczące limitów w czasie działania aplikacji które odwołują się do wartości, automatycznie zaktualizowane wartości limitów.
Aby dowiedzieć się więcej o używaniu ustawień limitów z usługi API, zapoznaj się z sekcją „Limit dynamiczny” powyżej.
Informacje o konfigurowaniu usług API z limitami znajdziesz w artykule Tworzenie usług API.
Odwołanie do elementu
Poniżej znajdziesz elementy i atrybuty, które możesz skonfigurować w tej zasadzie. Pamiętaj, że niektóre elementy
kombinacje wzajemnie się wykluczają lub nie są wymagane. Zapoznaj się z przykładami dotyczącymi konkretnego zastosowania.
Poniższe zmienne (verifyapikey.VerifyAPIKey.apiproduct.*
) są domyślnie dostępne, gdy
zasada weryfikacji klucza interfejsu API o nazwie „VerifyAPIKey” jest używany do sprawdzenia klucza interfejsu API aplikacji w żądaniu.
Wartości zmiennych pochodzą z ustawień limitu w usłudze API, z którą powiązany jest klucz
zgodnie z opisem w sekcji Pobieranie ustawień limitów z usługi 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>
<Quota> atrybuty
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
Poniższe atrybuty są charakterystyczne dla tej zasady.
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
typ |
Umożliwia określenie, kiedy i w jaki sposób licznik limitów sprawdza wykorzystanie limitu. Zobacz Więcej informacji znajdziesz w artykule Typy zasad limitów. Jeśli pominiesz wartość Prawidłowe wartości to m.in.:
|
kalendarz | Opcjonalnie |
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 |
<Allow> element
Określa limit liczby elementów. Jeśli licznik dotyczący tej zasady osiągnie ten limit , kolejne wywołania będą odrzucane, dopóki licznik nie zostanie zresetowany.
Poniżej widać 3 sposoby ustawiania 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 podasz zarówno count
, jak i countRef
, countRef
otrzymuje priorytet. Jeśli countRef
nie rozwiązuje problemu w czasie działania, wartość
Używana jest wartość count
.
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Liczba całkowita |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
liczba |
Umożliwia określenie liczby wiadomości w ramach limitu. Na przykład wartość atrybutu |
2000 | Opcjonalnie |
countRef |
Umożliwia określenie zmiennej przepływu zawierającej liczbę wiadomości w ramach limitu.
Atrybut |
brak | Opcjonalnie |
<Allow>/<Class> element
Element <Class>
umożliwia warunkowanie wartości
elementu <Allow>
na podstawie wartości zmiennej Flow. Dla:
każdy tag podrzędny <Allow>
tagu <Class>
,
zasady obsługują inny licznik.
Aby użyć elementu <Class>
, określ zmienną przepływu za pomocą atrybutu
ref
do tagu <Class>
. Edge następnie używa wartości atrybutu
zmiennej przepływu, aby wybrać jeden z <Allow>
tagów podrzędnych i określić dozwolone
dla zasady. Krawędź dopasowuje wartość zmiennej przepływu do wartości class
w tagu <Allow>
, jak widać 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 na podstawie wartości
time_variable
parametr zapytania przekazywany z każdym żądaniem. Ta zmienna może mieć wartość
z peak_time
lub off_peak_time
. Jeśli parametr zapytania zawiera nieprawidłową wartość
, zasada zwraca błąd naruszenia limitu.
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
odsyłacz |
Umożliwia określenie zmiennej przepływu zawierającej klasę limitu. |
brak | Wymagane |
<Allow>/<Class>/<Allow> element
Element <Allow>
określa limit licznika limitów
zdefiniowane przez element <Class>
. Dla każdej wartości
inny tag podrzędny <Allow>
tagu <Class>
,
zachowuje 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 limitów utrzymuje 2 liczniki limitów o nazwie
z peak_time
i off_peak_time
.
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
klasa |
Definiuje nazwę licznika limitów. |
brak | Wymagane |
liczba | Określa limit licznika. | brak | Wymagane |
<Interval> element
Umożliwia określenie liczby całkowitej (na przykład 1, 2, 5, 60 itd.), która zostanie sparowana z
TimeUnit
(minuta, godzina, dzień, tydzień lub miesiąc) w celu określenia czasu
okresu, w którym Edge oblicza wykorzystanie limitu.
Na przykład Interval
o wartości 24
z
TimeUnit
o wartości hour
oznacza, że limit będzie
obliczonych w ciągu 24 godzin.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Domyślne: | brak |
Obecność: | Wymagane |
Typ: | Liczba całkowita |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
odsyłacz |
Służy do określania zmiennej przepływu zawierającej interwał dla
limit miejsca na dane. |
brak | Opcjonalnie |
<TimeUnit> element
Umożliwia określenie jednostki czasu mającej zastosowanie do limitu.
Na przykład Interval
o wartości 24
z
TimeUnit
o wartości hour
oznacza, że limit będzie
obliczonych w ciągu 24 godzin.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Domyślne: | brak |
Obecność: | Wymagane |
Typ: |
Ciąg tekstowy. Wybierz spośród |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
odsyłacz | Umożliwia określenie zmiennej przepływu zawierającej jednostkę czasu trwania limitu. ref
ma pierwszeństwo przed określoną wartością odstępu. Jeśli ref
nie zostanie rozwiązany w czasie działania, używana jest wartość. |
brak | Opcjonalnie |
<StartTime> element
Gdy type
ma wartość calendar,
, określa datę
i godzinę, o której licznik limitów rozpocznie zliczanie, niezależnie od tego, czy zostały wysłane jakieś żądania
z aplikacji.
Jeśli ustawiono wartość type
, musisz podać atrybut StartTime
do calendar,
nie można użyć odwołania do zmiennej przepływu,
jeśli nie ustawisz żadnej wartości type
, otrzymasz wartość StartTime
,
.
Na przykład:
<StartTime>2017-7-16 12:00:00</StartTime>
Domyślne: | brak |
Obecność: | Wymagany, gdy type ma wartość calendar . |
Typ: |
Ciąg znaków w formacie ISO 8601. format daty i godziny. |
<Rozproszone> element
Instalacja Edge może wymagać użycia jednego lub kilku procesorów wiadomości do przetwarzania żądań. Ustaw
do true
, aby wskazać, że zasada powinna utrzymywać centralny element
i stale synchronizować go przez wszystkie procesory wiadomości. Podmioty przetwarzające wiadomości
mogą znajdować się w strefach dostępności lub regionach.
Jeśli używasz wartości domyślnej, która wynosi false
, limit może zostać przekroczony, ponieważ
liczba dla każdego procesora wiadomości nie jest udostępniana:
<Distributed>true</Distributed>
Aby zagwarantować synchronizację liczników i ich aktualizację przy każdym żądaniu, ustaw
<Distributed>
i <Synchronous>
mają wartość prawda:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
Domyślne: | fałsz |
Obecność: | Opcjonalnie |
Typ: | Wartość logiczna |
<Synchronous> element
Ustaw wartość true
, aby synchronicznie aktualizować licznik limitu rozproszonego. Ten
oznacza, że aktualizacja licznika jest przeprowadzana w tym samym czasie, gdy limit jest sprawdzany w żądaniu
do interfejsu API. Ustaw jako true
, jeśli nie chcesz zezwalać na używanie żadnego interfejsu API
przekracza limit.
Ustaw wartość false
, aby asynchronicznie aktualizować licznik limitu. Oznacza to, że
że jest możliwe, że niektóre wywołania interfejsu API
przekroczone przez limit zostaną zrealizowane w zależności
licznik limitów w centralnym repozytorium jest asynchronicznie aktualizowany. Jednak użytkownicy nie spotkają się
potencjalnego wpływu na wydajność związanych z aktualizacjami synchronicznymi.
Domyślny interwał aktualizacji asynchronicznej wynosi 10 sekund. Użyj
AsynchronousConfiguration
, aby skonfigurować to asynchroniczne zachowanie.
<Synchronous>false</Synchronous>
Domyślne: | fałsz |
Obecność: | Opcjonalnie |
Typ: | Wartość logiczna |
<AsynchronousConfiguration> element
Konfiguruje interwał synchronizacji między rozproszonymi licznikami limitów, gdy zasada
Element konfiguracji <Synchronous>
nie występuje lub nie występuje i został ustawiony
do: false
.
Możesz zsynchronizować albo po określonym czasie, albo po liczbie wiadomości, używając
Elementy podrzędne: SyncIntervalInSeconds
lub SyncMessageCount
.
wzajemnie się wykluczają. Na przykład
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
lub
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Domyślne: | SyncIntervalInSeconds = 10 sekund |
Obecność: | Opcjonalnie; jest ignorowana, gdy zasada <Synchronous> ma wartość
true |
Typ: |
Kompleks budowlany |
<AsynchronousConfiguration>/<SyncIntervalInSeconds> element
Służy do zastąpienia domyślnego zachowania, w ramach którego aktualizacje asynchroniczne są wykonywane po co 10 sekund.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
Interwał synchronizacji musi wynosić >= 10 s, jak opisano w Temat Limity.
Domyślne: | 10 |
Obecność: | Opcjonalnie |
Typ: |
Liczba całkowita |
<AsynchronousConfiguration>/<SyncMessageCount> element
Określa liczbę żądań do wszystkich procesorów wiadomości Apigee w zakresie limitów aktualizacje.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
W tym przykładzie liczba limitów jest aktualizowana co 5 żądań w każdym Apigee Procesor obsługi wiadomości na brzegu.
Domyślne: | nie dotyczy |
Obecność: | Opcjonalnie |
Typ: |
Liczba całkowita |
<Identifier> element
Użyj elementu <Identifier>
, aby skonfigurować zasadę do tworzenia unikalnych
na podstawie zmiennej przepływu.
Jeśli nie użyjesz tego elementu, zasada używa jednego licznika, który jest stosowany do i ograniczania limitu.
Ten element jest też omówiony w tym poście na karcie Społeczność 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ślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: |
Ciąg znaków |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
odsyłacz |
Określa zmienną przepływu identyfikującą licznik używany w przypadku żądania. Identyfikator może być nagłówkiem HTTP, parametrem zapytania, parametrem formularza lub treścią wiadomości które są unikalne dla każdej aplikacji, użytkownika aplikacji, dewelopera aplikacji, usługi API lub innego dla cechy.
W pewnych okolicznościach należy pobrać ustawienia limitów, jeśli nie ma
|
Nie dotyczy | Opcjonalnie |
<MessageWeight> element
Umożliwia określenie wagi przypisanej do każdej wiadomości. Użyj wagi wiadomości, aby zwiększyć wpływ komunikatów, które na przykład zużywają więcej zasobów obliczeniowych niż inne.
Na przykład wiadomości POST mają być liczone jako 2 razy bardziej „ciężkie” lub drogie, tak jak
wiadomości. Dlatego ustawiasz MessageWeight
na 2 dla żądania POST i 1 dla
POBIERZ. Możesz nawet ustawić MessageWeight
na 0, aby żądanie nie
nie wpływają na licznik. W tym przykładzie, jeśli limit wynosi 10 wiadomości na minutę
MessageWeight
dla żądań POST wynosi 2
, limit będzie
zezwala na 5 żądań POST w dowolnym 10-minutowym przedziale czasu. Każde dodatkowe żądanie, POST lub GET,
przed odrzuceniem licznika.
Wartość reprezentująca MessageWeight
musi być określona przez przepływ
zmienną. Można ją wyodrębnić z nagłówków HTTP, parametrów zapytania, żądania XML lub JSON.
ładunek danych lub dowolną inną zmienną przepływu. np. w nagłówku o nazwie
weight
:
<MessageWeight ref="message_weight"/>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: |
Liczba całkowita |
Zmienne przepływu
Poniższe wstępnie zdefiniowane zmienne przepływu są automatycznie wypełniane, gdy zasada dotycząca limitów . Więcej informacji o zmiennych Flow znajdziesz w dokumentacji zmiennych.
Zmienne | Typ | Uprawnienia | Opis |
---|---|---|---|
ratelimit.{policy_name}.allowed.count | Długi | Tylko do odczytu | Zwraca dozwoloną liczbę limitów |
ratelimit.{policy_name}.used.count | Długi | Tylko do odczytu | Zwraca bieżący limit używany w przedziale czasu |
ratelimit.{policy_name}.available.count | Długi | Tylko do odczytu | Zwraca liczbę dostępnych limitów w przedziale limitów |
ratelimit.{policy_name}.exceed.count | Długi | Tylko do odczytu | Zwraca wartość 1 po przekroczeniu limitu. |
ratelimit.{policy_name}.total.exceed.count | Długi | Tylko do odczytu | Zwraca wartość 1 po przekroczeniu limitu. |
ratelimit.{policy_name}.expiry.time | Długi | Tylko do odczytu |
Zwraca czas UTC w milisekundach, który określa czas wygaśnięcia limitu i nowy rozpocznie się interwał limitu. Gdy typ zasady dotyczącej limitów to |
stoplimit.{policy_name}.identyfikator | Ciąg znaków | Tylko do odczytu | Zwraca odwołanie do identyfikatora (klienta) dołączone do zasady |
limit_limitu.{policy_name}.class | Ciąg znaków | Tylko do odczytu | Zwraca klasę powiązaną z identyfikatorem klienta. |
ratelimit.{policy_name}.class.allowed.count | Długi | Tylko do odczytu | Zwraca dozwoloną liczbę limitów określoną w klasie |
ratelimit.{policy_name}.class.used.count | Długi | Tylko do odczytu | Zwraca wykorzystany limit w ramach klasy |
ratelimit.{policy_name}.class.available.count | Długi | Tylko do odczytu | Zwraca liczbę dostępnych limitów w klasie |
ratelimit.{policy_name}.class.exceed.count | Długi | Tylko do odczytu | Zwraca liczbę żądań, które przekraczają limit w klasie w bieżący odstęp limitu |
ratelimit.{policy_name}.class.total.exceed.count | Długi | Tylko do odczytu | Zwraca łączną liczbę żądań, które przekraczają limit w klasie we wszystkich
odstępów limitów, więc jest to suma class.exceed.count dla wszystkich
interwałów limitów. |
limit_limitu.{policy_name}.failed | Wartość logiczna | Tylko do odczytu |
Wskazuje, czy zasada została naruszona (prawda lub fałsz). |
Informacje o błędzie
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>
Schematy
Powiązane artykuły
Porównanie Zasady dotyczące limitu, zwiększenia liczby żądań i limitów równoczesnych żądań