Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Panoramica
Una quota è un'allocazione di messaggi di richiesta che un proxy API può gestire in un determinato periodo di tempo, ad esempio minuto, ora, giorno, settimana o mese. Il criterio per le quote conserva i contatori che contano il numero di richieste ricevute dal proxy API. Questa funzionalità consente ai provider di API di applicare limiti al numero di chiamate API effettuate dalle app in un intervallo di tempo. Con i criteri per le quote puoi, ad esempio, limitare le app a 1 richiesta al minuto o a 10.000 richieste al mese.
Questo criterio è un criterio estendibile e il suo utilizzo potrebbe avere implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni di 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 il primo giorno o l'ultimo giorno del periodo sono stati conteggiati 10.000 messaggi; non sono consentite richieste aggiuntive fino a quando il contatore di quota non viene reimpostato automaticamente alla fine dell'intervallo di tempo specificato o fino a quando la quota non viene reimpostata esplicitamente tramite il criterio di ResetQuota.
Una variante del criterio per le quote, il criterio SpikeArrest, previene picchi (o burst) di traffico che possono essere causati da un improvviso aumento dell'utilizzo, da client con bug o da attacchi dannosi.
Utilizza i criteri per le quote per configurare il numero di messaggi di richiesta consentiti da un proxy API in un determinato periodo di tempo, ad esempio minuto, ora, giorno, settimana o mese. Puoi impostare la quota in modo che sia la stessa 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. In questo caso, utilizza il criterio SpikeArrest.
Video
Questi video presentano la gestione delle quote con i criteri per le quote:
Introduzione
Quota dinamica
Distribuito e sincrono
Peso del messaggio
Calendar
Mantovana
Flex
Quota condizionale
Variabili di flusso
Gestione degli errori
Tipi di criteri per le quote
Il criterio per le quote supporta diversi modi in cui il contatore delle quote viene avviato e reimpostato.
Puoi definire quale 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 basata su un'ora di inizio esplicita. Il contatore della quota per ogni app viene aggiornato in base ai valori<StartTime>
,<Interval>
e<TimeUnit>
che hai impostato.rollingwindow
: configura una quota che utilizza una "finestra temporale" per determinare l'utilizzo della quota. Conrollingwindow
, determini la dimensione della finestra con gli elementi<Interval>
e<TimeUnit>
; ad esempio, 1 giorno. Quando arriva una richiesta, Apigee controlla l'ora esatta della richiesta (ad esempio, 17:01), conta il numero di richieste ricevute tra quella data e le 17:01 del giorno precedente (1 giorno) e determina se la quota è stata superata o meno durante questo lasso di tempo.flexi
: configura una quota che fa sì che il contatore venga avviato quando viene ricevuto il primo messaggio di richiesta da un'app e viene reimpostato in base ai valori<Interval>
e<TimeUnit>
.
La tabella seguente descrive le reimpostazioni della quota per ogni tipo:
Unità di tempo | Tipo | ||
---|---|---|---|
default (o null) |
calendar |
flexi |
|
minuto | Inizio del prossimo minuto | Un minuto dopo <StartTime> |
Un minuto dopo la prima richiesta |
ora | Parte superiore 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 di 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
. Le quote per le finestre temporali continue funzionano impostando le dimensioni di una finestra di quota, ad esempio una finestra di un'ora o di un giorno.
Quando arriva una nuova richiesta, il criterio determina se la quota è stata superata nell'ultimo periodo di tempo.
Ad esempio, definisci una finestra di due ore che consente 1000 richieste. Alle 16:45 arriva una nuova richiesta.Il criterio calcola il conteggio della quota nell'ultimo periodo di due ore, ovvero il numero di richieste a partire dalle 14:45. Se il limite di quota non è stato superato in un periodo di due ore, la richiesta è consentita.
Un minuto dopo, alle 16:46, arriva un'altra richiesta. Ora il criterio calcola il conteggio della quota a partire dalle 14:46 per determinare se il limite è stato superato.
Per il tipo rollingwindow
, il contatore non viene mai reimpostato, ma 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 il contatore raggiunge il limite, non sono consentite ulteriori chiamate API associate al contatore. A seconda della configurazione, i criteri per le quote potrebbero utilizzare uno o più contatori. È importante capire quando vengono utilizzati più contatori 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 da utilizzare le regole per le quote definite in quel prodotto. Un prodotto API può specificare le regole di quota a livello di prodotto o a livello di singole operations.
Per ogni operazione definita in un prodotto API viene mantenuto un contatore di quota separato e vengono osservate le seguenti regole:
- Se per un'operazione è stata definita una quota, le regole di quota dell'operazione hanno la precedenza su quelle definite a livello di prodotto. Per ogni operazione viene creato un contatore di quota separato. Qualsiasi chiamata API al percorso di un'operazione incrementa il contatore.
- Se per un'operazione non è definita una quota, viene applicata la regola di quota a livello di prodotto; tuttavia, viene comunque mantenuto un contatore di quota separato per l'operazione. In questo caso è importante capire che, anche se la regola della quota viene presa dalla definizione a livello di prodotto, l'operazione mantiene il proprio contatore.
- Se il prodotto API non include alcuna definizione di quota, né a livello di prodotto né a livello di operazione, si applicano le regole di quota specificate nel criterio; tuttavia, anche in questo caso viene mantenuto un contatore di quota separato per ogni operazione nel prodotto API.
Le seguenti sezioni descrivono in modo più dettagliato le opzioni e il comportamento dei contatori.
Configurazione dei contatori a livello di proxy API
È possibile configurare un prodotto API per mantenere un conteggio della quota nell'ambito del proxy API. In questo caso, la configurazione della quota specificata a livello di prodotto API è condivisa da tutte le operazioni per cui non è stata specificata una propria quota. L'effetto di questa configurazione è la creazione di un contatore globale a livello di proxy API per questo prodotto API.
Per ottenere questa configurazione, devi utilizzare
l'API Apigee di/apiproducts
per creare o aggiornare il prodotto e impostare
l'
attributo quotaCountScope
su PROXY
nella richiesta di creazione o aggiornamento.
Con la configurazione PROXY
, tutte le operazioni definite per il prodotto API che sono associate allo stesso proxy e non hanno un proprio contatore condivideranno lo stesso contatore di quota impostato a livello di prodotto API.
Nella Figura 1, le operazioni 1 e 2 sono associate a Proxy1, mentre le operazioni 4 e 5 sono associate a Proxy3. Poiché quotaCounterScope=PROXY
è impostato nel prodotto API, ciascuna di queste operazioni condivide l'impostazione della quota a livello di prodotto API. Tieni presente che, anche se queste operazioni condividono la stessa configurazione della quota, utilizzano contatori separati in base all'associazione del proxy. L'operazione 3 ha invece una propria configurazione della quota impostata, per cui non è interessata dal flag quotaCounterScope
.
Figura 1: utilizzo del flag quotaCounterScope
Per impostazione predefinita, se per un'operazione non è stata definita una quota, viene applicata la regola di quota a livello di prodotto. Tuttavia, viene comunque mantenuto un contatore di quota separato per l'operazione.
Come vengono conteggiate le quote se non sono in uso prodotti API
Se non esiste alcun prodotto API associato a un proxy API, un criterio per le quote mantiene un singolo contatore, indipendentemente dal numero di volte in cui viene fatto riferimento in un proxy API. Il nome del contatore di quota si basa sull'attributo name
del criterio.
Ad esempio, crei un criterio per le quote denominato MyQuotaPolicy
con un limite di 5
richieste e lo posizioni su più flussi (flusso A, B e C) nel proxy API. Anche se viene
utilizzato in più flussi, mantiene un unico contatore che viene aggiornato da tutte le istanze del
criterio:
- Flusso A eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 1
- Flusso B eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 2
- Flusso A eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 3
- Flusso C viene eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 4
- Flusso A eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 5
La richiesta successiva a uno dei tre flussi viene rifiutata perché il contatore della quota ha raggiunto il limite.
L'utilizzo dello stesso criterio per le quote in più punti di un flusso proxy API, che può causare involontariamente un esaurimento della quota più veloce del previsto, è un anti-pattern descritto nell'introduzione agli anti-pattern.
In alternativa, puoi definire più criteri per le quote nel proxy API e utilizzare criteri diversi in ogni flusso. Ogni criterio per le quote mantiene il proprio contatore in base all'attributo name
del criterio.
Creazione di più contatori tramite la configurazione dei criteri
Puoi utilizzare gli elementi
<Class>
o <Identifier>
nei criteri per le quote per definire più contatori univoci in un unico criterio. Utilizzando questi elementi, un singolo criterio può gestire diversi contatori in base all'app che effettua la richiesta, allo sviluppatore di app che effettua la richiesta, a un ID client o un altro identificatore client e altro ancora. Consulta gli
esempi precedenti per maggiori informazioni sull'utilizzo degli
elementi <Class>
o <Identifier>
.
Notazione dell'ora
Tutti gli orari quota sono impostati sul fuso orario Tempo coordinato universale (UTC).
La notazione del tempo di quota segue la notazione della data dello standard internazionale definito nello standard internazionale ISO 8601.
Le date sono definite come 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 definita come ore, minuti e secondi nel seguente formato:
hours:minutes:seconds
. Ad esempio, 23:59:59
rappresenta l'ora un secondo prima di mezzanotte.
Tieni presente che sono disponibili due notazioni, 00:00:00
e 24:00:00
, per distinguere le due mezzenotte che possono essere associate a una data. Pertanto, 2021-02-04
24:00:00
corrisponde alla data e all'ora di 2021-02-05 00:00:00
. La seconda è in genere la notazione preferita.
Recupero delle impostazioni delle quote dalla configurazione del prodotto API
Puoi impostare i limiti di quota nelle configurazioni dei prodotti API. Questi limiti non applicano automaticamente la quota. Puoi invece fare riferimento alle impostazioni delle quote dei prodotti in un criterio per le quote. Ecco alcuni vantaggi dell'impostazione di una quota sul prodotto di riferimento per i criteri delle quote:
- I criteri per le quote possono utilizzare un'impostazione uniforme in tutti i proxy API nel prodotto API.
- Puoi apportare modifiche in fase di runtime all'impostazione della quota su un prodotto API e i criteri per le quote che fanno riferimento al valore hanno automaticamente valori di quota aggiornati.
Per ulteriori informazioni sull'utilizzo delle impostazioni delle quote di un prodotto API, consulta l'esempio "Quota dinamica" riportato sopra.
Per informazioni sulla configurazione dei prodotti API con limiti di quota, consulta Gestione dei prodotti API.
Configurazione dei contatori della quota condivisa
In genere, il criterio per le quote conteggia tutte le richieste inviate a un proxy API. Per alcuni casi d'uso, potresti voler applicare il conteggio della quota per le richieste in entrata, ma anche incrementare il conteggio della quota per le risposte target che soddisfano una condizione specificata.
I tre elementi dei criteri per le quote, utilizzati insieme, <SharedName>
, <CountOnly>
e <EnforceOnly>
, ti consentono di personalizzare il criterio per le quote in modo da applicare la quota delle richieste in entrata e conteggiare le risposte di destinazione in base a una condizione da te specificata.
Ad esempio, supponi di voler incrementare il contatore di quota per un proxy API in cui le risposte della destinazione del backend hanno un codice di stato HTTP 200
. Per ottenere questo conteggio specializzato:
- Aggiungi un criterio per le quote al flusso di richiesta ProxyEndpoint con l'elemento
<SharedName>
impostato con un valore nome e l'elemento<EnforceOnly>
impostato sutrue
. - Aggiungi un altro criterio per le quote al flusso di risposta ProxyEndpoint con l'elemento
<SharedName>
impostato sullo stesso valore del nome del primo criterio e l'elemento<CountOnly>
impostato sutrue
. - Inserisci il secondo criterio per le quote (quello con
<CountOnly>
) in un passaggio condizionale che imposta la condizione in base alla quale incrementare il contatore di 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 mediante:
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 impostazioni della quota diverse in base alle informazioni trasmesse al criterio per le quote. Un altro termine per le impostazioni delle quote in questo contesto è piano di servizio. La quota dinamica controlla il piano di servizio dell'app, quindi applica queste impostazioni.
Ad esempio, quando crei un prodotto API, puoi facoltativamente impostare il limite di quota, l'unità di tempo e l'intervallo consentiti. Tuttavia, l'impostazione di questo valore nel prodotto API non ne impone l'utilizzo in un proxy API. Devi anche aggiungere un criterio per le quote al proxy API che legge questi valori. Per saperne di più, consulta Creare prodotti basati su API.
Nell'esempio precedente, il proxy API contenente il criterio per le quote utilizza un criterio VerificationAPIKey, denominato verify-api-key
, per convalidare la chiave API trasmessa in una richiesta. Il criterio per le quote accede quindi alle variabili di flusso dal criterio VerificationAPIKey per leggere i valori di quota impostati nel prodotto API.
Un'altra opzione è impostare attributi personalizzati su singoli sviluppatori o app e quindi leggere questi valori nei criteri per le quote. Ad esempio, per impostare valori di quota diversi per sviluppatore, devi impostare attributi personalizzati sullo sviluppatore contenenti il limite, l'unità di tempo e l'intervallo. Successivamente, dovrai fare riferimento a questi valori nel criterio per le quote, come mostrato di seguito:
<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 provenire da:
- Variabili di flusso
- Proprietà del prodotto, dell'app o dello sviluppatore API
- Una mappa chiave-valore (KVM)
- Un'intestazione, un parametro di query, un parametro modulo e altri
Per ogni proxy API, puoi aggiungere un criterio per le quote che fa 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 a variabili 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 un
valore <StartTime>
esplicito. Il valore dell'ora è l'ora GMT, non l'ora locale. Se non fornisci un valore <StartTime>
per un criterio di tipo calendar
, Apigee genera un errore.
Il contatore quota per ogni app viene aggiornato in base ai valori <StartTime>
,
<Interval>
e <TimeUnit>
. Per questo esempio, il conteggio della quota inizia alle 10:30 GMT del 18 febbraio 2021 e viene aggiornato ogni 5 ore. Di conseguenza, il prossimo aggiornamento sarà 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 dai criteri per le quote. Puoi accedere a queste variabili di flusso nel proxy API per eseguire l'elaborazione condizionale, monitorare il criterio quando si avvicina il limite di quota, restituire il contatore di quota attuale a un'app o per altri motivi.
Poiché l'accesso alle variabili di flusso per il criterio si basa sull'attributo name
dei criteri, per il criterio sopra indicato <Quota>
accedi alle relative variabili di flusso nel modulo:
ratelimit.QuotaPolicy.allowed.count
: conteggio consentito.ratelimit.QuotaPolicy.used.count
: valore del contatore corrente.ratelimit.QuotaPolicy.expiry.time
: ora UTC in cui il contatore viene reimpostato.
Puoi accedere a molte altre variabili di flusso, come descritto di seguito.
Ad esempio, puoi utilizzare il seguente criterioAssignMessage per restituire i valori delle variabili di flusso 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 il contatore di quota viene incrementato anche quando la risposta di destinazione è nello stato HTTP 200
.
Poiché entrambi i criteri per le quote utilizzano lo stesso valore <SharedName>
, entrambi
i criteri per le quote condivideranno lo stesso contatore di quota. Per ulteriori informazioni, consulta Configurazione dei contatori della quota condivisa.
Esempio di configurazione di 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>
Primo esempio di 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>
Secondo esempio di criterio per le quote:
<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 reimposta il contatore della quota all'inizio 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 inizia da 2021-07-08 07:00:00
, viene reimpostato su 0 alle ore 2021-07-08 08:00:00
(1 ora dall'ora di inizio). Se il primo messaggio viene ricevuto all'indirizzo 2021-07-08 07:35:28
e il numero di messaggi raggiunge 10.000 prima del giorno 2021-07-08 08:00:00
, le chiamate oltre questo numero vengono rifiutate fino a quando il numero non viene reimpostato all'inizio dell'ora.
Il tempo di reimpostazione del contatore si basa sulla combinazione di <Interval>
e
<TimeUnit>
. Ad esempio, se imposti <Interval>
su
12 per un <TimeUnit>
di ora, il contatore viene reimpostato ogni 12 ore.
Puoi impostare <TimeUnit>
su minuto, ora, giorno, settimana o mese.
Puoi fare riferimento a questo criterio in più punti nel proxy API. Ad esempio, potresti collocarlo nel PreFlow del proxy in modo che venga eseguito su ogni richiesta. In alternativa, puoi posizionarlo su più flussi nel proxy API. Se utilizzi questo criterio in più punti del proxy, verrà conservato un unico contatore che viene aggiornato da tutte le istanze del criterio.
In alternativa, puoi definire più criteri per le quote nel tuo proxy API. Ogni criterio per le quote mantiene il proprio contatore in base all'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 dall'origine di una richiesta. In alternativa, puoi utilizzare l'attributo <Identifier>
con un criterio per le quote per mantenere contatori separati in base al valore dell'attributo
<Identifier>
.
Ad esempio, utilizza il tag <Identifier>
per definire contatori separati per
ogni ID client. Su una richiesta al tuo proxy, l'app client passa un'intestazione contenente clientID
, come mostrato nell'esempio precedente.
Puoi specificare qualsiasi variabile di flusso per l'attributo <Identifier>
. Ad
esempio, potresti specificare che un parametro di query denominato id
contiene l'identificatore
univoco:
<Identifier ref="request.queryparam.id"/>
Se utilizzi il criterio VerificationAPIKey per convalidare la chiave API o i criteri OAuthV2 con token OAuth, puoi utilizzare le informazioni nella chiave o nel token API per definire singoli contatori per lo stesso criterio per le quote. Ad esempio, il seguente elemento <Identifier>
utilizza la variabile di flusso client_id
di un criterio VerificationAPIKey denominato verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Ogni valore client_id
univoco ora definisce un proprio contatore nei criteri per le quote.
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 sulla classe. In questo esempio, il limite di quota è determinato dal valore dell'intestazione developer_segment
passata con ogni richiesta. Questa variabile può avere un valore di platinum
o silver
. Se l'intestazione contiene un valore non valido, il criterio restituisce un errore di violazione della quota.
<Quota>
elemento
Di seguito sono riportati gli attributi e gli elementi secondari di <Quota>
. Tieni presente che alcune combinazioni di elementi si escludono a vicenda o non sono obbligatorie. Guarda gli esempi per un utilizzo specifico.
Le
variabili verifyapikey.my-verify-key-policy.apiproduct.*
riportate di seguito sono disponibili per impostazione predefinita quando
viene utilizzato un criterio VerificationAPIKey denominato my-verify-key-policy
per controllare la chiave API dell'app nella richiesta.
I valori della variabile provengono dalle impostazioni delle quote nel prodotto API a cui è associata la chiave, come descritto in Ottenere le impostazioni delle quote dalla configurazione del prodotto API.
<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 questa norma:
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 ogni tipo, consulta Tipi di criteri per le quote. |
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 del criterio raggiunge questo valore limite, le chiamate successive vengono rifiutate fino alla reimpostazione del contatore.
Può contenere anche un elemento <Class>
che condiziona l'elemento <Allow>
in base a una variabile di flusso.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Tipo 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
che countRef
, countRef
ha la priorità. Se countRef
non si risolve in fase di runtime, viene utilizzato il valore di
count
.
Puoi anche specificare un elemento <Class>
come elemento secondario di <Allow>
per determinare il conteggio consentito del criterio in base a una variabile di flusso. Apigee abbina il valore della variabile di flusso all'attributo
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>
Nella tabella seguente sono elencati gli attributi di <Allow>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
count |
Utilizza questa opzione per specificare un conteggio dei messaggi per la quota. Ad esempio, un valore dell'attributo |
2000 | Facoltativo |
countRef |
Consente di specificare una variabile di flusso contenente il conteggio dei messaggi per una quota.
|
nessuno | Facoltativo |
<Class>
Consente di condizionare il valore dell'elemento <Allow>
in base al valore di una variabile di flusso. Per ogni diverso tag secondario <Allow>
di <Class>
, il criterio mantiene un contatore diverso.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Allow>
|
Elementi secondari |
<Allow> (secondario di <Class> ) |
Per utilizzare l'elemento <Class>
, specifica una variabile di flusso tramite l'attributo
ref
all'elemento <Class>
. Apigee quindi utilizza il valore della variabile di flusso per selezionare uno degli elementi secondari <Allow>
per determinare il conteggio consentito del criterio. Apigee abbina il valore della variabile di flusso all'attributo 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 di query time_variable
passato con ogni richiesta. Questa variabile può avere un valore
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.
Nella tabella seguente sono elencati gli attributi di <Class>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
rif | Utilizzalo per specificare una variabile di flusso contenente la classe di una quota. | nessuno | Obbligatorio |
<Allow>
(figlio di <Class>
)
Specifica il limite per un contatore di quota definito dall'elemento <Class>
. Per ogni diverso tag secondario <Allow>
di <Class>
, il criterio mantiene un contatore diverso.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Class>
|
Elementi secondari |
Nessuno |
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 mantiene due contatori delle quote denominati
peak_time
e off_peak_time
. Quale di questi viene utilizzato dipende dal parametro di query trasmesso, come mostrato nell'esempio <Class>
.
Nella tabella seguente sono elencati gli attributi di <Allow>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
classe | Definisce il nome del contatore della quota. | nessuno | Obbligatorio |
count | 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/d |
Obbligatorio? | Obbligatorio |
Tipo | Numero intero |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Utilizzalo per specificare un numero intero (ad esempio 1, 2, 5, 60 e così via) che verrà accoppiato all'elemento <TimeUnit>
specificato (minuto, ora, giorno, settimana o mese) per determinare un periodo di tempo durante il quale Apigee calcola l'utilizzo della quota.
Ad esempio, un intervallo di 24
con <TimeUnit>
pari a hour
significa che la quota verrà calcolata nell'arco di 24 ore.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Nella tabella seguente sono elencati gli attributi di <Interval>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
rif |
Utilizzalo per specificare una variabile di flusso contenente l'intervallo per una quota. |
nessuno | Facoltativo |
<TimeUnit>
Specifica l'unità di tempo applicabile alla quota.
Valore predefinito | n/d |
Obbligatorio? | Obbligatorio |
Tipo | Stringa |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Seleziona un'opzione tra minute
, hour
, day
,
week
, month
o year
.
Ad esempio, Interval
pari a 24
con
TimeUnit
pari a hour
significa che la quota verrà calcolata nell'arco di 24 ore.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Predefinita: | nessuno |
Presenza: | Obbligatorio |
Tipo: | Stringa |
Nella tabella seguente sono elencati gli attributi di <TimeUnit>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
rif | Specifica una variabile di flusso contenente l'unità di tempo per una quota. ref ha la precedenza su un valore di intervallo esplicito. Se ref non si risolve in fase di runtime, viene utilizzato il valore dell'intervallo. |
nessuno | Facoltativo |
<StartTime>
Se type
è impostato su calendar
, consente di specificare la data e l'ora in cui il contatore della quota inizia a conteggiare, indipendentemente dal fatto che siano state ricevute richieste da app.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo (obbligatorio quando type è impostato su calendar ) |
Tipo | Stringa nel formato di data e ora ISO 8601 |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Devi fornire un valore <StartTime>
esplicito quando type
è impostato
su calendar
. Non puoi utilizzare un riferimento a una variabile di flusso. Se specifichi un valore <StartTime>
quando non è impostato alcun valore type
, Apigee restituisce un errore.
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 | false |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Imposta il valore true
per specificare che il criterio deve mantenere un contatore centrale e sincronizzarlo continuamente su tutti i nodi. I nodi possono trovarsi in zone e/o regioni di disponibilità diversi.
Se utilizzi il valore predefinito di false
, potresti superare la quota poiché il conteggio per ciascun nodo non è condiviso:
<Distributed>false</Distributed>
Per garantire che i contatori siano sincronizzati e aggiornati su ogni richiesta, imposta <Distributed>
e <Synchronous>
su true
:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
<Synchronous>
Determina se aggiornare in modo sincrono un contatore di quota distribuita.
Valore predefinito | false |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Impostalo su true
per aggiornare in modo sincrono un contatore della quota distribuita. Ciò
significa che gli aggiornamenti dei contatori vengono effettuati contemporaneamente al controllo della quota su una
richiesta all'API. Imposta su true
se è essenziale non consentire chiamate API oltre la quota.
Imposta il valore su false
per aggiornare il contatore della quota in modo asincrono. Ciò significa che è possibile che alcune chiamate API che superano la quota vengano eseguite, a seconda di quando il contatore della quota nel repository centrale viene aggiornato in modo asincrono. Tuttavia, non dovrai affrontare il potenziale impatto sulle prestazioni associato agli aggiornamenti sincroni.
L'intervallo di aggiornamento asincrono predefinito è di 10 secondi. Utilizza l'elemento <AsynchronousConfiguration>
per configurare questo comportamento asincrono.
<Synchronous>false</Synchronous>
<AsynchronousConfiguration>
Consente di configurare l'intervallo di sincronizzazione tra i contatori di quote distribuite quando l'elemento di configurazione dei criteri <Synchronous>
non è presente o non è presente ed è impostato su false
. Apigee ignora questo elemento quando <Synchronous>
è impostato su
true
.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Quota>
|
Elementi secondari |
<SyncIntervalInSeconds> <SyncMessageCount> |
Puoi eseguire la sincronizzazione dopo un periodo di tempo o un conteggio di messaggi utilizzando gli elementi secondari <SyncIntervalInSeconds>
o <SyncMessageCount>
.
Si escludono a vicenda. Ad esempio:
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
o
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
<SyncIntervalInSeconds>
Sostituisce il comportamento predefinito in cui vengono eseguiti gli aggiornamenti asincroni dopo un intervallo di 10 secondi.
Valore predefinito | 10 secondi |
Obbligatorio? | Facoltativo |
Tipo | Numero intero |
Elemento principale |
<AsynchronousConfiguration>
|
Elementi secondari |
Nessuno |
<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 in tutti i nodi tra gli aggiornamenti della quota.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Numero intero |
Elemento principale |
<AsynchronousConfiguration>
|
Elementi secondari |
Nessuno |
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Questo esempio specifica che il conteggio della quota viene aggiornato ogni 5 richieste in ciascun nodo.
<Identifier>
Configura il criterio per creare contatori unici basati su una variabile di flusso.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Tramite l'elemento Identificatore, puoi allocare i conteggi delle chiamate a bucket distinti definiti dal valore in una variabile di flusso. Ad esempio, puoi utilizzare la variabile developer.id
, che viene compilata dopo un
criterio VerificationAPIKey, 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 è la seguente:
<Identifier ref="client_id"/>
Puoi fare riferimento a una variabile personalizzata che potresti impostare con il criterioAssignMessage o il criterio JavaScript oppure a una variabile impostata implicitamente, come quelle impostate dal criterio VerificationAPIKey o dalla norma VerificationJWT. Per saperne di più sulle variabili, consulta Utilizzo delle variabili di flusso e, per un elenco di variabili note definite da Apigee, consulta la pagina di riferimento sulle variabili di flusso.
Se non utilizzi questo elemento, il criterio alloca tutti i conteggi delle chiamate in un unico contatore per il criterio per le quote specifico.
Questo elemento è discusso anche in Come funziona il criterio per le quote quando non viene specificato alcun identificatore?
La tabella seguente descrive gli attributi di <Identifier>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
rif |
Specifica una variabile di flusso che identifica il contatore da utilizzare per la richiesta. La variabile può fare riferimento a un'intestazione HTTP, a un parametro di query, a un parametro modulo o a un elemento dei contenuti del messaggio oppure a qualche altro valore per identificare come allocare i conteggi delle chiamate.
|
N/D | Facoltativo |
<MessageWeight>
Specifica il costo assegnato a ciascun messaggio ai fini della quota. Utilizza questo elemento per aumentare l'impatto dei messaggi di richiesta che, ad esempio, consumano più risorse di calcolo di altri.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Numero intero |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Ad esempio, vuoi conteggiare i messaggi POST
come il doppio
dei messaggi più costosi rispetto ai messaggi GET
. Di conseguenza, imposti <MessageWeight>
su 2 per POST
e 1 per
GET
. Puoi anche impostare <MessageWeight>
su 0 in modo che la richiesta non influisca sul contatore.
In questo esempio, se la quota è di 10 messaggi al minuto e il
valore <MessageWeight>
per le richieste POST
è 2
, la quota consentirà
5 richieste POST
in qualsiasi intervallo di 10 minuti. Qualsiasi richiesta aggiuntiva, POST
o GET
, prima delle reimpostazioni dei contatori viene rifiutata.
Un valore che rappresenta <MessageWeight>
deve essere specificato da una variabile di flusso e può essere estratto da intestazioni HTTP, parametri di ricerca, un payload di richiesta XML o JSON o da qualsiasi altra variabile di flusso. Ad esempio, lo hai impostato in un'intestazione denominata
weight
:
<MessageWeight ref="message_weight"/>
<UseQuotaConfigInAPIProduct>
Definisce le impostazioni delle quote per un prodotto API, ad esempio le unità di tempo, l'intervallo e il valore massimo consentito.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<Quota>
|
Elementi secondari |
<DefaultConfig> |
Se aggiungi l'elemento <UseQuotaConfigInAPIProduct>
al criterio per le quote, Apigee ignora eventuali elementi secondari <Allow>
, <Interval>
e <TimeUnit>
di <Quota>
.
L'elemento <UseQuotaConfigInAPIProduct>
non è altro che un contenitore per le impostazioni predefinite
da te definite utilizzando l'elemento <DefaultConfig>
, come illustrato nell'esempio seguente:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME"> <DefaultConfig>...</DefaultConfig> </UseQuotaConfigInAPIProduct>
Puoi utilizzare l'attributo stepName
per fare riferimento a un criterio VerificationAPIKey o a un'operazione del criterio ValidateToken
del criterio OAuthv2 nel flusso.
La tabella seguente descrive gli attributi di <UseQuotaConfigInAPIProduct>
:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
stepName | Identifica il nome del criterio di autenticazione nel flusso. La destinazione può essere un criterio VerificationAPIKey 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 elemento <DefaultConfig>
,
tutti e tre gli elementi secondari sono obbligatori.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<UseQuotaConfigInAPIProduct>
|
Elementi secondari |
<Allow> <Interval> <TimeUnit> |
È possibile definire questi valori sia per il funzionamento del prodotto API (con l'interfaccia utente o con l'API dei prodotti API sia nei criteri per le quote. In questo caso, tuttavia, le impostazioni del prodotto API hanno la precedenza e quelle del criterio per le quote vengono ignorate.
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 alla 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 quota sottostante. Se questo elemento è presente, devono essere presenti anche gli elementi <EnforceOnly>
o
<CountOnly>
.
Per ulteriori informazioni ed esempi, consulta Configurazione dei contatori delle quote condivise.
Valore predefinito | n/d |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
<CountOnly>
Inserisci un criterio per le quote con questo elemento impostato su true
in un passaggio condizionale nel flusso di risposta di ProxyEndpoint per incrementare
in modo condizionale il contatore di quota sottostante. Se questo elemento è presente, devono essere presenti anche gli elementi <SharedName>
e <EnforceOnly>
.
Per ulteriori informazioni ed esempi, consulta Configurazione dei contatori delle quote condivise.
Valore predefinito | false |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
<EnforceOnly>
Inserisci un criterio per le quote con questo elemento impostato su true
nel flusso di richiesta di un proxy API. Questa configurazione consente di condividere i conteggi delle quote per qualsiasi criterio di quota nel proxy API con lo stesso valore <SharedName>
. Se questo elemento è presente, devono essere presenti anche gli elementi <SharedName>
e <CountOnly>
.
Per ulteriori informazioni ed esempi, consulta Configurazione dei contatori delle quote condivise.
Valore predefinito | false |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Quota>
|
Elementi secondari |
Nessuno |
Variabili di flusso
Le seguenti variabili di flusso predefinite vengono compilate automaticamente quando viene eseguito un criterio per le quote. Per ulteriori informazioni, consulta la documentazione di riferimento sulle variabili di flusso.
Variabili | Tipo | Autorizzazioni | Descrizione |
---|---|---|---|
ratelimit.{policy_name}.allowed.count | Lungo | Sola lettura | Restituisce il conteggio della quota consentita. |
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 l'ora UTC (in millisecondi), che determina quando scade la quota e quando inizia il nuovo intervallo di quota. Quando il tipo del criterio per le quote è |
ratelimit.{policy_name}.identifier | Stringa | Sola lettura | Restituisce il riferimento all'identificatore (client) associato al criterio |
ratelimit.{policy_name}.class | Stringa | Sola lettura | Restituisce la classe associata all'ID cliente |
ratelimit.{policy_name}.class.allowed.count | Lungo | Sola lettura | Restituisce il conteggio della quota 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 della quota disponibile nella classe |
ratelimit.{policy_name}.class.exceed.count | Lungo | Sola lettura | Restituisce il conteggio delle richieste che supera il limite nella classe nell'intervallo di 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 tutti gli intervalli di quota, pertanto è la somma di class.exceed.count per tutti gli intervalli di quota. |
ratelimit.{policy_name}.failed | Booleano | Sola lettura |
Indica se il criterio ha avuto esito negativo (true o false). |
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>
Schema
Argomenti correlati
Criterio di reimpostazione della quota
Confronto dei criteri di Quota e Spike Arrest