Zasady dotyczące limitów

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

Co

Za pomocą zasady Quota możesz skonfigurować liczbę wiadomości z żądaniami, na które zezwala serwer proxy interfejsu API w określonym przedziale czasu, np. w ciągu minuty, godziny, dnia, tygodnia lub miesiąca. Możesz ustawić ten sam limit dla wszystkich aplikacji uzyskujących dostęp do serwera proxy interfejsu API lub ustawić limit na podstawie:

  • Usługa zawierająca serwer proxy interfejsu API
  • aplikacja, która wysyła żądanie do interfejsu API;
  • Deweloper aplikacji
  • wiele innych kryteriów.

Nie używaj limitu, aby chronić się przed ogólnymi skokami ruchu. Do tego celu użyj zasady Spike Arrest. Zapoznaj się z zasadami dotyczącymi ochrony przed nagłymi wzrostami.

Filmy

W tych filmach przedstawiamy zarządzanie limitami za pomocą zasad dotyczących limitów:

Wprowadzenie (New Edge)

Intro (Classic Edge)

Dynamiczny limit

Rozproszone i synchroniczne

Waga wiadomości

Kalendarz

Okres obserwacji

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 limitów, wykonując te czynności:

Większy limit dynamiczny

<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 pojedynczych zasad limitów, które wymuszają różne ustawienia limitów na podstawie informacji przekazywanych do tych zasad. Innym określeniem ustawień limitu w tym kontekście jest „Plan usługi”. Dynamiczny limit sprawdza „Plan usługi” aplikacji, a następnie wymusza te ustawienia.

Uwaga: jeśli podasz zarówno wartość, jak i odniesienie do elementu, pierwszeństwo będzie miało odniesienie. Jeśli odwołanie nie zostanie rozpoznane w czasie działania, użyta zostanie wartość.

Na przykład podczas tworzenia produktu API możesz opcjonalnie ustawić dozwolony limit limitu, jednostkę czasu i interwał. Ustawienie tych wartości w przypadku produktu API nie wymusza jednak ich użycia w proxy interfejsu API. Musisz też dodać do serwera proxy interfejsu API zasadę dotyczącą limitu, która odczytuje te wartości. Więcej informacji znajdziesz w artykule Tworzenie usług API.

W przykładzie powyżej proxy interfejsu API zawierające zasadę Quota używa zasady VerifyAPIKey o nazwie verify-api-key do weryfikowania klucza interfejsu API przekazywanego w żądaniu. Zasada dotycząca limitu uzyskuje następnie dostęp do zmiennych przepływu z zasady VerifyAPIKey, aby odczytać wartości limitu ustawione w usłudze API. Więcej informacji o zmiennych przepływu VerifyAPIKey znajdziesz w sekcji Zasady Verify API Key.

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 limitu dla poszczególnych deweloperów. W tym przypadku ustawiasz atrybuty niestandardowe dewelopera zawierające limit, jednostkę czasu i interwał. Następnie odwołaj się 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żywane są też zmienne przepływu VerifyAPIKey, aby odwoływać się do atrybutów niestandardowych ustawionych dla dewelopera.

Do ustawiania parametrów zasady Quota możesz używać dowolnej zmiennej. Te zmienne mogą pochodzić z:

  • Zmienne przepływu
  • Właściwości usługi API, aplikacji lub programisty
  • mapa klucz-wartość (KVM);
  • nagłówek, parametr zapytania, parametr formularza itp.

Do każdego serwera proxy interfejsu API możesz dodać zasadę dotyczącą limitu, która odwołuje się do tej samej zmiennej co wszystkie inne zasady dotyczące limitu we wszystkich innych serwerach proxy. Zasada dotycząca limitu może też 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 ustawioną wartością type na calendar musisz zdefiniować wyraźną wartość <StartTime>. Wartość czasu jest podana w czasie GMT, a nie w czasie lokalnym. 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><TimeUnit>. W tym przykładzie limit zaczyna być zliczany o 10:30 czasu GMT 18 lutego 2017 r. i jest odświeżany co 5 godzin. Dlatego następne odświeżenie nastąpi 18 lutego 2017 r. 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ą limitu. Dostęp do tych zmiennych przepływu możesz uzyskać w proxy interfejsu API, aby wykonywać przetwarzanie warunkowe, monitorować zasadę, gdy zbliża się do limitu, zwracać bieżący licznik limitu do aplikacji lub z innych powodów.

