Questa pagina si applica a Apigee e Apigee ibridi.
Visualizza
documentazione di Apigee Edge.
Panoramica
Una quota è un'allocazione di messaggi di richiesta che un proxy API è in grado di gestire in un periodo di tempo. come minuto, ora, giorno, settimana o mese. Il criterio per le quote gestisce i contatori che calcolano il numero di richieste ricevute dal proxy API. Questa funzionalità consente ai provider API di applicare limiti Il numero di chiamate API effettuate dalle app in un intervallo di tempo. Utilizzando i criteri per le quote, puoi Ad esempio, limita le app a 1 richiesta al minuto o a 10.000 richieste al mese.
Questo criterio è una norma estendibile e il suo utilizzo potrebbe comportare costi o di utilizzo delle applicazioni, a seconda della licenza Apigee. Per informazioni sui tipi di norme e le implicazioni per l'utilizzo, consulta Tipi di criteri.
Ad esempio, se una quota è definita come 10.000 messaggi al mese, la limitazione di frequenza inizia dopo il 10.000° messaggio. Non importa se sono stati conteggiati 10.000 messaggi il primo giorno o l'ultimo giorno di tale periodo; non sono consentite richieste aggiuntive fino al contatore della quota viene reimpostata automaticamente alla fine dell'intervallo di tempo specificato o finché la quota non viene esplicitamente reimpostare la quota usando il criterio ResetQuota.
Una variante del criterio per le quote, il criterio SpikeArrest, impedisce i picchi (o burst) di traffico che possono essere causate da un improvviso aumento dell'utilizzo, da client con bug o da attacchi dannosi.
Utilizza il criterio per le quote per configurare il numero di messaggi di richiesta consentiti da un proxy API un periodo di tempo, ad esempio minuto, ora, giorno, settimana o mese. Puoi impostare la quota in modo che uguale per tutte le app che accedono al proxy API oppure puoi impostare la quota in base a:
- Il prodotto che contiene il proxy API
- L'app che richiede l'API
- Lo sviluppatore dell'app
- Molti altri criteri
Non utilizzare il criterio per le quote per proteggerti dai picchi di traffico complessivi. A questo scopo, utilizza Criterio di SpikeArrest.
Video
Questi video introducono la gestione delle quote con i criteri per le quote:
Introduzione
Quota dinamica
Distribuito e Sincrona
Peso del messaggio
Calendar
Finestre scorrevoli
Flexi
Quota condizionale
Variabili di flusso
Gestione degli errori
Tipi di criteri per le quote
Il criterio per le quote supporta diversi modi per avviare e reimpostare il contatore della quota.
Puoi definire quali utilizzare con l'attributo type
nell'elemento <Quota>
,
come illustrato nell'esempio seguente:
<Quota name="QuotaPolicy" type="calendar"> ... </Quota>
I valori validi di type
includono:
calendar
: configura una quota in base a un'ora di inizio esplicita. La quota di ogni app viene aggiornato in base<StartTime>
,<Interval>
e<TimeUnit>
valori che hai impostato.rollingwindow
: configura una quota che utilizza una "finestra temporale" a determinare l'utilizzo della quota. Conrollingwindow
, puoi determinare le dimensioni della finestra con elementi<Interval>
e<TimeUnit>
; ad esempio 1 giorno Quando arriva una richiesta, Apigee esamina il momento esatto in cui è avvenuta (ad esempio 17:01), conteggia il numero di richieste ricevute tra quella data e le 17:01 il giorno precedente (1 giorno) e determina se la quota è stata superata o meno durante quella finestra.flexi
: configura una quota che fa sì che il contatore inizi quando viene eseguita la il primo messaggio di richiesta viene ricevuto da un'app e viene reimpostato in base i valori<Interval>
e<TimeUnit>
.
La tabella seguente descrive le reimpostazioni della quota per ciascun tipo:
Unità di tempo | Tipo | ||
---|---|---|---|
default (o nullo) |
calendar |
flexi |
|
minuto | Inizio del prossimo minuto | Un minuto dopo <StartTime> |
Un minuto dopo la prima richiesta |
ora | Inizio della prossima ora | Un'ora dopo <StartTime> |
Un'ora dopo la prima richiesta |
giorno | Mezzanotte GMT del giorno corrente | 24 ore dopo <StartTime> |
24 ore dopo la prima richiesta |
settimana | Mezzanotte GMT Domenica alla fine della settimana | Una settimana dopo <StartTime> |
Una settimana dopo la prima richiesta |
mese | Mezzanotte GMT dell'ultimo giorno del mese | Un mese (28 giorni) dopo <StartTime> |
Un mese (28 giorni) dopo la prima richiesta |
Per type="calendar"
, devi specificare il valore di
<StartTime>
.
La tabella non elenca il valore per il tipo rollingwindow
. Finestra temporale continua
funzionano impostando la dimensione di una finestra di quota, ad esempio una finestra di un'ora o di un giorno.
Quando
quando arriva una nuova richiesta, il criterio determina se la quota è stata superata in passato
una finestra temporale.
Ad esempio, definisci una finestra di due ore che consente 1000 richieste. Una nuova richiesta alle 16:45.Il criterio calcola il conteggio delle quote delle ultime due ore, ovvero il numero di richieste a partire dalle 14:45. Se il limite della quota non è stato superato nel di due ore, la richiesta è consentita.
Un minuto dopo, alle 16:46, è in arrivo un'altra richiesta. Ora il criterio calcola numero di quote dalle 14:46 per determinare se il limite è stato superato.
Per il tipo rollingwindow
, il contatore non viene mai reimpostato, ma viene
viene ricalcolato a ogni richiesta.
Informazioni sui contatori delle quote
Quando un criterio per le quote viene eseguito in un flusso proxy API, il contatore delle quote viene ridotto. Quando raggiunge il limite, non sono consentite ulteriori chiamate API associate a quel contatore. In base alla configurazione, il criterio per le quote può utilizzare uno o più contatori. È importante capire quando più sono impiegati e come si comportano.
Come vengono conteggiate le quote per i prodotti API
Se il proxy API è incluso in un prodotto API, puoi configurare i criteri per le quote in modo che utilizzino la quota regole definite in tale prodotto. Un prodotto API può specificare regole di quota A livello di prodotto o a livello di singole operazioni.
Viene mantenuto un contatore della quota separato ciascuna operazione definita in un prodotto API, e vengono osservate le seguenti regole:
- Se per un'operazione è stata definita una quota, regole per la quota dell'operazione hanno la precedenza su quelle definite a livello di prodotto. R viene creato un contatore della quota separato per ogni operazione. Qualsiasi chiamata API al percorso di un'operazione incrementa il contatore.
- Se per un'operazione non è stata definita una quota, la regola della quota a livello di prodotto viene applicata; tuttavia, viene comunque mantenuto un contatore separato della quota per l'operazione. È è importante capire in questo caso che anche se la regola per la quota viene presa definizione, l'operazione mantiene il proprio contatore.
- Se il prodotto API non include definizioni di quota, né a livello di prodotto né di operazione, regole di quota specificate nel si applicano le norme; tuttavia, anche in questo caso, viene mantenuto un contatore delle quote separato per ogni operazione nel prodotto API.
Le seguenti sezioni descrivono in maggiore dettaglio le opzioni e il comportamento dei contatori.
Configurazione dei contatori a livello di proxy API
È possibile configurare un prodotto API per mantenere un conteggio delle quote nell'ambito del proxy API. Nel In questo caso, la configurazione della quota specificata a livello di prodotto API è condivisa da tutte le operazioni per cui non è specificata una quota propria. L'effetto di questa configurazione è creare un modello a livello di proxy API per questo prodotto API.
Per ottenere questa configurazione, è necessario utilizzare
/apiproducts API Apigee
di creare o aggiornare il prodotto e impostare
.
Attributo quotaCountScope
a PROXY
nella richiesta di creazione o aggiornamento.
Con la configurazione PROXY
, tutte le operazioni definite per il prodotto API
associati allo stesso proxy e che non dispongono di un proprio contatore, condivideranno lo stesso
di quota impostato a livello di prodotto API.
In Figura 1, Operazione 1 e 2
sono associate al proxy1 e all’operazione 4 e 5 sono associate al proxy3. Poiché
quotaCounterScope=PROXY
è impostata nel prodotto API, ciascuna di queste operazioni
condivide l'impostazione della quota a livello di prodotto API. Tieni presente che, sebbene queste operazioni condividano lo stesso
configurazione della quota, utilizzano contatori separati in base alla relativa associazione proxy. Dall'altra parte
l'operazione 3 ha una propria configurazione di quota, per cui non è interessata dal
quotaCounterScope
flag.
Figura 1: utilizzo del flag quotaCounterScope
Per impostazione predefinita, se un'operazione se non ha una quota definita, la regola per la quota a livello di prodotto viene applicata; tuttavia, viene comunque mantenuto un contatore separato della quota per l'operazione.
Come vengono conteggiate le quote se non è in uso nessun prodotto API
Se non esistono prodotti API associati a un proxy API, un criterio per le quote gestisce un unico contatore, indipendentemente dal numero di volte che
farvi riferimento in un proxy API. Il nome del contatore della quota è basato su
l'attributo name
del criterio.
Ad esempio, crei un criterio per le quote denominato MyQuotaPolicy
con un limite di 5
richieste e lo collochi su più flussi (flusso A, B e C) nel proxy API. Anche se è
utilizzato in più flussi, mantiene un unico contatore che viene aggiornato da tutte le istanze
norme:
- Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore = 1
- Viene eseguito il flusso B -> MyQuotaPolicy viene eseguito e il relativo contatore è = 2
- Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è = 3
- Viene eseguito il flusso C -> MyQuotaPolicy viene eseguito e il relativo contatore è uguale a 4
- Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è pari a 5
La richiesta successiva a uno dei tre flussi viene rifiutata perché il contatore della quota ha raggiunto il suo limite.
Utilizzare lo stesso criterio per le quote in più di una posizione in un flusso proxy API, con la possibilità causare involontariamente l'esaurimento della quota più velocemente del previsto è un anti-pattern descritto in Introduzione agli anti-pattern.
In alternativa, puoi definire più criteri per le quote nel proxy API e utilizzare un altro
in ogni flusso. Ogni criterio per le quote gestisce il proprio contatore, basato su
l'attributo name
del criterio.
Creazione di più contatori tramite la configurazione dei criteri
Puoi utilizzare lo
Elementi <Class>
o <Identifier>
in
il criterio per le quote per definire più contatori univoci in un unico criterio. Utilizzando questi
, un'unica norma può mantenere diversi contatori in base all'app che effettua la richiesta,
lo sviluppatore dell'app che effettua la richiesta, un ID client o un altro identificatore client e altro ancora. Consulta le
esempi sopra per ulteriori informazioni sull'uso
Elementi <Class>
o <Identifier>
.
Notazione dell'ora
Tutti i tempi di quota sono impostati sul valore Coordinated Universal Ora (UTC).
La notazione dell'ora delle quote segue la notazione della data standard internazionale definita in Internazionale Standard ISO 8601.
Le date sono definite anno, mese e giorno nel seguente formato: YYYY-MM-DD.
Ad esempio, 2021-02-04
rappresenta il 4 febbraio 2021.
L'ora del giorno viene espressa in ore, minuti e secondi nel seguente formato:
hours:minutes:seconds
. Ad esempio, 23:59:59
rappresenta il momento in cui
secondo prima di mezzanotte.
Tieni presente che sono disponibili due notazioni, 00:00:00
e 24:00:00
,
distinguere le due mezze notti che possono essere associate a una sola data. Di conseguenza, 2021-02-04
24:00:00
corrisponde alla stessa data e ora di 2021-02-05 00:00:00
. Il secondo è
di solito la notazione preferita.
Recupero delle impostazioni della quota dalla configurazione del prodotto API
Puoi impostare limiti di quota nelle configurazioni dei prodotti API. Questi limiti non vengono automaticamente applicare la quota. Puoi però fare riferimento alle impostazioni delle quote dei prodotti in un criterio per le quote. Ecco alcuni esempi vantaggi dell'impostazione di una quota sul prodotto per far riferimento ai criteri di quota:
- I criteri per le quote possono utilizzare un'impostazione uniforme su tutti i proxy API nel prodotto API.
- Puoi apportare modifiche in fase di runtime all'impostazione della quota in un prodotto API e ai criteri sulle quote che fanno riferimento al valore, i valori di quota vengono automaticamente aggiornati.
Per ulteriori informazioni sull'utilizzo delle impostazioni di quota da un prodotto API, consulta "Quota dinamica" dell'esempio precedente.
Per informazioni sulla configurazione di prodotti API con limiti di quota, consulta Gestione dei prodotti API.
Configurazione dei contatori delle quote condivise
In genere, il criterio per le quote conteggia tutte le richieste inviate a un proxy API. Per alcuni casi d'uso,
ti consigliamo di applicare in modo forzato il conteggio della quota delle richieste in entrata, ma anche di aumentare il conteggio della quota
target di risposte che soddisfano una condizione specificata.
Tre elementi dei criteri per le quote se utilizzati insieme: <SharedName>
, <CountOnly>
,
e <EnforceOnly>
, che ti consentono di
personalizzare i criteri per le quote per applicare la quota di richieste in entrata e conteggiare le risposte di destinazione in base a un
da te specificata.
Supponi, ad esempio, di voler aumentare il contatore della quota per un proxy API in cui le risposte
dalla destinazione del backend hanno un codice di stato HTTP 200
. Per raggiungere questo obiettivo
il conteggio, procedi nel seguente modo:
- Aggiungi un criterio per le quote al flusso di richiesta ProxyEndpoint con
<SharedName>
è impostato con un valore nome e l'elemento<EnforceOnly>
impostato sutrue
. - Aggiungi un altro criterio per le quote al flusso ProxyEndpoint Response con
<SharedName>
elemento impostato sullo stesso valore del nome del primo criterio e<CountOnly>
impostato sutrue
. - Inserisci il secondo criterio per le quote (quello con
<CountOnly>
) in una condizione che imposta la condizione in base alla quale incrementare il contatore della quota.
Per un esempio che mostra come utilizzare i contatori condivisi, consulta Contatori condivisi nella sezione Campioni.
Esempi
Questi esempi di codice dei criteri illustrano come iniziare e terminare i periodi di quota in base a:
Quota più dinamica
<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>
Le quote dinamiche consentono di configurare un singolo criterio per le quote che applica quote diverse impostazioni basate sulle informazioni passate ai criteri per le quote. Un altro termine per le impostazioni della quota in In questo contesto si tratta del piano di servizio. La quota dinamica controlla la posizione piano di servizio e poi applica in modo forzato queste impostazioni.
Ad esempio, quando crei un prodotto API, puoi scegliere di impostare la quota consentita limite, unità di tempo e intervallo. Tuttavia, l'impostazione di questi valori nel prodotto API non ne forza l'uso in un proxy API. Devi inoltre aggiungere un criterio per le quote al proxy API che legge questi valori. Consulta Creare API prodotti per saperne di più.
Nell'esempio precedente, il proxy API contenente il criterio per le quote utilizza una
Criterio VerifyAPIKey, denominato verify-api-key
, per convalidare la chiave API passata
in una richiesta. La
Il criterio per le quote accede alle variabili di flusso dal criterio VerifyAPIKey per leggere la quota
vengono impostati sul prodotto API.
Un'altra opzione è impostare attributi personalizzati su singoli sviluppatori o app e poi leggere quei valori nel criterio per le quote. Ad esempio, per impostare valori di quota diversi sviluppatore. imposti attributi personalizzati sullo sviluppatore contenente il limite, unità di tempo e intervallo. Quindi puoi fare riferimento a questi valori nel criterio per le quote come mostrato sotto:
<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>
Questo esempio utilizza anche le variabili di flusso VerificationAPIKey per fare riferimento agli attributi personalizzati impostati sullo sviluppatore.
Puoi utilizzare qualsiasi variabile per impostare i parametri del criterio per le quote. Queste variabili possono provengono da:
- Variabili di flusso
- Proprietà nel prodotto, nell'app o nello sviluppatore API
- Una mappa chiave-valore (KVM)
- Un'intestazione, un parametro di query, un parametro del modulo e altri
Per ogni proxy API, puoi aggiungere un criterio per le quote che faccia riferimento alla stessa variabile di tutti gli altri criteri per le quote in tutti gli altri proxy oppure il criterio per le quote può fare riferimento univoche per il criterio e il proxy in questione.
Ora di inizio
<Quota name="QuotaPolicy" type="calendar"> <StartTime>2021-02-18 10:30:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Per una quota con type
impostato su calendar
, devi definire una
esplicito <StartTime>
. Il valore dell'ora corrisponde all'ora GMT, non locale
nel tempo. Se non specifichi un valore <StartTime>
per un criterio di tipo
calendar
, Apigee emette un errore.
Il contatore delle quote per ogni app viene aggiornato in base ai <StartTime>
,
Valori <Interval>
e <TimeUnit>
. Per questo
Ad esempio, la quota inizia il conteggio alle 10:30 GMT del 18 febbraio 2021 e si aggiorna ogni
5 ore. Pertanto, il prossimo aggiornamento è alle 15:30 GMT del 18 febbraio 2021.
Contatore accessi
<Quota name="QuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Un proxy API ha accesso alle variabili di flusso impostate dal criterio per le quote. Puoi accedere queste variabili di flusso nel proxy API per eseguire l'elaborazione condizionale, monitora il criterio man mano che si avvicina al limite della quota, restituisci il contatore della quota corrente a un'app o ad altre motivi.
L'accesso alle variabili di flusso per il criterio si basa sui criteri
Attributo name
, per il criterio sopra indicato <Quota>
tu
accede alle sue variabili di flusso nel formato:
ratelimit.QuotaPolicy.allowed.count
: conteggio consentito.ratelimit.QuotaPolicy.used.count
: valore del contatore corrente.ratelimit.QuotaPolicy.expiry.time
: ora UTC in cui viene reimpostato il contatore.
Esistono molte altre variabili di flusso a cui puoi accedere, come descritto di seguito.
Ad esempio, puoi utilizzare il seguente criterioAssignMessage per restituire i valori di Variabili di flusso della quota come intestazioni di risposta:
<AssignMessage 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>
Contatori condivisi
L'esempio seguente illustra come configurare un contatore condiviso per un proxy API, in cui
viene incrementato anche quando
la risposta di destinazione è con stato HTTP 200
.
Poiché entrambi i criteri per le quote utilizzano lo stesso valore <SharedName>
,
I criteri per le quote condivideranno lo stesso contatore delle quote. Per ulteriori informazioni, consulta Configurazione dei contatori delle quote condivise.
Esempio di configurazione ProxyEndpoint:
<ProxyEndpoint name="default"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Enforce-Only</Name> <!--First quota policy enforces quota count --> </Step> </Request> <Response> <Step> <Name>Count-Only</Name> <!-- Second quota policy counts quota if call is successful --> <Condition>response.status.code = 200</Condition> </Step> </Response> <Response/> </PreFlow> <Flows/> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <HTTPProxyConnection> <BasePath>/quota-shared-name</BasePath> </HTTPProxyConnection> <RouteRule name="noroute"/> </ProxyEndpoint>
Esempio di primo criterio per le quote:
<Quota continueOnError="false" enabled="true" name="Enforce-Only" type="rollingwindow"> <DisplayName>Enforce-Only</DisplayName> <Properties/> <Allow count="5"/> <Interval>2</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Synchronous>true</Synchronous> <EnforceOnly>true</EnforceOnly> <SharedName>common-proxy</SharedName> <!-- Notice that SharedName value is the same for both Quota policies --> </Quota>
Esempio di criterio per la seconda quota:
<Quota continueOnError="false" enabled="true" name="Count-Only" type="rollingwindow"> <DisplayName>Count-Only</DisplayName> <Properties/> <Allow count="5"/> <Interval>2</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Synchronous>true</Synchronous> <CountOnly>true</CountOnly> <SharedName>common-proxy</SharedName> <!-- Same name as the first policy --> </Quota>
Prima richiesta
<Quota name="MyQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </Quota>
Utilizza questo codice campione per applicare una quota di 10.000 chiamate all'ora. Il criterio viene reimpostato il contatore della quota nella parte superiore di ogni ora. Se il contatore raggiunge la quota di 10.000 chiamate prima della fine dell'ora, le chiamate oltre le 10.000 vengono rifiutate.
Ad esempio, se il contatore parte da 2021-07-08 07:00:00
, viene reimpostato su
0 alle 2021-07-08 08:00:00
(1 ora dall'ora di inizio). Se il primo messaggio è
ricevuti alle ore 2021-07-08 07:35:28
e il numero dei messaggi raggiunge le 10.000
prima del giorno 2021-07-08 08:00:00
, le chiamate che superano questo conteggio vengono rifiutate
il conteggio viene reimpostato in cima all'ora.
Il tempo di reimpostazione del contatore si basa sulla combinazione di <Interval>
e
<TimeUnit>
. Ad esempio, se imposti <Interval>
su
12 per <TimeUnit>
di ora, poi il contatore viene reimpostato ogni dodici ore.
Puoi impostare <TimeUnit>
su minuto, ora, giorno, settimana o mese.
Puoi fare riferimento a questo criterio in più posizioni nel proxy API. Ad esempio, potresti posizionarlo su Proxy PreFlow in modo che venga eseguito su ogni richiesta. Oppure puoi inserire su più flussi nel proxy API. Se utilizzi questo criterio in più punti delle , mantiene un unico contatore aggiornato da tutte le istanze del criterio.
In alternativa, puoi definire più criteri per le quote nel proxy API. Ogni criterio per le quote
mantiene il proprio contatore basato sull'attributo name
del criterio.
Imposta identificatore
<Quota name="QuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>2021-02-18 10:00:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Per impostazione predefinita, un criterio per le quote definisce un singolo contatore per il proxy API, indipendentemente dal
l'origine di una richiesta. In alternativa, puoi utilizzare l'attributo <Identifier>
.
un criterio per le quote per mantenere contatori separati in base al valore
Attributo <Identifier>
.
Ad esempio, utilizza il tag <Identifier>
per definire contatori separati per
per ogni ID client. Quando viene inviata una richiesta al proxy, l'app client passa quindi un'intestazione contenente
clientID
, come mostrato nell'esempio precedente.
Puoi specificare qualsiasi variabile di flusso per l'attributo <Identifier>
. Per
Ad esempio, puoi specificare che un parametro di query denominato id
contiene il parametro
identificatore:
<Identifier ref="request.queryparam.id"/>
Se usi il criterio VerifyAPIKey per convalidare la chiave API o i criteri OAuthV2
con i token OAuth, puoi utilizzare le informazioni nella chiave API o nel token per definire
per lo stesso criterio per le quote. Ad esempio,
L'elemento <Identifier>
utilizza la variabile di flusso client_id
di un
Criterio VerifyAPIKey denominato verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Ogni valore client_id
univoco ora definisce il proprio contatore nella quota
.
Classe
<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>
Puoi impostare i limiti di quota in modo dinamico utilizzando un conteggio delle quote basato su classi. In questo esempio,
il limite della quota è determinato dal valore dell'attributo developer_segment
passata a ogni richiesta. La variabile può avere il valore platinum
o silver
. Se l'intestazione contiene un valore non valido, il criterio restituisce una quota
errore di violazione.
<Quota>
elemento
Di seguito sono riportati gli attributi e gli elementi secondari di <Quota>
. Tieni presente che alcuni elementi
si escludono a vicenda o non sono obbligatorie. Visualizza gli esempi per l'utilizzo specifico.
La
Le seguenti verifyapikey.my-verify-key-policy.apiproduct.*
variabili sono disponibili per impostazione predefinita quando
Viene utilizzato un criterio VerifyAPIKey denominato my-verify-key-policy
per controllare la chiave API dell'app nella richiesta.
I valori della variabile provengono dalle impostazioni della quota sul prodotto API a cui è associata la chiave
come descritto in Recupero delle impostazioni di quota dal prodotto API
configurazione.
<Quota continueOnError="false" enabled="true" name="Quota-3" type="calendar"> <DisplayName>Quota 3</DisplayName> <Allow count="UPPER_REQUEST_LIMIT" countRef="verifyapikey.my-verify-key-policy.apiproduct.developer.quota.limit"/> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="UPPER_LIMIT_DURING_PEAK"/> <Allow class="off_peak_time" count="UPPER_LIMIT_DURING_OFFPEAK"/> </Class> </Allow> <Interval ref="verifyapikey.my-verify-key-policy.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.my-verify-key-policy.apiproduct.developer.quota.timeunit">month</TimeUnit> <StartTime>2021-7-16 12:00:00</StartTime> <Distributed>false</Distributed> <Synchronous>false</ Synchronous> <AsynchronousConfiguration> <SyncIntervalInSeconds>20</ SyncIntervalInSeconds> <SyncMessageCount>5</ SyncMessageCount> </AsynchronousConfiguration> <Identifier/> <MessageWeight/> <UseQuotaConfigInAPIProduct> <DefaultConfig> <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.my-verify-key-policy.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.my-verify-key-policy.apiproduct.developer.quota.timeunit">month</TimeUnit> </DefaultConfig> </UseQuotaConfigInAPIProduct> </SharedName> </CountOnly> </EnforceOnly> </Quota>
I seguenti attributi sono specifici di questo criterio:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
tipo |
Imposta il tipo di criterio per le quote, che determina quando e come il contatore delle quote controlla l'utilizzo della quota e le modalità di reimpostazione. Se non imposti I valori validi sono:
Per una descrizione completa di ciascun tipo, consulta i criteri per le quote di classificazione. |
N/D | Facoltativo |
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno della norma. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
N/A | Obbligatorio |
continueOnError |
Impostalo su Imposta su |
false | Facoltativo |
enabled |
Imposta il criterio su Impostala su |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
false | Deprecata |
Elemento <DisplayName>
Utilizzalo in aggiunta all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/A Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
<Allow>
Specifica il limite di conteggio per la quota. Se il contatore per il criterio raggiunge questo limite le chiamate successive vengono rifiutate fino a quando il contatore non viene reimpostato.
Può contenere anche un elemento <Class>
che condiziona <Allow>
in base a una variabile di flusso.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo di numero intero o complesso |
Elemento principale |
<Quota>
|
Elementi secondari |
<Class> |
Di seguito sono riportati tre modi per impostare l'elemento <Allow>
:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
Se specifichi sia count
sia countRef
, countRef
ha la priorità. Se countRef
non si risolve in fase di runtime, il valore di
È in uso count
.
Puoi anche specificare un elemento <Class>
come elemento secondario di <Allow>
per determinare l'entità consentita
dei criteri in base a una variabile di flusso. Apigee abbina il valore della variabile di flusso
class
dell'elemento <Allow>
, come mostrato di seguito:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
La seguente tabella elenca gli attributi di <Allow>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
conteggio |
Utilizzalo per specificare un conteggio dei messaggi per la quota. Ad esempio, un valore dell'attributo |
2000 | Facoltativo |
countRef |
Utilizzalo per specificare una variabile di flusso contenente il conteggio dei messaggi per una quota.
|
nessuno | Facoltativo |
<Class>
Ti consente di condizionare il valore
dell'elemento <Allow>
in base al valore di una variabile di flusso. Per
ogni tag secondario <Allow>
di <Class>
,
il criterio mantiene uno diverso contatore.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Allow>
|
Elementi secondari |
<Allow> (figlio di <Class> ) |
Per utilizzare l'elemento <Class>
, specifica una variabile di flusso utilizzando il metodo
ref
all'elemento <Class>
. Apigee utilizza quindi il valore
per selezionare uno degli <Allow>
elementi secondari al fine di determinare la variabile di flusso
del criterio. Apigee abbina il valore della variabile di flusso a class
dell'elemento <Allow>
, come mostrato di seguito:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
In questo esempio, il contatore di quota corrente è determinato dal valore del parametro
time_variable
parametro di query passato a ogni richiesta. La variabile può avere un valore
di peak_time
o off_peak_time
. Se il parametro di query contiene un valore non valido
, il criterio restituisce un errore di violazione della quota.
La seguente tabella elenca gli attributi di <Class>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento | Consente di specificare una variabile di flusso contenente la classe di quota per una quota. | nessuno | Obbligatorio |
<Allow>
(figlio di <Class>
)
Specifica il limite per un contatore della quota
definita dall'elemento <Class>
. Per ogni
un altro tag secondario <Allow>
di <Class>
,
mantiene uno diverso contatore.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Class>
|
Elementi secondari |
Nessuna |
Ad esempio:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow count="5000"/> <Allow count="1000"/> </Class> </Allow>
In questo esempio, il criterio per le quote gestisce due contatori delle quote denominati
peak_time
e off_peak_time
. Quale di queste opzioni viene utilizzata dipende
parametro di query passato, come mostrato nell'esempio di <Class>
.
La seguente tabella elenca gli attributi di <Allow>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
classe | Definisce il nome del contatore della quota. | nessuno | Obbligatorio |
conteggio | Specifica il limite di quota per il contatore. | nessuno | Obbligatorio |
<Interval>
Specifica il numero di periodi di tempo in cui vengono calcolate le quote.
Valore predefinito | n/a |
Obbligatorio? | Obbligatorio |
Tipo | Numero intero |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Da utilizzare per specificare un numero intero (ad esempio, 1, 2, 5, 60 e così via) che verrà associato al valore
L'elemento <TimeUnit>
specificato (minuto, ora, giorno, settimana o mese) per determinare un intervallo di tempo
durante il quale Apigee calcola l'utilizzo della quota.
Ad esempio, un intervallo di 24
con <TimeUnit>
di hour
indica che la quota sarà calcolata nell'arco di 24 ore.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
La seguente tabella elenca gli attributi di <Interval>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento |
Utilizzalo per specificare una variabile di flusso contenente l'intervallo per un
quota. |
nessuno | Facoltativo |
<TimeUnit>
Specifica l'unità di tempo applicabile alla quota.
Valore predefinito | n/a |
Obbligatorio? | Obbligatorio |
Tipo | Stringa |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Seleziona tra minute
, hour
, day
,
week
, month
o year
.
Ad esempio, Interval
di 24
con
un TimeUnit
di hour
significa che la quota sarà
calcolati nell'arco di 24 ore.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Predefinita: | nessuno |
Presenza: | Obbligatorio |
Tipo: | Stringa |
La seguente tabella elenca gli attributi di <TimeUnit>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento | Specifica una variabile di flusso contenente l'unità di tempo per una quota. ref
ha la precedenza su un intervallo esplicito. Se ref
non risolvi in fase di runtime, viene utilizzato il valore dell'intervallo. |
nessuno | Facoltativo |
<StartTime>
Quando type
è impostato su calendar
, specifica la data
e l'ora in cui inizia il conteggio del contatore della quota, indipendentemente dal fatto che siano state
ricevuto da qualsiasi app.
Valore predefinito | n/a |
Obbligatorio? | Facoltativa (obbligatoria quando il criterio type è impostato su calendar ) |
Tipo | Stringa in ISO 8601 formato di data e ora |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Devi fornire un valore <StartTime>
esplicito quando è impostato type
a calendar
; non puoi utilizzare un riferimento a una variabile di flusso. Se specifichi
un valore <StartTime>
se non è impostato alcun valore di type
, Apigee restituisce
.
Ad esempio:
<StartTime>2021-7-16 12:00:00</StartTime>
<Distributed>
Determina se Apigee utilizza uno o più nodi per elaborare le richieste.
Valore predefinito | falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Impostalo su true
per specificare che il criterio deve mantenere una centrale
e sincronizzarlo continuamente su tutti i nodi. I nodi
possono essere in zone di disponibilità e/o regioni.
Se utilizzi il valore predefinito false
, potresti superare la quota per
il conteggio per ciascun nodo non è condiviso:
<Distributed>false</Distributed>
Per garantire che i contatori siano sincronizzati e aggiornati a ogni richiesta, imposta
<Distributed>
e da <Synchronous>
a true
:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
<Synchronous>
Determina se aggiornare in modo sincrono un contatore di quota distribuita.
Valore predefinito | falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Imposta su true
per aggiornare un contatore di quota distribuita in modo sincrono. Questo
gli aggiornamenti dei contatori vengono effettuati nello stesso momento in cui viene controllata la quota su una richiesta
all'API. Imposta su true
se è essenziale non consentire nessuna API
oltre la quota.
Imposta su false
per aggiornare il contatore della quota in modo asincrono. Ciò significa
è possibile che alcune chiamate API che superano la quota vengano andate a buon fine, a seconda di quando
il contatore delle quote nel repository centrale
viene aggiornato in modo asincrono. Tuttavia, non affronterai
il potenziale impatto sulle prestazioni associato agli aggiornamenti sincroni.
L'intervallo di aggiornamento asincrono predefinito è di 10 secondi. Utilizza la
<AsynchronousConfiguration>
per configurare questo comportamento asincrono.
<Synchronous>false</Synchronous>
<AsynchronousConfiguration>
Configura l'intervallo di sincronizzazione tra i contatori delle quote distribuite quando il criterio
l'elemento di configurazione <Synchronous>
non è presente o non è presente e impostato
a false
. Apigee ignora questo elemento quando <Synchronous>
è impostato su
true
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Quota>
|
Elementi secondari |
<SyncIntervalInSeconds> <SyncMessageCount> |
Puoi specificare il comportamento di sincronizzazione utilizzando
Elementi secondari <SyncIntervalInSeconds>
o <SyncMessageCount>
. Utilizza uno o
entrambi gli elementi. Ad esempio,
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
o
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
- Quando è presente solo
<SyncIntervalInSeconds>
, la quota si sincronizza ogni N secondi, dove N è il valore specificato nell'elemento, indipendentemente dal numero di messaggi gestiti. - Quando è presente solo
<SyncMessageCount>
, la quota sincronizza ogni M messaggi, dove M è il valore specificato nell'elemento oppure ogni 10 secondi, a seconda dell'evento che si verifica per primo. - Quando sono presenti entrambi gli elementi, la quota sincronizza ogni messaggio M o ogni N secondi, a seconda dell'evento che si verifica per primo.
- Quando
<AsynchronousConfiguration>
non è presente o non è presente nessuno dei due elementi secondari, la quota si sincronizza ogni 10 secondi, indipendentemente dal numero di messaggi gestiti.
<SyncIntervalInSeconds>
Sostituisce il comportamento predefinito in cui gli aggiornamenti asincroni vengono eseguiti dopo un di 10 secondi.
Valore predefinito | 10 secondi |
Obbligatorio? | Facoltativo |
Tipo | Numero intero |
Elemento principale |
<AsynchronousConfiguration>
|
Elementi secondari |
Nessuna |
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
L'intervallo di sincronizzazione deve essere maggiore o uguale a 10 secondi, come descritto in Limiti.
<SyncMessageCount>
Specifica il numero di richieste da elaborare prima di sincronizzare il contatore della quota.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Numero intero |
Elemento principale |
<AsynchronousConfiguration>
|
Elementi secondari |
Nessuna |
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Utilizzando la configurazione in questo esempio, su ogni nodo il conteggio delle quote verrà sincronizzato dopo ogni 5 richieste o ogni 10 secondi, a seconda dell'evento che si verifica per primo.
<Identifier>
Configura il criterio per creare contatori unici basati su una variabile di flusso.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Tramite l'elemento Identifier, puoi assegnare i conteggi delle chiamate a bucket distinti definiti dal valore in un flusso
. Ad esempio, puoi utilizzare la variabile developer.id
, che viene compilata dopo un
VerifyAPIKey, per applicare un limite di quota a
tutte le istanze di tutte le app create da ogni sviluppatore specifico oppure puoi utilizzare client_id
per applicare un limite di quota
per ogni app specifica. La configurazione di quest'ultima ha il seguente aspetto:
<Identifier ref="client_id"/>
Puoi fare riferimento a una variabile personalizzata che potresti impostare con il criterioAssignMessage o il criterio JavaScript oppure una variabile impostata implicitamente, come impostato dal criterio VerifyAPIKey o dal criterio VerifyJWT. Per ulteriori informazioni sulle variabili, consulta Usando le variabili di flusso e per un elenco di variabili note definite da Apigee, consulta il riferimento sulle variabili di flusso.
Se non utilizzi questo elemento, il criterio assegna tutti i conteggi delle chiamate a un unico contatore per il criterio per le quote specifico.
Questo elemento viene discusso anche Come il criterio per le quote funziona se non viene specificato alcun identificatore?
Nella tabella seguente vengono descritti gli attributi di <Identifier>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento |
Specifica una variabile di flusso che identifica il contatore da utilizzare per la richiesta. La può fare riferimento a un'intestazione HTTP, un parametro di ricerca, un parametro di modulo o un elemento del contenuto del messaggio o un altro valore per identificare come assegnare i conteggi delle chiamate. La variabile |
N/D | Facoltativo |
<MessageWeight>
Specifica il costo assegnato a ciascun messaggio ai fini della quota. Usa questo elemento per aumentare l'impatto di richieste che, ad esempio, consumano più risorse di calcolo di altre.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Numero intero |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Ad esempio, se vuoi che POST
messaggi siano il doppio del numero
costoso: GET
messaggi. Di conseguenza, imposti <MessageWeight>
su 2 per POST
e 1 per
GET
. Puoi anche impostare <MessageWeight>
su 0 in modo che la richiesta non
influisce sul contatore.
In questo esempio, se la quota è di 10 messaggi al minuto
il valore di <MessageWeight>
per le richieste POST
è 2
, la quota verrà
consente 5 richieste POST
in un intervallo di 10 minuti. Qualsiasi altra richiesta,
POST
o GET
, prima che la reimpostazione del contatore venga rifiutata.
Un valore che rappresenta <MessageWeight>
deve essere specificato da un flusso
e può essere estratta da intestazioni HTTP, parametri di ricerca, una richiesta XML o JSON
o qualsiasi altra variabile di flusso. Ad esempio, lo imposti in un'intestazione denominata
weight
:
<MessageWeight ref="message_weight"/>
<UseQuotaConfigInAPIProduct>
Definisce le impostazioni delle quote per un prodotto API, come le unità di tempo, l'intervallo e i valori consentiti massimo.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Quota>
|
Elementi secondari |
<DefaultConfig> |
Se aggiungi l'elemento <UseQuotaConfigInAPIProduct>
al criterio per le quote:
Apigee ignora qualsiasi
Elementi secondari <Allow>
, <Interval>
e <TimeUnit>
di <Quota>
.
L'elemento <UseQuotaConfigInAPIProduct>
è semplicemente un contenitore per le impostazioni predefinite che
definisci utilizzando l'elemento <DefaultConfig>
, come mostrato nell'esempio seguente:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME"> <DefaultConfig>...</DefaultConfig> </UseQuotaConfigInAPIProduct>
Puoi utilizzare l'attributo stepName
per fare riferimento a un criterio VerifyAPIKey
oppure un'operazione del criterio ValidateToken
del criterio OAuthv2 nel flusso.
Nella tabella seguente vengono descritti gli attributi di <UseQuotaConfigInAPIProduct>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
stepName | Identifica il nome del criterio di autenticazione nel flusso. Il target può essere un CriterioVerifyAPIKey o un criterio OAuthv2. | N/D | Obbligatorio |
Per ulteriori informazioni, consulta le seguenti risorse:
<DefaultConfig>
Contiene valori predefiniti per la quota di un prodotto API. Quando definisci un valore <DefaultConfig>
,
sono obbligatori tutti e tre gli elementi secondari.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<UseQuotaConfigInAPIProduct>
|
Elementi secondari |
<Allow> <Interval> <TimeUnit> |
È possibile definire questi valori sia sul funzionamento del prodotto API (con l'interfaccia utente o con l'API dei prodotti API e nelle norme per le quote. Se lo fai, però, le impostazioni del prodotto API hanno la precedenza, mentre quelle del I criteri per le quote vengono ignorati.
La sintassi di questo elemento è la seguente:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME"> <DefaultConfig> <Allow>allow_count</Allow> <Interval>interval</Interval> <TimeUnit>[minute|hour|day|week|month]</TimeUnit> </DefaultConfig> </UseQuotaConfigInAPIProduct>
L'esempio seguente specifica una quota di 10.000 ogni settimana:
<DefaultConfig> <Allow>10000</Allow> <Interval>1</Interval> <TimeUnit>week</TimeUnit> </DefaultConfig>
Per ulteriori informazioni, consulta le seguenti risorse:
<SharedName>
Identifica questo criterio per le quote come condiviso. Tutti i criteri per le quote in un proxy API
con lo stesso valore <SharedName>
condividono lo stesso contatore di quote di base. Se questo elemento
è presente, l'elemento <EnforceOnly>
o
Devono essere presenti anche elementi <CountOnly>
.
Per ulteriori informazioni e esempi, consulta Configurazione dei contatori delle quote condivise.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
<CountOnly>
Inserisci un criterio per le quote con questo elemento impostato su true
in un passaggio condizionale nel flusso di risposta ProxyEndpoint per
il conteggio delle quote sottostante. Se questo elemento è presente, <SharedName>
e <EnforceOnly>
.
Per ulteriori informazioni e esempi, consulta Configurazione dei contatori delle quote condivise.
Valore predefinito | falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
<EnforceOnly>
Inserisci nella richiesta un criterio per le quote con questo elemento impostato su true
flusso di un proxy API. Questa configurazione consente di condividere i conteggi delle quote per qualsiasi quota
nel proxy API con lo stesso valore <SharedName>
. Se questo elemento è presente, <SharedName>
e <CountOnly>
.
Per ulteriori informazioni e esempi, consulta Configurazione dei contatori delle quote condivise.
Valore predefinito | falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuna |
Variabili di flusso
Le seguenti variabili di flusso predefinite vengono compilate automaticamente quando un criterio per le quote . Per saperne di più, consulta Riferimento per le variabili di flusso.
Variabili | Tipo | Autorizzazioni | Descrizione |
---|---|---|---|
ratelimit.{policy_name}.allowed.count | Lungo | Sola lettura | Restituisce il conteggio della quota consentito. |
ratelimit.{policy_name}.used.count | Lungo | Sola lettura | Restituisce la quota corrente utilizzata in un intervallo di quota. |
ratelimit.{policy_name}.available.count | Lungo | Sola lettura | Restituisce il conteggio della quota disponibile nell'intervallo di quota. |
ratelimit.{policy_name}.exceed.count | Lungo | Sola lettura | Restituisce 1 dopo il superamento della quota. |
ratelimit.{policy_name}.total.exceed.count | Lungo | Sola lettura | Restituisce 1 dopo il superamento della quota. |
ratelimit.{policy_name}.expiry.time | Lungo | Sola lettura |
Restituisce il tempo UTC (in millisecondi), che determina quando scade la quota e quando inizia il nuovo intervallo di quota. Se il tipo del criterio per le quote è |
ratelimit.{policy_name}.identifier | Stringa | Sola lettura | Restituisce il riferimento dell'identificatore (client) associato al criterio |
ratelimit.{policy_name}.class | Stringa | Sola lettura | Restituisce la classe associata all'identificatore cliente |
ratelimit.{policy_name}.class.allowed.count | Lungo | Sola lettura | Restituisce il conteggio delle quote consentito definito nella classe |
ratelimit.{policy_name}.class.used.count | Lungo | Sola lettura | Restituisce la quota utilizzata all'interno di una classe |
ratelimit.{policy_name}.class.available.count | Lungo | Sola lettura | Restituisce il conteggio delle quote disponibili nella classe |
ratelimit.{policy_name}.class.exceed.count | Lungo | Sola lettura | Restituisce il conteggio delle richieste che supera il limite nella classe nella classe intervallo quota attuale |
ratelimit.{policy_name}.class.total.exceed.count | Lungo | Sola lettura | Restituisce il conteggio totale delle richieste che supera il limite nella classe in tutte
intervalli di quota, pertanto è la somma di class.exceed.count per
intervalli di quota. |
ratelimit.{policy_name}.failed | Booleano | Sola lettura |
Indica se il criterio ha avuto esito negativo (vero o falso). |
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore che vengono restituiti e le variabili di errore impostate da Apigee quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se si stanno sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta gli articoli Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
Codice di errore | Stato HTTP | Causa | Correggi |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 |
Si verifica se l'elemento <Interval> non è definito nel criterio Quota . Questo elemento è obbligatorio e utilizzato per specificare l'intervallo di tempo applicabile alla quota. L'intervallo di tempo può essere minuti, ore, giorni, settimane o mesi, come definito dall'elemento <TimeUnit> . |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 |
Si verifica se l'elemento <TimeUnit> non è definito nel criterio Quota . Questo elemento è obbligatorio e utilizzato per specificare l'unità di tempo applicabile alla quota. L'intervallo di tempo può essere espresso in minuti, ore, giorni, settimane o mesi. |
build |
policies.ratelimit.InvalidMessageWeight |
500 |
Si verifica se il valore dell'elemento <MessageWeight> specificato tramite una variabile di flusso non è valido (un valore non intero). |
build |
policies.ratelimit.QuotaViolation |
500 |
Il limite di quota è stato superato. | N/A |
Errori di deployment
Nome errore | Causa | Correggi |
---|---|---|
InvalidQuotaInterval |
Se l'intervallo di quota specificato nell'elemento <Interval> non è un numero intero, il deployment del proxy API non va a buon fine. Ad esempio, se l'intervallo di quota specificato è 0,1 nell'elemento <Interval> , il deployment del proxy API non riesce.
|
build |
InvalidQuotaTimeUnit |
Se l'unità di tempo specificata nell'elemento <TimeUnit> non è supportata, il deployment del proxy API non va a buon fine. Le unità di tempo supportate sono minute ,
hour , day , week e month .
|
build |
InvalidQuotaType |
Se il tipo di quota specificato dall'attributo type nell'elemento <Quota> non è valido, il deployment del proxy API non va a buon fine. I tipi di quota supportati sono default , calendar , flexi e rollingwindow .
|
build |
InvalidStartTime |
Se il formato dell'ora specificato nell'elemento <StartTime> non è valido, il deployment del proxy API non va a buon fine. Il formato valido è yyyy-MM-dd HH:mm:ss ,
ovvero il formato di data e ora ISO 8601. Ad
esempio, se il tempo specificato nell'elemento <StartTime> è
7-16-2017 12:00:00 , il deployment del proxy API non va a buon fine.
|
build |
StartTimeNotSupported |
Se viene specificato l'elemento <StartTime> il cui tipo di quota non è di tipo calendar , il deployment del proxy API non va a buon fine. L'elemento <StartTime> è
supportato solo per il tipo di quota calendar . Ad esempio, se l'attributo type è impostato
su flexi o rolling window nell'elemento <Quota> , il
deployment del proxy API non va a buon fine.
|
build |
InvalidTimeUnitForDistributedQuota |
Se l'elemento <Distributed> è impostato su true e l'elemento <TimeUnit> è impostato su
second , il deployment del proxy API non va a buon fine. L'unità di tempo second non è valida per una quota distribuita. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
Se il valore specificato per l'elemento <SyncIntervalInSeconds> all'interno
dell'elemento <AsynchronousConfiguration> in un criterio Quota è inferiore a zero, il
deployment del proxy API non riesce. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
Se il valore dell'elemento <AsynchronousConfiguration> è impostato su true in un criterio Quota in cui è definita anche la configurazione asincrona mediante l'elemento <AsynchronousConfiguration> , il deployment del proxy API non riesce. |
build |
Variabili di errore
Queste variabili vengono impostate quando questo criterio attiva un errore. Per maggiori informazioni, consulta la sezione Cosa devi sapere sugli errori relativi ai criteri.
Variabili | Dove | Esempio |
---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime riportata sopra. Il nome del guasto è l'ultima parte del codice di errore. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | ratelimit.QT-QuotaPolicy.failed = true |
Esempio di risposta di errore
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Esempio di regola di errore
<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>
Schemi
Argomenti correlati
Confronto Norme relative a quote e picchi di arresto