Zasady dotyczące limitów

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:0024: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>

&lt;Quota&gt; 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ść type, licznik będzie zaczynać się od początku. minuty/godziny/dzień/tydzień/miesiąc.

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

  • calendar: skonfiguruj limit na podstawie jawnego czasu rozpoczęcia. Limit licznik dla każdej aplikacji jest odświeżany na podstawie <StartTime>, <Interval> i <TimeUnit> ustawione przez Ciebie wartości.
  • rollingwindow: skonfiguruj limit używający „okna ruchomego” do określać wykorzystanie limitu. Korzystając z metody rollingwindow, określasz rozmiar okna za pomocą elementów <Interval> i <TimeUnit>; np. 1 dzień. Po otrzymaniu żądania Edge sprawdza dokładny moment jego przesłania (np. 17:01), zlicza liczbę żądań napływających między tym dniem a godz. 17:01 poprzedniego dnia (1 dzień) i określa, czy został przekroczony limit to okno.
  • flexi: skonfiguruj limit, który spowoduje uruchomienie licznika, gdy jest odbierana z aplikacji jako pierwsza i resetowana na podstawie wartości <Interval>, i <TimeUnit>.
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 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

&lt;Allow&gt; 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 count wynosi 100, Interval z 1, i TimeUnit miesiąca określają limit 100 wiadomości miesięcznie.

2000 Opcjonalnie
countRef

Umożliwia określenie zmiennej przepływu zawierającej liczbę wiadomości w ramach limitu. Atrybut countRef ma pierwszeństwo przed atrybutem count.

brak Opcjonalnie

&lt;Allow&gt;/&lt;Class&gt; 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

&lt;Allow&gt;/&lt;Class&gt;/&lt;Allow&gt; 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

&lt;Interval&gt; 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. ref ma pierwszeństwo przed określonym przedziałem czasu . Jeśli określone jest zarówno odwołanie, jak i wartość, to odwołanie ma priorytet. Jeśli wartość ref nie jest rozpoznawana w czasie działania, jest używana wartość.

brak Opcjonalnie

&lt;TimeUnit&gt; 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 minute, hour, day, week, czy month.

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

&lt;StartTime&gt; 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

&lt;Synchronous&gt; 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

&lt;AsynchronousConfiguration&gt; 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

&lt;AsynchronousConfiguration&gt;/&lt;SyncIntervalInSeconds&gt; 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

&lt;AsynchronousConfiguration&gt;/&lt;SyncMessageCount&gt; 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

&lt;Identifier&gt; element

Użyj elementu <Identifier>, aby skonfigurować zasadę do tworzenia unikalnych na podstawie zmiennej przepływu.

. Możesz utworzyć unikalne liczniki dla cech zdefiniowanych przez zmienną przepływu. Przykład: możesz użyć adresu e-mail dewelopera, by powiązać limit z konkretnym deweloperem. Za pomocą zróżnicowania zmiennych w celu określenia limitu, niezależnie od tego, czy używasz zmiennych niestandardowych, lub wstępnie zdefiniowane zmienne, np. dostępne w ramach zasad weryfikacji klucza interfejsu API. Zobacz też odwołania do zmiennych.

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.

<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 po zarejestrowaniu jej w organizacji Apigee Edge Tego identyfikatora możesz używać, jeśli masz włączony klucz interfejsu API lub protokół OAuth zasady autoryzacji i autoryzacji dla interfejsu API.

W pewnych okolicznościach należy pobrać ustawienia limitów, jeśli nie ma client_id jest dostępny, na przykład jeśli nie jest skonfigurowana żadna zasada zabezpieczeń. W w takich sytuacjach można użyć zasady dotyczącej jednostki dostępu, aby pobrać odpowiedni interfejs API ustawień produktu, wyodrębnij wartości za pomocą funkcji ExtractVariables i używaj wyodrębnionych zmiennej kontekstowej w zasadzie dotyczącej limitów. Aby uzyskać więcej informacji, zapoznaj się z sekcją Dostęp do jednostki .

Nie dotyczy Opcjonalnie

&lt;MessageWeight&gt; 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 rollingwindow, ta wartość jest nieprawidłowa ponieważ interwał limitu nigdy nie wygasa.

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>.
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 resetowania limitów

SpikeArrest

Porównanie Zasady dotyczące limitu, zwiększenia liczby żądań i limitów równoczesnych żądań