Dostęp do zmiennych przepływu w zasadach zależy od atrybutu name zasad. W przypadku powyższych zasad o nazwie QuotaPolicy dostęp do zmiennych przepływu uzyskuje się w 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, które opisujemy poniżej.

Możesz na przykład użyć tej zasady AssignMessage, aby zwracać wartości zmiennych przepływu Quota 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>

Pierwsza prośba

<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 resetuje licznik limitu na początku każdej godziny. Jeśli licznik osiągnie limit 10 000 połączeń przed końcem godziny, połączenia powyżej tego limitu zostaną odrzucone.

Jeśli na przykład licznik zaczyna się od 2017-07-08 07:00:00, to resetuje się do 0 o 2017-07-08 08:00:00 (godzinę od czasu rozpoczęcia). Jeśli pierwsza wiadomość zostanie odebrana o godzinie 2017-07-08 07:35:28,a liczba wiadomości osiągnie 10 000 przed godziną 2017-07-08 08:00:00, połączenia przekraczające tę liczbę będą odrzucane do momentu zresetowania licznika na początku kolejnej godziny.

Czas resetowania licznika zależy od kombinacji reguł <Interval> i <TimeUnit>. Jeśli na przykład ustawisz wartość <Interval> na 12 godzin, licznik będzie się resetować co 12 godzin.<TimeUnit> Możesz ustawić <TimeUnit> na minuty, godziny, dni, tygodnie lub miesiące.

Możesz odwoływać się do tych zasad w wielu miejscach w proxy interfejsu API. Możesz na przykład umieścić go w sekcji Proxy PreFlow, aby był wykonywany przy każdym żądaniu. Możesz też umieścić go w wielu ścieżkach w proxy interfejsu API. Jeśli używasz tej zasady w wielu miejscach w serwerze proxy, utrzymuje ona jeden licznik, który jest aktualizowany przez wszystkie instancje zasady.

Możesz też zdefiniować w serwerze proxy interfejsu API kilka zasad dotyczących limitu. Każda zasada dotycząca limitu utrzymuje własny licznik na podstawie atrybutu name zasady.

Ustawianie identyfikatora

<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 zasadami dotyczącymi limitu, aby prowadzić oddzielne liczniki na podstawie wartości atrybutu <Identifier>.

Użyj np. tagu <Identifier>, aby zdefiniować osobne liczniki dla każdego identyfikatora klienta. W przypadku żądania wysyłanego do proxy aplikacja kliencka przekazuje nagłówek zawierający clientID, jak pokazano w przykładzie powyżej.

W atrybucie <Identifier> możesz określić 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 zasady VerifyAPIKey lub zasad OAuthV2 z tokenami OAuth, możesz użyć informacji z klucza interfejsu API lub tokena do zdefiniowania poszczególnych liczników dla tych samych zasad Quota. Na przykład ten tag <Identifier> używa zmiennej przepływu client_id z zasady VerifyAPIKey o nazwie verify-api-key:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

Każda unikalna 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 miejsca możesz ustawiać dynamicznie, korzystając z liczby miejsca opartej na klasie. W tym przykładzie limit przydziału jest określany przez wartość nagłówka developer_segment przekazywanego z każdym żądaniem. Zmienna może mieć wartość platinum lub silver. Jeśli nagłówek ma nieprawidłową wartość, zasady zwracają błąd naruszenia limitu.


Informacje o zasadach dotyczących limitów

