Zasady dotyczące limitów

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Zasada dotycząca limitu pozwala skonfigurować liczbę wiadomości z żądaniami, na które serwer proxy interfejsu API zezwala w danym okresie, takim jak minuta, godzina, dzień, tydzień lub miesiąc. Możesz ustawić taki sam limit dla wszystkich aplikacji uzyskujących dostęp do serwera proxy interfejsu API lub możesz go ustawić na podstawie:

  • Usługa, która zawiera serwer proxy interfejsu API
  • Aplikacja żądająca interfejsu API
  • Deweloper aplikacji
  • Wiele innych kryteriów

Nie używaj limitu do ochrony przed ogólnym wzrostem natężenia ruchu. W tym celu użyj zasady Spike Arrest. Zobacz zasady dotyczące aresztowania nabojów.

Filmy

Te filmy przedstawiają zarządzanie limitami z użyciem zasad dotyczących limitów:

Wprowadzenie (nowa wersja Edge)

Wprowadzenie (klasyczna wersja Edge)

Limit dynamiczny

Rozproszone i synchroniczne

Waga wiadomości

Kalendarz

Okno ruchome

Elastyczna

Limit warunkowy

Zmienne przepływu

Obsługa błędów

Przykłady

Te przykładowe fragmenty kodu zasad pokazują, jak rozpocząć i zakończyć okresy limitów 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 pojedynczej zasady dotyczącej limitów, która wymusza różne ustawienia limitów na podstawie informacji przekazanych do zasady limitów. Inna nazwa ustawień limitów w tym kontekście to „abonament”. Dynamiczny limit sprawdza „Abonament” aplikacji, a następnie wymusza te ustawienia.

Uwaga: jeśli określisz zarówno wartość, jak i odwołanie do elementu, priorytet będzie miał wartość referencyjną. Jeśli odwołanie nie zostanie rozpoznane w czasie działania, używana jest wartość.

Podczas tworzenia usługi API możesz na przykład ustawić dozwolony limit, jednostkę czasu i interwał. Ustawienie tych wartości w usłudze API nie wymusza jednak ich użycia na serwerze proxy interfejsu API. Musisz też dodać do serwera proxy interfejsu API zasadę dotyczącą limitów, która będzie odczytywać te wartości. Więcej informacji znajdziesz w artykule o tworzeniu usług API.

W powyższym przykładzie serwer proxy interfejsu API zawierający zasadę limitu korzysta z zasady ConfirmAPIKey o nazwie verify-api-key, aby zweryfikować klucz interfejsu API przekazany w żądaniu. Zasada limitu uzyskuje następnie dostęp do zmiennych przepływu z zasadyVerifyAPIKey, aby odczytać wartości limitów ustawione w usłudze API. Więcej informacji o zmiennych przepływu VerAPIKey znajdziesz w zasadach weryfikacji klucza interfejsu API.

Możesz też ustawić atrybuty niestandardowe dla poszczególnych deweloperów lub aplikacji, a następnie odczytać te wartości w zasadach dotyczących limitów. Możesz na przykład ustawić różne wartości limitów dla każdego dewelopera. W tym przypadku ustawisz atrybuty niestandardowe na stronie dewelopera zawierające limit, jednostkę czasu i interwał. Możesz się odwoływać do tych wartości w zasadach dotyczących 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 WeryfikacjaAPIKey, aby odwołać się do atrybutów niestandardowych ustawionych przez programistę.

Do ustawienia parametrów zasad dotyczących limitów możesz użyć dowolnej zmiennej. Zmienne te mogą pochodzić z tych źródeł:

  • Zmienne przepływu
  • Usługi w interfejsie API, aplikacji lub dewelopera
  • Mapa par klucz-wartość (KVM)
  • Nagłówek, parametr zapytania, parametr formularza itp.

Dla każdego serwera proxy interfejsu API możesz dodać zasadę dotyczącą limitów, która odwołuje się do tej samej zmiennej co wszystkie pozostałe zasady dotyczące limitów na wszystkich innych serwerach proxy, albo zasada dotycząca limitów może odwoływać się do zmiennych unikalnych dla tej 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 wartością type ustawioną na calendar musisz zdefiniować jawną wartość <StartTime>. Wartością czasu jest czas GMT, a nie czas lokalny. Jeśli nie podasz wartości <StartTime> dla zasady typu calendar, Edge zgłosi 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ę zliczać 18 lutego 2017 r. o godzinie 10:30 czasu GMT i odświeża się co 5 godzin. Następne odświeżenie będzie miało miejsce 18 lutego 2017 roku o 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. Możesz uzyskać dostęp do tych zmiennych przepływu w interfejsie proxy interfejsu API, aby przeprowadzać przetwarzanie warunkowe, monitorować zasadę, gdy zbliży się do limitu limitu, zwrócić bieżący licznik limitu do aplikacji lub z innych powodów.