Limit to przydział wiadomości z żądaniami, które serwer proxy interfejsu API może obsłużyć w określonym czasie, np. w ciągu minuty, godziny, dnia, tygodnia lub miesiąca. Zasady utrzymują liczniki, które zliczają liczbę żądań otrzymanych przez serwer proxy interfejsu API. Ta funkcja umożliwia dostawcom interfejsów API egzekwowanie limitów liczby wywołań interfejsu API wykonywanych przez aplikacje w określonym przedziale czasu. Za pomocą zasad dotyczących limitów możesz na przykład ograniczyć liczbę żądań aplikacji do 1 na minutę lub 10 tys. na miesiąc.

Jeśli np. limit wynosi 10 tys. wiadomości miesięcznie, ograniczenie szybkości zaczyna się po wysłaniu 10-tysięcznej wiadomości. Nie ma znaczenia, czy 10 000 wiadomości zostało zliczonych pierwszego czy ostatniego dnia tego okresu. Do momentu automatycznego zresetowania licznika limitu na koniec określonego przedziału czasu lub do momentu wyraźnego zresetowania limitu za pomocą zasad resetowania limitu nie są dozwolone żadne dodatkowe żądania.

Odmiana limitu o nazwie SpikeArrest zapobiega nagłym wzrostom ruchu, które mogą być spowodowane nagłym wzrostem wykorzystania, błędami klientów lub złośliwymi atakami. Więcej informacji o zasadach SpikeArrest znajdziesz w zasadach dotyczących ochrony przed nagłymi wzrostami ruchu.

Limity dotyczą poszczególnych proxy interfejsów API i nie są rozdzielane między nimi. Jeśli na przykład produkt API zawiera 3 proxy interfejsów API, pojedynczy limit nie jest współdzielony przez wszystkie 3 proxy, nawet jeśli wszystkie 3 używają tej samej konfiguracji zasady limitu.

Typy zasad dotyczących limitów

Zasady dotyczące limitów obsługują kilka różnych typów zasad: domyślne, calendar, flexirollingwindow. Każdy typ określa, kiedy licznik limitu zaczyna działać i kiedy jest resetowany. Pokazuje to tabela poniżej:

Jednostka czasu Resetowanie do wartości domyślnej (lub null) resetowanie kalendarza, elastyczne resetowanie
minuta Początek następnej minuty 1 minutę po: <StartTime> Minutę po pierwszym żądaniu
godzina 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 GMT na koniec tygodnia Tydzień po: <StartTime> Tydzień po pierwszej prośbie
miesiąc Ostatniego dnia miesiąca o godzinie 00:00 czasu GMT Miesiąc (28 dni) po: <StartTime> Miesiąc (28 dni) po pierwszej prośbie

W przypadku elementu type="calendar" musisz podać wartość <StartTime>.

Tabela nie zawiera wartości typu rollingwindow. Limity okna cyklicznego działają poprzez ustawienie rozmiaru „okna” limitu, np. okna godzinnego lub dziennego. Gdy nadejdzie nowe żądanie, zasady określają, czy w przeszłości w określonym „oknie” czasowym limit został przekroczony.

Możesz na przykład zdefiniować 2-godzinny okres, w którym można wysłać 1000 żądań. Nowe żądanie wpływa o 16:45.Zasady obliczają liczbę żądań w ciągu ostatnich 2 godzin, czyli liczbę żądań od 14:45. Jeśli w tym dwugodzinnym przedziale czasowym limit nie został przekroczony, żądanie jest dozwolone.

Minutę później, o 16:46, pojawia się kolejna prośba. Teraz zasady obliczają liczbę limitów od godziny 14:46, aby sprawdzić, czy limit został przekroczony.

W przypadku typu rollingwindow licznik nigdy się nie resetuje, ale jest ponownie obliczany przy każdym żądaniu.

Informacje o licznikach limitów

Domyślnie zasady dotyczące limitu utrzymują jeden licznik, niezależnie od tego, ile razy odwołujesz się do nich w proxy interfejsu API. Nazwa licznika limitu zależy od atrybutu name zasad.