Dostęp do zmiennych przepływu dla zasady zależy od atrybutu name, dlatego w przypadku powyższej zasady QuotaPolicy masz dostęp do zmiennych przepływu w tym formularzu:

  • ratelimit.QuotaPolicy.allowed.count: dozwolona liczba.
  • ratelimit.QuotaPolicy.used.count: aktualna wartość licznika.
  • ratelimit.QuotaPolicy.expiry.time: czas UTC, gdy licznik czasu resetuje się.

Istnieje wiele innych zmiennych przepływu, do których możesz uzyskać dostęp, zgodnie z opisem poniżej.

Możesz na przykład użyć poniższej zasady AssignMessage, aby zwrócić wartości zmiennych przepływu limitów 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ę. Ta zasada resetuje licznik limitów u góry każdej godziny. Jeśli licznik osiągnie limit 10 000 wywołań przed końcem godziny, wywołania powyżej 10 tysięcy będą odrzucane.

Jeśli np. licznik uruchamia się o 2017-07-08 07:00:00, resetuje się do 0 w godzinach 2017-07-08 08:00:00 (1 godzina od godziny rozpoczęcia). Jeśli pierwsza wiadomość zostanie odebrana o 2017-07-08 07:35:28 i do 2017-07-08 08:00:00 liczba wiadomości osiągnie 10 000,wywołania wykraczające poza ten limit będą odrzucane, dopóki licznik nie zresetuje się do początku godziny.

Czas zresetowania licznika zależy od kombinacji tych danych: <Interval> i <TimeUnit>. Jeśli np. ustawisz <Interval> na 12 przez <TimeUnit> godzinę, licznik resetuje się co 12 godzin. Możesz ustawić <TimeUnit> na minutę, godzinę, dzień, tydzień lub miesiąc.

Możesz odwoływać się do tych zasad w wielu miejscach na serwerze proxy interfejsu API. Możesz na przykład umieścić go w procedurze wstępnego przepływu serwera proxy, aby był wykonywany przy każdym żądaniu. Możesz też umieścić go w wielu przepływach w serwerze proxy interfejsu API. Jeśli używasz tej zasady w wielu miejscach na serwerze 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 ma własny licznik oparty na atrybucie name 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 limitu definiuje jeden licznik dla serwera proxy interfejsu API, niezależnie od źródła żądania. Możesz też użyć atrybutu <Identifier> z zasadami dotyczącymi limitów, aby utrzymywać osobne liczniki na podstawie wartości atrybutu <Identifier>.

Możesz np. użyć tagu <Identifier>, aby zdefiniować osobne liczniki dla każdego identyfikatora klienta. W odpowiedzi na żądanie wysyłane do serwera proxy aplikacja kliencka przekazuje nagłówek zawierający 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 interfejsu API używasz zasadyVerifyAPIKey lub zasad OAuthV2 z tokenami OAuth, możesz wykorzystać informacje w kluczu lub tokenie interfejsu API do definiowania poszczególnych liczników w ramach tej samej zasady limitu. Na przykład ten tag <Identifier> korzysta ze zmiennej przepływu client_id w zasadzie VerificationAPIKey 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 zasadzie limitów.

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 możesz ustawiać dynamicznie, korzystając z liczby limitów związanych z klasami. W tym przykładzie limit jest określany na podstawie wartości nagłówka developer_segment przekazywanej przy każdym żądaniu. Ta zmienna może mieć wartość platinum lub silver. Jeśli nagłówek zawiera nieprawidłową wartość, zasada zwraca błąd naruszenia limitu.


Informacje o zasadach dotyczących limitów

Limit to przydział wiadomości z żądaniami, które może obsłużyć serwer proxy interfejsu API w danym okresie, na przykład minuta, godzina, dzień, tydzień lub miesiąc. Zasada utrzymuje liczniki, które zliczają liczbę żądań otrzymanych przez serwer proxy interfejsu API. Dzięki temu dostawcy interfejsów API mogą egzekwować limity liczby wywołań interfejsu API wysyłanych przez aplikacje w danym okresie. Zasady dotyczące limitów pozwalają na przykład ograniczyć liczbę żądań aplikacji do 1 żądania na minutę lub do 10 000 żądań na miesiąc.

Jeśli na przykład limit jest zdefiniowany jako 10 000 wiadomości na miesiąc, ograniczanie liczby żądań rozpocznie się po 10 000 wiadomości. Nie ma znaczenia,czy 10 000 wiadomości zostało zliczonych pierwszego czy ostatniego dnia tego okresu. Nie jest dozwolony dodatkowy obszar żądań, dopóki licznik limitu nie zostanie automatycznie zresetowany na końcu określonego przedziału czasu lub do momentu wyraźnego zresetowania limitu za pomocą zasady resetowania limitu.

Zmienność limitu o nazwie SpikeArrest zapobiega gwałtownym wzrostom (lub wzrostom) ruchu, które mogą być spowodowane nagłym wzrostem wykorzystania, nieprawidłowymi klientami lub złośliwymi atakami. Więcej informacji o SpikeArrest znajdziesz w zasadach dotyczących aresztowania na papierze.

Limity dotyczą poszczególnych serwerów proxy interfejsów API i nie są rozłożone na serwery proxy tego interfejsu. Jeśli na przykład w usłudze API masz 3 serwery proxy interfejsów API, pojedynczy limit nie będzie wspólny dla tych usług, nawet jeśli wszystkie z nich korzystają z tej samej konfiguracji zasad limitów.

Typy zasad dotyczących limitów

Zasada dotycząca limitu obsługuje kilka różnych typów zasad: domyślny, calendar, flexi i rollingwindow. Każdy typ określa, kiedy uruchamia się licznik limitów, a kiedy resetuje się, jak w tej tabeli:

Jednostka czasu Reset domyślny (lub zerowy) resetowanie kalendarza Reset flexi
minuta Początek następnej minuty 1 minutę po: <StartTime> 1 minuta po pierwszym żądaniu
godz. Początek następnej godziny 1 godzina po: <StartTime> 1 godzina od pierwszego żądania
dzień Północ GMT bieżącego dnia 24 godziny po: <StartTime> 24 godziny po pierwszej prośbie
tydzień Północ czasu GMT w niedzielę pod koniec tygodnia Tydzień po: <StartTime> Tydzień po pierwszej prośbie
miesiąc Północ czasu GMT ostatniego dnia miesiąca 1 miesiąc (28 dni) po <StartTime> 1 miesiąc (28 dni) po pierwszej prośbie

Jako type="calendar" musisz podać wartość <StartTime>.

W tabeli nie ma wartości typu rollingwindow. Limity okresów zmieniających działają przez ustawienie rozmiaru „okna” limitu, na przykład okna 1 godziny lub 1 dnia. Gdy pojawia się nowe żądanie, zasada określa, czy limit został przekroczony w minionym „okresie”.

Możesz np. zdefiniować dwugodzinny przedział, w którym można przesłać 1000 żądań. Nowe żądanie przychodzi o 16:45.Zasada oblicza limit dla ostatnich 2 godzin, czyli liczbę żądań od 14:45. Jeśli limit nie został przekroczony w tym dwugodzinnym okresie, prośba jest dopuszczana.

Po minucie, o 16:46, przychodzi kolejna prośba. Teraz zasada oblicza limit od godziny 14:46, aby ustalić, czy limit został przekroczony.

W przypadku typu rollingwindow licznik nigdy nie resetuje się, ale jest przeliczany po każdym żądaniu.

Informacje o licznikach limitów

Domyślnie zasada dotycząca limitu utrzymuje 1 licznik niezależnie od tego, ile razy odwołuje się do niego na serwerze proxy interfejsu API. Nazwa licznika limitów zależy od atrybutu name zasady.

Możesz na przykład utworzyć zasadę limitu o nazwie MyQuotaPolicy z limitem 5 żądań i umieścić ją w wielu przepływach (proces A, B i C) w serwerze proxy interfejsu API. Mimo że jest używana 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 = 1
  • Przepływ B jest wykonywany -> wykonywana jest zasada MylimitPolicy, a jej licznik = 2
  • Przepływ A jest wykonywany -> wykonywana jest zasada MylimitPolicy, a jej licznik = 3
  • Przepływ C jest wykonywany -> wykonywana jest zasada MylimitPolicy, a jej licznik = 4
  • Przepływ A jest wykonywany -> wykonywana jest zasada MyQuotaPolicy, a jej licznik = 5

Następne żądanie do dowolnego z 3 przepływów zostało odrzucone, ponieważ licznik limitów osiągnął limit.

Używanie tych samych zasad dotyczących limitów w więcej niż 1 miejscu w procesie serwera proxy interfejsu API, które może nieumyślnie powodować szybsze wyczerpanie limitu, jest niezgodne z wzorcem opisanym w artykule The Book of Apigee Edge Antipatterns.