Załóżmy, że tworzysz zasadę dotyczącą limitów o nazwie MyQuotaPolicy z limitem 5 żądań i umieszczasz ją w kilku przepływach (A, B i C) w proxy interfejsu API. Mimo że jest używana w wielu procesach, ma jeden licznik, który jest aktualizowany przez wszystkie instancje zasady:

  • Wykonanie przepływu A -> Wykonanie zasady MyQuotaPolicy, a jej licznik = 1
  • Wykonanie przepływu B -> wykonanie zasady MyQuotaPolicy, a jej licznik = 2
  • Wykonanie przepływu A -> wykonanie zasady MyQuotaPolicy, a jej licznik = 3
  • Wykonany zostaje przepływ C -> wykonana zostaje zasada MyQuotaPolicy, a jej licznik ma wartość 4.
  • Wykonanie przepływu A -> Wykonanie zasady MyQuotaPolicy, a jej licznik = 5

Kolejne żądanie do dowolnego z tych 3 procesów zostanie odrzucone, ponieważ licznik limitu osiągnął swój limit.

Używanie tej samej zasady dotyczącej limitu w więcej niż 1 miejscu w przepływie proxy interfejsu API, co może nieumyślnie spowodować szybsze wyczerpanie limitu niż oczekiwano, jest anty-wzorcem opisanym w książce „The Book of Apigee Edge Antipatterns”.

Możesz też zdefiniować w proxy interfejsu API kilka zasad dotyczących limitów i używać różnych zasad w każdym przepływie. Każda zasada dotycząca limitu utrzymuje własny licznik na podstawie atrybutu name zasady.

Możesz też użyć elementów <Class> lub <Identifier> w zasadach dotyczących limitów, aby zdefiniować wiele unikalnych liczników w jednych zasadach. Dzięki tym elementom pojedyncze zasady mogą utrzymywać różne liczniki w zależności od 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><Identifier> znajdziesz w przykładach powyżej.

Notacja czasu

Wszystkie godziny limitu są ustawione na strefę czasową uniwersalnego czasu koordynowanego (UTC).

Notacja czasu przydziału jest zgodna z międzynarodowym standardem notacji daty określonym w normie ISO 8601.

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

Godzina jest określana w formacie hours:minutes:seconds. Na przykład 23:59:59 oznacza czas na sekundę przed północą.

Pamiętaj, że dostępne są 2 notacje: 00:00:0024:00:00, które pozwalają odróżnić 2 północe, które mogą być powiązane z jedną datą. Dlatego 2015-02-04 24:00:00 to ta sama data i godzina co 2015-02-05 00:00:00. Zwykle preferowany jest ten drugi zapis.

Pobieranie ustawień limitu z konfiguracji produktu API

Limity możesz ustawić w konfiguracjach usług API. Limity te nie wymuszają automatycznie limitu. Zamiast tego możesz odwołać się do ustawień limitu usługi w zasadach dotyczących limitów. Oto niektóre zalety ustawienia limitu produktu, do którego będą się odwoływać zasady dotyczące limitów:

  • Zasady limitów mogą używać jednolitego ustawienia we wszystkich proxy interfejsów API w produkcie API.
  • Możesz wprowadzać zmiany w ustawieniu limitu w produkcie interfejsu API w czasie działania, a zasady limitów, które odwołują się do tej wartości, będą automatycznie aktualizować wartości limitów.

Więcej informacji o korzystaniu z ustawień limitu z produktu interfejsu API znajdziesz w przykładzie „Dynamiczny limit” powyżej.

Informacje o konfigurowaniu produktów interfejsu API z limitami wykorzystania znajdziesz w artykule Tworzenie produktów interfejsu API.

Odwołanie do elementu

Poniżej znajdziesz elementy i atrybuty, które możesz skonfigurować w ramach tych zasad. Pamiętaj, że niektóre kombinacje elementów wykluczają się wzajemnie lub nie są wymagane. Przykłady konkretnych zastosowań znajdziesz w próbkach. Poniższe zmienne verifyapikey.VerifyAPIKey.apiproduct.* są dostępne domyślnie, gdy do sprawdzenia klucza interfejsu API aplikacji w żądaniu używana jest zasada Verify API Key o nazwie „VerifyAPIKey”. Wartości zmiennych pochodzą z ustawień limitu w usłudze API, z którą jest powiązany klucz, zgodnie z opisem w sekcji Pobieranie 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 <Quota>

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