Możesz też zdefiniować wiele zasad dotyczących limitów na serwerze proxy interfejsu API i używać innych zasad w każdym procesie. Każda zasada dotycząca limitów ma własny licznik oparty na atrybucie name zasady.

Możesz też użyć elementów <Class> lub <Identifier> w zasadzie limitu, aby zdefiniować wiele unikalnych liczników w jednej zasadzie. Dzięki tym elementom jedna zasada może zachowywać różne liczniki m.in. m.in. od aplikacji wysyłającej żądanie, od dewelopera aplikacji tworzącego żądanie, identyfikatora klienta lub innego identyfikatora klienta. Więcej informacji o używaniu elementów <Class> i <Identifier> znajdziesz w przykładach powyżej.

Zapis czasu

Wszystkie wartości czasu limitu są ustawione według strefy czasowej uniwersalnego czasu koordynowanego (UTC).

Zapis czasu limitu jest zgodny z międzynarodowym standardem daty zgodnym z normą międzynarodową ISO 8601.

Daty definiuje się jako rok, miesiąc i dzień w tym formacie: YYYY-MM-DD. Na przykład 2015-02-04 oznacza 4 lutego 2015 r.

Pora dnia jest określana jako godziny, minuty i sekundy w tym formacie: hours:minutes:seconds. Na przykład 23:59:59 oznacza czas wynoszący 1 sekundę do północy.

Dostępne są 2 notacje: 00:00:00 i 24:00:00, które pozwalają rozróżnić północ, które można powiązać z jedną datą. Dlatego 2015-02-04 24:00:00 jest tą samą datą i godziną co 2015-02-05 00:00:00. Zazwyczaj jest to preferowany zapis.

Pobieram ustawienia limitu z konfiguracji usługi API

Limity możesz ustawiać w konfiguracjach usług interfejsu API. Te limity nie wymuszają automatycznego przestrzegania limitu. Zamiast tego możesz odwoływać się do ustawień limitów produktów w zasadach limitów. Oto kilka korzyści związanych z ustawieniem limitu w usłudze, do którego można się odnieść dzięki zasadom limitów:

  • Zasady limitów mogą używać jednolitych ustawień we wszystkich serwerach proxy API w usłudze API.
  • W środowisku wykonawczym możesz zmienić ustawienie limitu usługi API, a zasady limitów, które odwołują się do tej wartości, mają automatycznie zaktualizowane wartości.

Więcej informacji o korzystaniu z ustawień limitu w usłudze API znajdziesz w przykładzie powyżej „Limit dynamiczny”..

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 kombinacje elementów wzajemnie się wykluczają lub nie są wymagane. Zobacz przykłady poszczególnych zastosowań. Poniższe zmienne verifyapikey.VerifyAPIKey.apiproduct.* są domyślnie dostępne, gdy do sprawdzenia klucza interfejsu API aplikacji w żądaniu jest używana zasada weryfikacji klucza interfejsu API o nazwie „VerifyAPIKey”. Wartości zmiennych pochodzą z ustawień limitów usługi API, z którą jest powiązany klucz, zgodnie z opisem w sekcji Uzyskiwanie ustawień limitu z konfiguracji 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>

Atrybuty <Limit>

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

Poniższe atrybuty są specyficzne dla tych zasad.

Atrybut Opis Domyślne Obecność
typ

Służy do określania, kiedy i w jaki sposób licznik limitów sprawdza wykorzystanie limitu. Więcej informacji znajdziesz w artykule o typach zasad dotyczących limitów.

Jeśli pominiesz wartość type, licznik uruchomi się od początku minuty/godziny/dnia/tygodnia/miesiąca.

Prawidłowe wartości to m.in.:

  • calendar: skonfiguruj limit na podstawie konkretnej godziny rozpoczęcia. Licznik limitu dla każdej aplikacji jest odświeżany na podstawie ustawionych wartości <StartTime>, <Interval> i <TimeUnit>.
  • rollingwindow: skonfiguruj limit, który korzysta z „okna ruchomego” do określania wykorzystania limitu. Pole rollingwindow pozwala określić rozmiar okna za pomocą elementów <Interval> i <TimeUnit>, np. 1 dzień. Gdy pojawia się żądanie, Edge sprawdza dokładną godzinę żądania (np. 17:01), zlicza liczbę żądań przesłanych w tym okresie do 17:01 poprzedniego dnia (1 dnia) i sprawdza, czy w tym okresie został przekroczony limit.
  • flexi: skonfiguruj limit, który uruchamia licznik po otrzymaniu pierwszej wiadomości z żądaniem z aplikacji i resetuje się na podstawie wartości <Interval>, i <TimeUnit>.
kalendarz Opcjonalnie

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne Obecność
name

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekraczać 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po awarii zasady.

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślne

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Allow>

Określa limit liczby elementów. Jeśli licznik zasady osiągnie tę wartość, kolejne wywołania będą odrzucane, dopóki licznik się nie zresetuje.

Poniżej przedstawiono 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 podasz zarówno count, jak i countRef, priorytet będzie countRef. Jeśli countRef nie jest rozpoznawany w czasie działania, używana jest wartość count.

Domyślnie: Nie dotyczy
Obecność: Opcjonalnie
Typ: Liczba całkowita

Atrybuty

Atrybut Opis Domyślne Obecność
liczba

Służy do określania liczby wiadomości w ramach limitu.

Na przykład wartość atrybutu count wynosząca 100, Interval (1) i TimeUnit miesiąca określa limit 100 wiadomości na miesiąc.

2000 Opcjonalnie
countRef

Służy do określania zmiennej przepływu zawierającej liczbę wiadomości w ramach limitu. countRef ma pierwszeństwo przed atrybutem count.

brak Opcjonalnie

Element <Allow>/<Class>

Element <Class> umożliwia warunkowanie wartości elementu <Allow> w zależności od wartości zmiennej przepływu. Dla każdego tagu podrzędnego <Allow> dotyczącego <Class> zasada ma osobny licznik.

Aby użyć elementu <Class>, określ zmienną przepływu za pomocą atrybutu ref w tagu <Class>. Następnie Edge korzysta z wartości zmiennej przepływu, aby wybrać jeden z tagów podrzędnych (<Allow>) w celu określenia dozwolonej liczby 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 limitów jest określany na podstawie wartości parametru zapytania time_variable przekazanego z każdym żądaniem. Ta zmienna może mieć wartość peak_time lub off_peak_time. Jeśli parametr zapytania zawiera nieprawidłową wartość, zasada zwraca błąd naruszenia limitu.

Domyślnie: Nie dotyczy
Obecność: Opcjonalnie
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność
referencja

Służy do określania zmiennej przepływu zawierającej klasę limitu dla limitu.

brak Wymagane

Element <Allow>/<Class>/<Allow>

Element <Allow> określa limit licznika limitu zdefiniowany przez element <Class>. Dla każdego tagu podrzędnego <Allow> dotyczącego <Class> zasada ma osobny 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 limitu zawiera 2 liczniki limitów o nazwach peak_time i off_peak_time.

Domyślnie: Nie dotyczy
Obecność: Opcjonalnie
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność
klasa

Określa nazwę licznika limitów.

brak Wymagane
liczba Określa limit dla licznika. brak Wymagane

Element <Interval>

Służy do określania liczby całkowitej (na przykład 1, 2, 5, 60 itd.), która zostanie sparowana z podaną przez Ciebie wartością TimeUnit (minutę, godzinę, dzień, tydzień lub miesiąc), aby określić okres, w którym Edge oblicza wykorzystanie limitu.

Na przykład Interval równy 24 z TimeUnit o wartości 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ślne Obecność
referencja

Służy do określania zmiennej przepływu zawierającej przedział dla limitu. ref ma pierwszeństwo przed jawną wartością przedziału. Jeśli podasz zarówno odwołanie, jak i wartość, priorytet ma odwołanie. Jeśli ref nie jest rozpoznawany w czasie działania, używana jest wartość.

brak Opcjonalnie

Element <TimeUnit>

Służy do określania jednostki czasu mającej zastosowanie do limitu.

Na przykład Interval równy 24 z TimeUnit o wartości 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 jedną z tych opcji: minute, hour, day, week lub month.

Atrybuty

Atrybut Opis Domyślne Obecność
referencja Służy do określania zmiennej przepływu zawierającej jednostkę czasu dla limitu. ref ma pierwszeństwo przed jawną wartością przedziału czasu. Jeśli ref nie jest rozpoznawane w czasie działania, używana jest wartość. brak Opcjonalnie

Element <StartTime>

Jeśli type ma wartość calendar,, określa datę i godzinę, kiedy licznik limitów zacznie zliczać, niezależnie od tego, czy otrzymały jakiekolwiek żądania z aplikacji.

Jeśli parametr type ma jawnie ustawioną wartość calendar,, musisz podać bezpośrednią wartość StartTime. Nie można użyć odwołania do zmiennej przepływu. Jeśli podasz wartość StartTime, gdy nie ustawiono żadnej wartości type, wystąpi błąd.

Na przykład:

<StartTime>2017-7-16 12:00:00</StartTime>
Domyślnie: brak
Obecność: Wymagane, gdy zasada type ma wartość calendar.
Typ:

Ciąg znaków w formacie daty i godziny ISO 8601.

Element <rozproszony>

Instalacja Edge może używać do przetwarzania żądań co najmniej 1 procesora wiadomości. Ustaw ten element na true, aby określić, że zasada powinna utrzymywać centralny licznik i stale synchronizować go między wszystkimi procesorami wiadomości. Procesory wiadomości mogą się znajdować w różnych strefach lub regionach dostępności.

Jeśli używasz domyślnej wartości false, możesz przekroczyć limit, ponieważ liczby procesorów nie są współużytkowane:

<Distributed>true</Distributed>

Aby liczniki czasu były synchronizowane i aktualizowane przy każdym żądaniu, ustaw <Distributed> i <Synchronous> na „true” (prawda):

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
Domyślnie: false
Obecność: Opcjonalnie
Typ: Wartość logiczna

Element <Synchroniczny>

Ustaw wartość true, aby synchronicznie aktualizować licznik limitów rozproszonych. Oznacza to, że aktualizacja licznika jest przeprowadzana w momencie sprawdzania limitu w żądaniu wysyłanym do interfejsu API. Ustaw jako true, jeśli nie możesz zezwalać na wywołania interfejsu API powyżej limitu.

Ustaw wartość false, aby asynchronicznie aktualizować licznik limitu. Oznacza to, że w zależności od tego, kiedy licznik limitów w centralnym repozytorium będzie aktualizowany asynchronicznie, niektóre wywołania interfejsu API przekraczające limit zostaną zrealizowane. Nie będzie to jednak miało wpływu na wydajność związane z aktualizacjami synchronicznymi.

Domyślny asynchroniczny interwał aktualizacji to 10 sekund. Aby skonfigurować to działanie asynchroniczne, użyj elementu AsynchronousConfiguration.

<Synchronous>false</Synchronous>
Domyślnie: false
Obecność: Opcjonalnie
Typ: Wartość logiczna

Element <AsynchronousConfiguration>

Konfiguruje interwał synchronizacji między licznikami rozproszonego limitu przydziału, gdy element konfiguracji zasad <Synchronous> nie jest obecny lub gdy jest on ustawiony na false.

Elementy podrzędne SyncIntervalInSeconds lub SyncMessageCount umożliwiają synchronizowanie po określonym czasie lub po liczbie wiadomości. wzajemnie się wykluczają. Przykład:

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

lub

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
Domyślnie: SyncIntervalInSeconds = 10 sekund
Obecność: Opcjonalny; zignorowany, gdy <Synchronous> ma wartość true.
Typ:

Kompleks budowlany

Element <AsynchronousConfiguration>/<SyncIntervalInSeconds>

Służy do zastąpienia domyślnego działania, w którym aktualizacje asynchroniczne są wykonywane po 10 sekundach.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

Interwał synchronizacji musi wynosić co najmniej 10 sekund, zgodnie z opisem w temacie Limity.

Domyślnie: 10
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <AsynchronousConfiguration>/<SyncMessageCount>

Określa liczbę żądań do wszystkich procesorów wiadomości Apigee między aktualizacjami limitu.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

Ten przykład określa, że limit jest aktualizowany co 5 żądań w każdym procesorze wiadomości Apigee Edge.

Domyślnie: nie dotyczy
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <Identifier>

Za pomocą elementu <Identifier> skonfiguruj zasadę, która tworzy unikalne liczniki na podstawie zmiennej przepływu.

Możesz tworzyć liczniki unikalnych użytkowników dla cech zdefiniowanych przez zmienną przepływu. Możesz na przykład użyć adresu e-mail dewelopera, aby przypisać limit miejsca konkretnemu deweloperowi. Do określenia limitu możesz używać różnych zmiennych. Niezależnie od tego, czy używasz zmiennych niestandardowych czy wstępnie zdefiniowanych zmiennych, takich jak zmienne dostępne w zasadach weryfikacji klucza interfejsu API, Zapoznaj się też z dokumentacją zmiennych.

Jeśli nie używasz tego elementu, zasada używa jednego licznika, który jest stosowany do limitu.

Ten element został również 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ślnie: Nie dotyczy
Obecność: Opcjonalnie
Typ:

Ciąg znaków

Atrybuty

Atrybut Opis Domyślne Obecność
referencja