Poniższe atrybuty są specyficzne dla tych zasad.

Atrybut Opis Domyślny Obecność
typ

Użyj tego parametru, aby określić, kiedy i w jaki sposób licznik limitu sprawdza wykorzystanie limitu. Więcej informacji znajdziesz w artykule Rodzaje zasad dotyczących limitów.

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

Prawidłowe wartości:

  • calendar: skonfigurować limit na podstawie określonego czasu rozpoczęcia. Licznik limitu dla każdej aplikacji jest odświeżany na podstawie ustawionych przez Ciebie wartości <StartTime>, <Interval><TimeUnit>.
  • rollingwindow: skonfigurować limit, który do określania wykorzystania limitu używa „okna ruchomego”. Za pomocą elementu rollingwindow określasz rozmiar okna za pomocą elementów <Interval><TimeUnit>, np. 1 dzień. Gdy nadejdzie żądanie, Edge sprawdza dokładny czas jego otrzymania (np. 17:01), liczy liczbę żądań, które nadeszły od tego czasu do 17:01 poprzedniego dnia (1 dzień), i określa, czy w tym przedziale czasu limit został przekroczony.
  • flexi: skonfiguruj limit, który powoduje rozpoczęcie odliczania po otrzymaniu pierwszego żądania z aplikacji i resetuje się na podstawie wartości <Interval>, <TimeUnit>.
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 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> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

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

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; 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 name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Allow>

Określa limit liczby dla limitu. Jeśli licznik zasady osiągnie tę wartość, kolejne wywołania będą odrzucane do momentu zresetowania licznika.

Poniżej przedstawiamy 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 określisz zarówno count, jak i countRef, pierwszeństwo ma parametr countRef. Jeśli countRef nie zostanie rozpoznane w czasie działania, 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 parametru, aby określić liczbę wiadomości dla limitu.

Na przykład wartość atrybutu count wynosząca 100, Interval wynosząca 1 i TimeUnit wynosząca miesiąc określają limit 100 wiadomości miesięcznie.

2000 Opcjonalny
countRef

Użyj, aby określić zmienną przepływu zawierającą liczbę wiadomości dla limitu. countRef ma pierwszeństwo przed atrybutem count.

brak Opcjonalny

Element <Allow>/<Class>

Element <Class> umożliwia warunkowe określanie wartości elementu <Allow> na podstawie wartości zmiennej przepływu. W przypadku każdego innego tagu podrzędnego <Allow> tagu <Class> zasady utrzymują inny licznik.

Aby użyć elementu <Class>, określ zmienną przepływu za pomocą atrybutu ref w tagu <Class>. Edge używa następnie wartości zmiennej przepływu, aby wybrać jeden z <Allow> tagów podrzędnych i 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. 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ść: Opcjonalny
Typ: Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność
ref

Użyj tej opcji, aby określić zmienną przepływu zawierającą klasę limitu.

brak Wymagane

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

Element <Allow> określa limit licznika limitu zdefiniowanego przez element <Class>. W przypadku każdego innego tagu podrzędnego <Allow> tagu <Class> zasady utrzymują 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 utrzymuje 2 liczniki limitów o nazwach peak_timeoff_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 limitu dla licznika. brak Wymagane

Element <Interval>

Użyj, aby określić liczbę całkowitą (np. 1, 2, 5, 60 itd.), która będzie powiązana z określonym przez Ciebie TimeUnit (minuta, godzina, dzień, tydzień lub miesiąc) w celu określenia przedziału czasu, w którym Edge oblicza wykorzystanie limitu.

Na przykład Interval wynoszący 24TimeUnit wynoszącym 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

Użyj, aby określić zmienną przepływu zawierającą interwał dla limitu. ref ma pierwszeństwo przed wartością interwału określoną wprost. Jeśli podasz zarówno odwołanie, jak i wartość, pierwszeństwo ma odwołanie. Jeśli ref nie zostanie rozpoznany w czasie działania, użyta zostanie wartość.