Określa zmienną przepływu, która identyfikuje licznik, który ma być użyty w żądaniu. Identyfikator może być nagłówkiem HTTP, parametrem zapytania, parametrem formularza lub treścią wiadomości, który jest unikalny dla każdej aplikacji, użytkownika aplikacji, dewelopera aplikacji, produktu API lub innej cechy.

<Identifier> najczęściej używany do jednoznacznego identyfikowania aplikacji to client_id. client_id to inna nazwa klucza interfejsu API lub klucza klienta, który jest generowany dla aplikacji podczas jej rejestrowania w organizacji w Apigee Edge. Możesz użyć tego identyfikatora, jeśli masz włączony klucz interfejsu API lub zasady autoryzacji OAuth dla swojego interfejsu API.

W niektórych okolicznościach należy pobrać ustawienia limitu, gdy brak client_id, na przykład gdy nie jest stosowana żadna zasada zabezpieczeń. W takich sytuacjach możesz użyć zasady encji dostępu, aby pobrać odpowiednie ustawienia usługi API, a następnie wyodrębnić wartości za pomocą metody ExtractVariables, a następnie użyć wyodrębnionej zmiennej kontekstowej w zasadach dotyczących limitów. Więcej informacji znajdziesz w opisie zasad dotyczących encji dostępu.

Nie dotyczy Opcjonalnie

Element <MessageWeight>

Służy do określania wagi przypisanej do każdej wiadomości. Użyj wagi wiadomości, aby zwiększyć wpływ wiadomości z żądaniami, które na przykład pochłaniają więcej zasobów obliczeniowych niż inne.

Chcesz na przykład, aby wiadomości POST były 2 razy bardziej „ciężkie” lub droższe niż wiadomości GET. Dlatego ustawiasz MessageWeight na 2 dla żądania POST i 1 dla żądania GET. Możesz nawet ustawić MessageWeight na 0, aby żądanie nie miało wpływu na licznik. W tym przykładzie, jeśli limit to 10 wiadomości na minutę, a MessageWeight dla żądań POST wynosi 2, to limit zezwala na 5 żądań POST w dowolnym 10-minutowym przedziale czasu. Wszelkie dodatkowe żądania (POST lub GET) poprzedzające resetowanie licznika będą odrzucane.

Wartość reprezentująca MessageWeight musi być określona przez zmienną przepływu i można ją wyodrębnić z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON lub dowolnej innej zmiennej przepływu. Możesz na przykład ustawić go w nagłówku o nazwie weight:

<MessageWeight ref="message_weight"/>
Domyślnie: Nie dotyczy
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Zmienne przepływu

Poniższe wstępnie zdefiniowane zmienne przepływu są wypełniane automatycznie podczas wykonywania zasady dotyczącej limitów. Więcej informacji o zmiennych przepływu znajdziesz w artykule Informacje o zmiennych.

Zmienne Typ Uprawnienia Opis
ratelimit.{policy_name}.allowed.count Długa liczba całkowita Tylko do odczytu Zwraca dozwoloną liczbę limitów
ratelimit.{policy_name}.used.count Długa liczba całkowita Tylko do odczytu Zwraca bieżący limit używany w przedziale czasu limitu
ratelimit.{policy_name}.available.count Długa liczba całkowita Tylko do odczytu Zwraca liczbę dostępnych limitów w przedziale czasu limitu
ratelimit.{policy_name}.exceed.count Długa liczba całkowita Tylko do odczytu Zwraca 1 po przekroczeniu limitu.
ratelimit.{policy_name}.total.exceed.count Długa liczba całkowita Tylko do odczytu Zwraca 1 po przekroczeniu limitu.
ratelimit.{policy_name}.expiry.time Długa liczba całkowita Tylko do odczytu

Zwraca czas UTC w milisekundach, który określa, kiedy kończy się limit i rozpoczyna się nowy interwał limitu.

Jeśli typ zasady limitu to rollingwindow, ta wartość jest nieprawidłowa, ponieważ przedział czasu nigdy nie wygasa.

ratelimit.{policy_name}.identifier Ciąg znaków Tylko do odczytu Zwraca odniesienie do identyfikatora (klienta) dołączone do zasady
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ługa liczba całkowita Tylko do odczytu Zwraca dozwoloną liczbę limitów zdefiniowaną w klasie
ratelimit.{policy_name}.class.used.count Długa liczba całkowita Tylko do odczytu Zwraca ilość używanego limitu w klasie
ratelimit.{policy_name}.class.available.count Długa liczba całkowita Tylko do odczytu Zwraca liczbę dostępnych limitów w klasie
ratelimit.{policy_name}.class.exceed.count Długa liczba całkowita Tylko do odczytu Zwraca liczbę żądań, które przekraczają limit w klasie w bieżącym przedziale limitów
ratelimit.{policy_name}.class.total.exceed.count Długa liczba całkowita Tylko do odczytu Zwraca łączną liczbę żądań, które przekraczają limit klasy we wszystkich przedziałach limitów, więc jest to suma wartości class.exceed.count we wszystkich przedziałach limitów.
ratelimit.{policy_name}.failed Wartość logiczna Tylko do odczytu

Wskazuje, czy zasada nie powiodła się (prawda lub fałsz).

Informacje o błędach

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.

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 zasadach dotyczących limitów. Ten element jest wymagany i służy do określania przedziału czasu obowiązującego w ramach limitu. Przedział czasu może mieć długość minut, godzin, dni, tygodni lub miesięcy, zgodnie z definicją za pomocą elementu <TimeUnit>.
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 Występuje, jeśli element <TimeUnit> nie jest zdefiniowany w zasadach dotyczących limitów. Ten element jest wymagany i służy do określania jednostki czasu obowiązującej w przypadku limitu. Przedział czasu może być wyrażony w minutach, godzinach, dniach, tygodniach lub miesiącach.
policies.ratelimit.InvalidMessageWeight 500 Występuje, jeśli wartość elementu <MessageWeight> określona za pomocą zmiennej przepływu jest nieprawidłowa (wartość nie jest liczbą całkowitą).
policies.ratelimit.QuotaViolation 500 Przekroczono limit. Nie dotyczy

Błędy wdrażania

Nazwa błędu Przyczyna Napraw
InvalidQuotaInterval Jeśli odstęp limitu podany w elemencie <Interval> nie jest liczbą całkowitą, nie uda się wdrożyć serwera proxy interfejsu API. Jeśli na przykład interwał limitu określony w elemencie <Interval> wynosi 0, 1, wdrożenie serwera proxy interfejsu API się nie uda.
InvalidQuotaTimeUnit Jeśli jednostka czasu określona w elemencie <TimeUnit> nie jest obsługiwana, wdrożenie serwera proxy interfejsu API nie powiedzie się. Obsługiwane jednostki czasu to minute, hour, day, week i month.
InvalidQuotaType Jeśli typ limitu określony przez atrybut type w elemencie <Quota> jest nieprawidłowy, wdrożenie serwera proxy interfejsu API nie powiedzie się. Obsługiwane typy limitów to default, calendar, flexi i rollingwindow.
InvalidStartTime Jeśli format godziny określony w elemencie <StartTime> jest nieprawidłowy, wdrożenie serwera proxy interfejsu API nie powiedzie się. Prawidłowy format to yyyy-MM-dd HH:mm:ss, czyli format daty i godziny zgodny z ISO 8601. Jeśli na przykład czas określony w elemencie <StartTime> to 7-16-2017 12:00:00, nie uda się wdrożyć serwera proxy interfejsu API.
StartTimeNotSupported Jeśli jest określony element <StartTime>, którego typ limitu nie jest typu calendar, wdrożenie serwera proxy interfejsu API nie powiedzie się. Element <StartTime> jest obsługiwany tylko w przypadku limitu typu calendar. Jeśli na przykład atrybut type jest ustawiony na flexi lub rolling window w elemencie <Quota>, wdrożenie serwera proxy interfejsu API nie powiedzie się.
InvalidTimeUnitForDistributedQuota Jeśli element <Distributed> jest ustawiony na true, a element <TimeUnit> ma wartość second, wdrożenie serwera proxy interfejsu API nie powiedzie się. Jednostka czasu second jest nieprawidłowa dla limitu rozproszonego.
InvalidSynchronizeIntervalForAsyncConfiguration Jeśli wartość elementu <SyncIntervalInSeconds> w elemencie <AsynchronousConfiguration> w zasadzie limitu jest mniejsza niż 0, wdrożenie serwera proxy interfejsu API nie powiedzie się.
InvalidAsynchronizeConfigurationForSynchronousQuota Jeśli wartość elementu <AsynchronousConfiguration> jest ustawiona na true w zasadzie limitu, która ma również konfigurację asynchroniczną zdefiniowaną za pomocą elementu <AsynchronousConfiguration>, wdrożenie serwera proxy interfejsu API się nie uda.

Zmienne błędów

Te zmienne są ustawiane, gdy zasada wywołuje błąd. Więcej informacji znajdziesz w artykule Co musisz wiedzieć 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 środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. 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

Zasady dotyczące resetowania limitów

Zasady SpikeArrest

Porównanie zasad dotyczących limitów, przyrostu zatrzymania i limitów liczby równoczesnych