brak Opcjonalny

Element <TimeUnit>

Użyj tej opcji, aby określić jednostkę czasu, do której odnosi się limit.

Na przykład Interval wynoszący 24TimeUnit wynoszącym 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ślny Obecność
ref Użyj tego parametru, aby określić zmienną przepływu zawierającą jednostkę czasu dla limitu. ref ma pierwszeństwo przed jawną wartością interwału. Jeśli ref nie zostanie rozpoznany w czasie działania, używana jest wartość. brak Opcjonalny

Element <StartTime>

Gdy parametr type ma wartość calendar,, określa datę i godzinę, od których licznik limitu zacznie zliczać żądania, niezależnie od tego, czy z jakichkolwiek aplikacji wpłynęły jakieś żądania.

Na przykład:

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

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

Element <Distributed>

Instalacja Edge może używać co najmniej 1 procesora wiadomości do przetwarzania żądań. Ustaw ten element na true, aby określić, że zasady mają utrzymywać centralny licznik i nieprzerwanie synchronizować go na wszystkich procesorach wiadomości. Procesory wiadomości mogą znajdować 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 procesorów komunikatów nie jest udostępniana:

<Distributed>true</Distributed>

Aby zagwarantować, że liczniki są zsynchronizowane i aktualizowane przy każdym żądaniu, ustaw wartości <Distributed><Synchronous> na „true”:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
Domyślnie: fałsz
Obecność: Opcjonalny
Typ: Wartość logiczna

Element <Synchronous>

Ustaw wartość true, aby synchronicznie zaktualizować licznik rozproszonego limitu. Oznacza to, że aktualizacja licznika następuje w tym samym czasie, w którym sprawdzany jest limit w żądaniu wysyłanym do interfejsu API. Ustaw wartość true, jeśli nie chcesz zezwalać na żadne wywołania interfejsu API przekraczające limit.

Ustaw wartość false, aby zaktualizować licznik limitu asynchronicznie. Oznacza to, że niektóre wywołania interfejsu API przekraczające limit mogą zostać zrealizowane w zależności od tego, kiedy licznik limitu w centralnym repozytorium zostanie zaktualizowany asynchronicznie. Nie musisz się jednak obawiać potencjalnego wpływu na wydajność związanego z aktualizacjami synchronicznymi.

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

<Synchronous>false</Synchronous>
Domyślnie: fałsz
Obecność: Opcjonalny
Typ: Wartość logiczna

Element <AsynchronousConfiguration>

Konfiguruje interwał synchronizacji między rozproszonymi licznikami limitów, gdy element konfiguracji zasady <Synchronous> nie występuje lub występuje i ma wartość false.

Synchronizację możesz przeprowadzić 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. Wykluczają się one wzajemnie. Na przykład

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

lub

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

Kompleks budowlany

Element <AsynchronousConfiguration>/<SyncIntervalInSeconds>

Użyj tego ustawienia, aby zastąpić domyślne działanie, w którym aktualizacje asynchroniczne są wykonywane po upływie 10 sekund.

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

Odstęp czasu synchronizacji musi wynosić co najmniej 10 sekund, zgodnie z opisem w temacie Limity.

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

Liczba całkowita

Element <AsynchronousConfiguration>/<SyncMessageCount>

Określa liczbę żądań we wszystkich procesorach wiadomości Apigee między aktualizacjami limitu.

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

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

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

Liczba całkowita

Element <Identifier>

Użyj elementu <Identifier>, aby skonfigurować zasady tworzenia unikalnych liczników na podstawie zmiennej przepływu.

Możesz tworzyć unikalne liczniki dla cech zdefiniowanych przez zmienną przepływu. Możesz na przykład użyć adresu e-mail dewelopera, aby powiązać limit z określonym deweloperem. Do identyfikowania limitu możesz używać różnych zmiennych, zarówno niestandardowych, jak i zdefiniowanych wstępnie, np. tych dostępnych w ramach zasady Weryfikuj klucz interfejsu API. Zobacz też dokumentację zmiennych.

Jeśli nie użyjesz tego elementu, zasady będą korzystać z jednego licznika, który będzie stosowany do limitu.

Ten element jest również omówiony w tym poście na forum społeczności Apigee: Quota identifier across different policies (Identyfikator limitu w różnych zasadach).

<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 przypadku żądania. 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 API lub innej cechy.

Najczęściej używanym identyfikatorem aplikacji jest <Identifier>client_id. client_id to inna nazwa klucza interfejsu API lub klucza klienta, który jest generowany dla aplikacji podczas rejestracji w organizacji w Apigee Edge. Możesz użyć tego identyfikatora, jeśli masz włączone zasady autoryzacji klucza interfejsu API lub OAuth dla interfejsu API.

W niektórych przypadkach ustawienia limitu muszą być pobierane, gdy nie jest dostępny żaden client_id, np. gdy nie ma zasad bezpieczeństwa. W takich sytuacjach możesz użyć zasady Access Entity, aby pobrać odpowiednie ustawienia usługi API, a następnie wyodrębnić wartości za pomocą zasady ExtractVariables i użyć wyodrębnionej zmiennej kontekstowej w zasadzie Quota. Więcej informacji znajdziesz w zasadach dotyczących podmiotu dostępu.

Nie dotyczy Opcjonalny

Element <MessageWeight>

Użyj, aby określić wagę przypisaną do każdej wiadomości. Użyj wagi wiadomości, aby zwiększyć wpływ wiadomości z prośbą, które np. zużywają więcej zasobów obliczeniowych niż inne.

Na przykład chcesz, aby wiadomości POST były 2 razy „cięższe” lub droższe niż wiadomości GET. Dlatego w przypadku metody POST ustawiasz wartość MessageWeight na 2, a w przypadku metody GET – na 1. Możesz nawet ustawić wartość MessageWeight na 0, aby żądanie nie miało wpływu na licznik. W tym przykładzie, jeśli limit wynosi 10 wiadomości na minutę, a MessageWeight dla żądań POST to 2, limit zezwala na 5 żądań POST w dowolnym 10-minutowym przedziale czasu. Wszelkie dodatkowe żądania POST lub GET przed zresetowaniem licznika są odrzucane.

Wartość reprezentująca MessageWeight musi być określona przez zmienną przepływu i może być wyodrębniona z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON albo 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ść: Opcjonalny
Typ:

Liczba całkowita

Zmienne przepływu

Gdy zasada dotycząca limitu zostanie wykonana, automatycznie wypełnią się te wstępnie zdefiniowane zmienne Flow: 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 wykorzystania w przedziale limitu.
ratelimit.{policy_name}.available.count Długi Tylko do odczytu Zwraca liczbę dostępnych limitów w przedziale limitu.
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, kiedy limit wygasa i rozpoczyna się nowy przedział limitu.

Gdy typ zasady dotyczącej limitu to rollingwindow, ta wartość jest nieprawidłowa, ponieważ interwał limitu nigdy nie wygasa.

ratelimit.{policy_name}.identifier Ciąg znaków Tylko do odczytu Zwraca odwołanie do identyfikatora (klienta) dołączone do zasad.
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ługi Tylko do odczytu Zwraca dozwoloną liczbę limitów zdefiniowaną 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 miejsc w klasie.
ratelimit.{policy_name}.class.exceed.count Długi Tylko do odczytu Zwraca liczbę żądań, które przekraczają limit w klasie w bieżącym przedziale 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 przedziałach limitu, więc jest to suma wartości class.exceed.count we wszystkich przedziałach limitu.
ratelimit.{policy_name}.failed Wartość logiczna Tylko do odczytu

Określa, czy zasada nie została spełniona (prawda lub fałsz).

Odwołanie 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>.
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.
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ą).
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.
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.
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.
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.
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.
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.
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.
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.

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

Zasady ResetQuota

Zasady SpikeArrest

Porównanie zasad dotyczących limitów, ochrony przed nagłymi wzrostami i jednoczesnych limitów szybkości