Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X. info

Cosa
Utilizza il criterio per le quote per configurare il numero di messaggi di richiesta consentiti da un proxy API in un determinato periodo di tempo, ad esempio un minuto, un'ora, un giorno, una settimana o un mese. Puoi impostare la quota in modo che sia uguale per tutte le app che accedono al proxy API oppure 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 la quota per proteggerti dagli picchi di traffico complessivi. A questo scopo, utilizza il criterio SpikeArrest. Consulta le norme relative a Spike Arrest.
Video
Questi video illustrano la gestione delle quote con le norme relative alle quote:
Introduzione (nuovo Edge)
Introduzione (Edge classico)
Quota dinamica
Distribuiti e sincroni
Peso del messaggio
Calendar
Finestra temporale continua
Flexi
Quota condizionale
Variabili di flusso
Gestione degli errori
Esempi
Questi esempi di codice delle norme mostrano 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 ti consentono di configurare un singolo criterio di quota che applica impostazioni diverse in base alle informazioni trasmesse al criterio. Un altro termine per le impostazioni di quota in questo contesto è "Piano di servizio". La quota dinamica controlla il "Piano di servizio" delle app e poi applica queste impostazioni.
Nota: se specifichi sia un valore sia un riferimento per un elemento, il riferimento ha la priorità. Se il riferimento non viene risolto in fase di runtime, viene utilizzato il valore.
Ad esempio, quando crei un prodotto API, puoi impostare facoltativamente il limite, l'unità di tempo e l'intervallo della quota consentita. Tuttavia, l'impostazione di questi valori nel prodotto API non obbligatoria il loro utilizzo in un proxy API. Devi anche aggiungere un criterio di quota al proxy API che legga questi valori. Per saperne di più, consulta Creare prodotti API.
Nell'esempio precedente, il proxy API contenente il criterio Quota utilizza un criterio VerifyAPIKey
denominato verify-api-key
per convalidare la chiave API passata in una richiesta. Il
criterio Quota accede quindi alle variabili di flusso del criterio VerifyAPIKey per leggere i valori
della quota impostati sul prodotto API. Per saperne di più sulle variabili di flusso VerifyAPIKey, consulta le norme relative alla verifica della chiave API.
Un'altra opzione consiste nell'impostare attributi personalizzati su singoli sviluppatori o app e poi leggere questi valori nel criterio di quota. Ad esempio, vuoi impostare valori di quota diversi per sviluppatore. In questo caso, imposta gli attributi personalizzati nello sviluppatore contenenti il limite, l'unità di tempo e l'intervallo. Poi fai 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 VerifyAPIKey per fare riferimento agli attributi personalizzati impostati sullo sviluppatore.
Puoi utilizzare qualsiasi variabile per impostare i parametri del criterio Quota. Queste variabili possono essere ricavate da:
- Variabili di flusso
- Proprietà del prodotto API, dell'app o dello sviluppatore
- Una mappa chiave-valore (KVM)
- Un'intestazione, un parametro di query, un parametro di modulo e così via
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 quel criterio e quel proxy.
Ora di inizio
<Quota name="QuotaPolicy" type="calendar"> <StartTime>2017-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
, Edge genera un errore.
Il contatore delle quote per ogni app viene aggiornato in base ai valori <StartTime>
,
<Interval>
e <TimeUnit>
. In questo
esempio, la quota inizia a essere conteggiata alle 10:30 GMT del 18 febbraio 2017 e si aggiorna ogni
5 ore. Pertanto, il prossimo aggiornamento è previsto per le 15:30 GMT del 18 febbraio 2017.
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 a queste variabili di flusso nel proxy API per eseguire l'elaborazione condizionale, monitorare il criterio quando si avvicina al limite di quota, restituire il contatore della quota corrente 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 denominato QuotaPolicy
sopra riportato accedono alle relative variabili di flusso nel seguente modo:
ratelimit.QuotaPolicy.allowed.count
: numero consentito.ratelimit.QuotaPolicy.used.count
: valore corrente del contatore.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 criterio AssignMessage per restituire i valori delle variabili di flusso Quota come intestazioni di risposta:
<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars"> <AssignTo createNew="false" type="response"/> <Set> <Headers> <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header> <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header> <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Prima richiesta
<Quota name="MyQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </Quota>
Utilizza questo codice di esempio per applicare una quota di 10.000 chiamate all'ora. Il criterio reimposta il contatore delle quote 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 a 2017-07-08 07:00:00
, viene reimpostato su
0 alle 2017-07-08 08:00:00
(1 ora dall'ora di inizio). Se il primo messaggio viene ricevuto alle 2017-07-08 07:35:28
e il conteggio dei messaggi raggiunge 10.000 prima delle 2017-07-08 08:00:00
, le chiamate oltre questo numero vengono rifiutate fino al ripristino del conteggio all'inizio dell'ora.
L'ora 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 dodici ore.
Puoi impostare <TimeUnit>
su minuto, ora, giorno, settimana o mese.
Puoi fare riferimento a questo criterio in più punti del proxy API. Ad esempio, puoi collocarlo nel PreFlow del proxy in modo che venga eseguito su ogni richiesta. In alternativa, puoi inserirlo su più flussi nel proxy API. Se utilizzi questo criterio in più punti del proxy, viene mantenuto un singolo contatore aggiornato da tutte le istanze del criterio.
In alternativa, puoi definire più criteri di quota nel proxy API. Ogni criterio di quota
gestisce il proprio contatore, in base all'attributo name
del criterio.
Impostare l'identificatore
<Quota name="QuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>2017-02-18 10:00:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
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 proxy, l'app client passa un'intestazione contenente
il 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 VerifyAPIKey per convalidare la chiave API o i criteri OAuthV2 con i 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
tag <Identifier>
utilizza la variabile di flusso client_id
di una
norma VerifyAPIKey denominata verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Ogni valore client_id
univoco ora definisce il proprio contatore nel criterio
di 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 della quota basato sulla classe. In questo esempio,
il limite di quota è determinato dal valore dell'intestazione developer_segment
passata con ogni richiesta. La variabile può avere un valore platinum
o silver
. Se l'intestazione ha un valore non valido, il criterio restituisce un errore di violazione della quota.
Informazioni sui criteri per le quote
Una quota è un'assegnazione di messaggi di richiesta che un proxy API può gestire in un periodo di tempo, come minuti, ore, giorni, settimane o mesi. Il criterio gestisce i contatori che conteggiano 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 determinato intervallo di tempo. Utilizzando i criteri di quota, ad esempio, puoi limitare le app a 1 richiesta al minuto o a 10.000 richieste al mese.
Ad esempio, se una quota è definita come 10.000 messaggi al mese, il limite di velocità inizia dopo il 10.000° messaggio. Non importa se i 10.000 messaggi sono stati conteggiati il primo giorno o l'ultimo giorno del periodo; non sono consentite richieste aggiuntive finché il contatore della quota non viene reimpostato automaticamente al termine dell'intervallo di tempo specificato o finché la quota non viene reimpostata esplicitamente utilizzando il Criterio di reimpostazione della quota.
Una variante di Quota chiamata SpikeArrest impedisce i picchi (o le esplosioni) di traffico che possono essere causati da un aumento improvviso dell'utilizzo, da client con bug o da attacchi dannosi. Per ulteriori informazioni su SpikeArrest, consulta la pagina Criterio SpikeArrest.
Le quote si applicano ai singoli proxy API e non vengono distribuite tra i proxy API. Ad esempio, se hai tre proxy API in un prodotto API, una singola quota non viene condivisa tra tutti e tre anche se tutti e tre utilizzano la stessa configurazione del criterio per le quote.
Tipi di criteri per le quote
Il criterio per le quote supporta diversi tipi di criteri: predefinito, calendar
,
flexi
e rollingwindow
. Ogni tipo definisce quando inizia e quando viene reimpostato il contatore delle quote, come mostrato nella tabella seguente:
Unità di tempo | Ripristino dei valori predefiniti (o null) | reimpostazione del calendario | reimpostazione flexi |
---|---|---|---|
minuto | Inizio del minuto successivo | Un minuto dopo le <StartTime> |
Un minuto dopo la prima richiesta |
ora | All'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 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 con finestra scorrevole
funzionano impostando la dimensione di una "finestra" della quota, ad esempio una finestra di un'ora o un giorno. Quando viene inviata una nuova richiesta, il criterio determina se la quota è stata superata nel periodo di tempo "passato".
Ad esempio, definisci un intervallo di due ore che consente 1000 richieste. Alle 16:45 arriva una nuova richiesta.Il criterio calcola il conteggio delle quote per l'intervallo di due ore precedente, ovvero il numero di richieste ricevute dalle 14:45. Se il limite di quota non è stato superato in questo intervallo di due ore, la richiesta è consentita.
Un minuto dopo, alle 16:46, arriva un'altra richiesta. Ora il criterio calcola il conto della quota dalle 14:46 per determinare se il limite è stato superato.
Per il tipo rollingwindow
, il contatore non viene mai reimpostato, ma viene rielaborato a ogni richiesta.
Informazioni sui contatori delle quote
Per impostazione predefinita, un criterio per le quote gestisce un singolo contatore, indipendentemente dal numero di volte in cui lo fai riferimento in un proxy API. Il nome del contatore delle quote si basa sull'attributo name
del criterio.
Ad esempio, crei un criterio di quota denominato MyQuotaPolicy
con un limite di 5 richieste e lo inserisci in più flussi (flusso A, B e C) nel proxy API. Anche se viene utilizzato in più flussi, mantiene un singolo contatore aggiornato da tutte le istanze del criterio:
- Viene eseguito il flusso A -> viene eseguito MyQuotaPolicy e il relativo contatore = 1
- Viene eseguito il flusso B -> viene eseguito MyQuotaPolicy e il relativo contatore = 2
- Viene eseguito il flusso A -> viene eseguito MyQuotaPolicy e il relativo contatore = 3
- Viene eseguito il flusso C -> viene eseguito MyQuotaPolicy e il relativo contatore = 4
- Viene eseguito il flusso A -> Viene eseguito MyQuotaPolicy e il relativo contatore = 5
La richiesta successiva a uno dei tre flussi viene rifiutata perché il contatore delle quote ha raggiunto il suo limite.
L'utilizzo dello stesso criterio per le quote in più di un punto in un flusso del proxy API, che può causare involontariamente l'esaurimento della quota più velocemente del previsto, è un antipattern descritto nel The Book of Apigee Edge Antipatterns.
In alternativa, puoi definire più criteri per le quote nel proxy API e utilizzare un criterio diverso in ogni flusso. Ogni criterio di quota gestisce il proprio contatore in base all'attributo name
del criterio.
In alternativa, utilizza gli elementi <Class>
o <Identifier>
nel criterio per le quote per definire più contatori unici in un unico criterio. Utilizzando questi elementi, un singolo criterio può gestire contatori diversi in base all'app che effettua la richiesta, allo sviluppatore dell'app che effettua la richiesta, a un ID client o a un altro identificatore client e altro ancora. Consulta gli esempi riportati sopra per ulteriori informazioni sull'utilizzo degli elementi <Class>
o <Identifier>
.
Notazione del tempo
Tutti gli orari della quota sono impostati sul fuso orario UTC (Coordinated Universal Time).
La notazione dell'ora della quota segue la notazione della data standard internazionale definita nello standard internazionale ISO 8601.
Le date sono definite come anno, mese e giorno nel seguente formato: YYYY-MM-DD
.
Ad esempio, 2015-02-04
rappresenta il 4 febbraio 2015.
L'ora del giorno è definita come ore, minuti e secondi nel seguente formato:
hours:minutes:seconds
. Ad esempio, 23:59:59
rappresenta la data e l'ora un
secondo prima di mezzanotte.
Tieni presente che sono disponibili due notazioni, 00:00:00
e 24:00:00
, per distinguere i due mezzenotti che possono essere associati a una data. Pertanto, 2015-02-04
24:00:00
corrisponde alla stessa data e alla stessa ora di 2015-02-05 00:00:00
. Quest'ultima è solitamente la notazione preferita.
Ottenere le impostazioni di quota dalla configurazione del prodotto API
Puoi impostare limiti di quota nelle configurazioni dei prodotti API. Questi limiti non applicano automaticamente la quota. In alternativa, puoi fare riferimento alle impostazioni delle quote dei prodotti in un criterio di quota. Ecco alcuni vantaggi dell'impostazione di una quota per il prodotto da utilizzare come riferimento per i criteri di quota:
- I criteri per le quote possono utilizzare un'impostazione uniforme in tutti i proxy API del prodotto API.
- Puoi apportare modifiche di runtime all'impostazione della quota in un prodotto API e i criteri di quota che fanno riferimento al valore vengono aggiornati automaticamente.
Per saperne di più sull'utilizzo delle impostazioni di quota da un prodotto API, consulta l'esempio "Quota dinamica" sopra..
Per informazioni sulla configurazione dei prodotti API con limiti di quota, vedi Creare prodotti API.
Riferimento elemento
Di seguito sono riportati gli elementi e gli attributi che puoi configurare in questo criterio. Tieni presente che alcune combinazioni di elementi sono mutuamente esclusive o non obbligatorie. Consulta i sample per un utilizzo specifico. Le variabili verifyapikey.VerifyAPIKey.apiproduct.*
riportate di seguito sono disponibili per impostazione predefinita quando viene utilizzato un criterio Verifica chiave API denominato "VerifyAPIKey" per controllare la chiave API dell'app nella richiesta.
I valori delle variabili provengono dalle impostazioni di quota del prodotto API a cui è associata la chiave, come descritto in Ottenere le impostazioni di quota dalla configurazione del prodotto API.
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar"> <DisplayName>Quota 3</DisplayName> <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow> <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit> <StartTime>2017-7-16 12:00:00</StartTime> <Distributed>false</Distributed> <Synchronous>false</ Synchronous> <AsynchronousConfiguration> <SyncIntervalInSeconds>20</ SyncIntervalInSeconds> <SyncMessageCount>5</ SyncMessageCount> </AsynchronousConfiguration> <Identifier/> <MessageWeight/> </Quota>
Attributi <Quota>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
I seguenti attributi sono specifici di questo criterio.
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
tipo |
Da utilizzare per determinare quando e come il contatore delle quote controlla l'utilizzo della quota. Per saperne di più, consulta Tipi di criteri di quota. Se ometti un valore I valori validi includono:
|
calendar | Facoltativo |
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali del criterio:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno del criterio. Il valore dell'attributo Se vuoi, puoi utilizzare l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta il valore su Imposta su |
falso | Facoltativo |
enabled |
Imposta il valore su Imposta |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
falso | Deprecato |
<DisplayName> elemento
Da utilizzare in aggiunta all'attributo name
per etichettare il criterio in
editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/D Se ometti questo elemento, il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
Elemento <Allow>
Specifica il limite di conteggio per la quota. Se il contatore per il criterio raggiunge questo valore di limite, le chiamate successive vengono rifiutate fino al ripristino del contatore.
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 viene risolto in fase di runtime, viene utilizzato il valore di
count
.
Valore predefinito: | N/D |
Presenza: | Facoltativo |
Tipo: | Numero intero |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
conteggio |
Da utilizzare per specificare un conteggio dei messaggi per la quota. Ad esempio, un valore dell'attributo |
2000 | Facoltativo |
countRef |
Da utilizzare per specificare una variabile di flusso contenente il conteggio dei messaggi per una quota.
|
nessuno | Facoltativo |
Elemento <Allow>/<Class>
L'elemento <Class>
consente di condizionare il valore
dell'elemento <Allow>
in base al valore di una variabile di flusso. Per ogni tag secondario <Allow>
diverso di <Class>
, il criterio gestisce un contatore diverso.
Per utilizzare l'elemento <Class>
, specifica una variabile di flusso utilizzando l'attributo ref
per il tag <Class>
. Edge utilizza quindi il valore della variabile di flusso per selezionare uno dei tag secondari <Allow>
per determinare il conteggio consentito del criterio. Edge associa il valore della variabile di flusso all'attributo class
del tag <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 della quota corrente è determinato dal valore del parametro di query time_variable
passato con ogni richiesta. Questa variabile può avere un valore
di peak_time
o off_peak_time
. Se il parametro query contiene un valore non valido, il criterio restituisce un errore di violazione della quota.
Valore predefinito: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
ref |
Da utilizzare per specificare una variabile di flusso contenente la classe di quota per una quota. |
nessuno | Obbligatorio |
Elemento <Allow>/<Class>/<Allow>
L'elemento <Allow>
specifica il limite per un contatore delle quote definito dall'elemento <Class>
. Per ogni
tag figlio <Allow>
diverso di <Class>
, il
criterio gestisce un contatore diverso.
Ad esempio:
<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 criterio di quota gestisce due contatori di quota denominati peak_time
e off_peak_time
.
Valore predefinito: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
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 |
Elemento <Interval>
Da utilizzare per specificare un numero intero (ad es. 1, 2, 5, 60 e così via) che verrà accoppiato al
TimeUnit
specificato (minuto, ora, giorno, settimana o mese) per determinare un periodo di tempo
durante il quale Edge calcola l'utilizzo della quota.
Ad esempio, un Interval
di 24
con un TimeUnit
di hour
indica che la quota verrà calcolata nell'arco di 24 ore.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Valore predefinito: | nessuno |
Presenza: | Obbligatorio |
Tipo: | Numero intero |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
ref |
Da utilizzare per specificare una variabile di flusso contenente l'intervallo per una quota. |
nessuno | Facoltativo |
Elemento <TimeUnit>
Da utilizzare per specificare l'unità di tempo applicabile alla quota.
Ad esempio, un Interval
di 24
con un TimeUnit
di hour
indica che la quota verrà calcolata nell'arco di 24 ore.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Valore predefinito: | nessuno |
Presenza: | Obbligatorio |
Tipo: |
Stringa. Seleziona tra |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
ref | Da utilizzare per specificare 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 viene risolto in fase di runtime, viene utilizzato il valore. |
nessuno | Facoltativo |
Elemento <StartTime>
Quando type
è impostato su calendar,
, vengono specificate la data
e l'ora in cui il contatore della quota inizierà a conteggiare, indipendentemente dal fatto che siano state ricevute richieste
da app.
Ad esempio:
<StartTime>2017-7-16 12:00:00</StartTime>
Valore predefinito: | nessuno |
Presenza: | Obbligatorio quando type è impostato su calendar . |
Tipo: |
Stringa nel formato della data e dell'ora ISO 8601. |
Elemento <Distributed>
Un'installazione di Edge può utilizzare uno o più processori di messaggi per elaborare le richieste. Imposta questo
elemento su true
per specificare che il criterio deve mantenere un conto
centrale e sincronizzarlo continuamente in tutti i processori di messaggi. Gli elaboratori dei messaggi possono essere in zone di disponibilità e/o regioni diverse.
Se utilizzi il valore predefinito false
, potresti superare la quota perché il conteggio per ogni Message Processor non è condiviso:
<Distributed>true</Distributed>
Per garantire che i contatori siano sincronizzati e aggiornati a ogni richiesta, imposta <Distributed>
e <Synchronous>
su true:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
Valore predefinito: | falso |
Presenza: | Facoltativo |
Tipo: | Booleano |
Elemento <Synchronous>
Imposta su true
per aggiornare in modo sincrono un contatore delle quote distribuite. Ciò significa che l'aggiornamento del contatore viene eseguito contemporaneamente al controllo della quota in una richiesta all'API. Imposta su true
se è essenziale non consentire chiamate API superiori alla quota.
Impostato su false
per aggiornare il contatore delle quote in modo asincrono. Ciò significa che è possibile che alcune chiamate API che superano la quota vengano eseguite, a seconda di quando viene aggiornato in modo asincrono il contatore delle quote nel repository centrale. Tuttavia, non dovrai affrontare
i potenziali impatti sulle prestazioni associati agli aggiornamenti sincroni.
L'intervallo di aggiornamento asincrono predefinito è di 10 secondi. Utilizza
l'elemento AsynchronousConfiguration
per configurare questo comportamento asincrono.
<Synchronous>false</Synchronous>
Valore predefinito: | falso |
Presenza: | Facoltativo |
Tipo: | Booleano |
Elemento <AsynchronousConfiguration>
Configura l'intervallo di sincronizzazione tra i contatori delle quote distribuite quando l'elemento di configurazione del criterio <Synchronous>
non è presente o è presente e impostato su false
.
Puoi eseguire la sincronizzazione dopo un periodo di tempo o un conteggio dei 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>
Valore predefinito: | SyncIntervalInSeconds = 10 secondi |
Presenza: | Facoltativo; ignorato quando <Synchronous> è impostato su
true . |
Tipo: |
Complesso |
Elemento <AsynchronousConfiguration>/<SyncIntervalInSeconds>
Utilizzalo per ignorare il comportamento predefinito in cui gli aggiornamenti asincroni vengono eseguiti dopo un intervallo di 10 secondi.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
L'intervallo di sincronizzazione deve essere >= 10 secondi, come descritto nell'argomento Limiti.
Valore predefinito: | 10 |
Presenza: | Facoltativo |
Tipo: |
Numero intero |
<AsynchronousConfiguration>/<SyncMessageCount> element
Specifica il numero di richieste in tutti i processori di messaggi Apigee tra gli aggiornamenti della quota.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Questo esempio specifica che il conteggio delle quote viene aggiornato ogni 5 richieste in ogni processore di messaggi Apigee Edge.
Valore predefinito: | n/a |
Presenza: | Facoltativo |
Tipo: |
Numero intero |
Elemento <Identifier>
Utilizza l'elemento <Identifier>
per configurare il criterio in modo da creare contatori unici in base a una variabile di flusso.
Se non utilizzi questo elemento, il criterio utilizza un singolo contatore applicato alla quota.
Questo elemento è discusso anche nel seguente post della community Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.
<Identifier ref="verifyapikey.verify-api-key.client_id"/>
Valore predefinito: | N/D |
Presenza: | Facoltativo |
Tipo: |
Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
ref |
Specifica una variabile di flusso che identifica il contatore da utilizzare per la richiesta. L'identificatore può essere un'intestazione HTTP, un parametro di query, un parametro di modulo o il contenuto di un messaggio univoco per ogni app, utente dell'app, sviluppatore di app, prodotto API o altra caratteristica. Il In alcuni casi, le impostazioni di quota devono essere recuperate quando non è disponibile alcun
|
N/D | Facoltativo |
Elemento <MessageWeight>
Da utilizzare per specificare il peso assegnato a ogni messaggio. Utilizza il peso del messaggio per aumentare l'impatto dei messaggi di richiesta che, ad esempio, consumano più risorse di calcolo rispetto ad altri.
Ad esempio, vuoi conteggiare i messaggi POST come "pesanti" o costosi il doppio rispetto ai messaggi GET. Pertanto, imposta MessageWeight
su 2 per un POST e su 1 per un 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. Eventuali richieste aggiuntive, POST o GET,
prima del ripristino del contatore vengono rifiutate.
Un valore che rappresenta MessageWeight
deve essere specificato da una variabile
del flusso e può essere estratto dalle intestazioni HTTP, dai parametri di query, da un payload
della richiesta XML o JSON o da qualsiasi altra variabile del flusso. Ad esempio, puoi impostarlo in un'intestazione denominata
weight
:
<MessageWeight ref="message_weight"/>
Valore predefinito: | N/D |
Presenza: | Facoltativo |
Tipo: |
Numero intero |
Variabili di flusso
Le seguenti variabili di flusso predefinite vengono completate automaticamente quando viene eseguito un criterio di quota. Per ulteriori informazioni sulle variabili di flusso, consulta la sezione Riferimento alle variabili.
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 all'interno di un intervallo di quota |
ratelimit.{policy_name}.available.count | Lungo | Sola lettura | Restituisce il numero di quote disponibili 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 la scadenza della quota e l'inizio del nuovo intervallo di quota. Quando il tipo di criterio di quota è |
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'identificatore client |
ratelimit.{policy_name}.class.allowed.count | Lungo | Sola lettura | Restituisce il numero di quote consentite definito nella classe |
ratelimit.{policy_name}.class.used.count | Lungo | Sola lettura | Restituisce la quota utilizzata all'interno di un corso |
ratelimit.{policy_name}.class.available.count | Lungo | Sola lettura | Restituisce il numero di quote disponibili nel corso |
ratelimit.{policy_name}.class.exceed.count | Lungo | Sola lettura | Restituisce il conteggio delle richieste che superano il limite nel corso nell'intervallo di quota corrente |
ratelimit.{policy_name}.class.total.exceed.count | Lungo | Sola lettura | Restituisce il conteggio totale delle richieste che superano il limite nel corso in tutti
gli intervalli di quota, quindi è 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 positivo o meno (true o false). |
Messaggi di errore
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 | Occurs if the <Interval> element is not defined within the Quota policy. This element
is mandatory and used to specify the interval of time applicable to the quota. The time interval
can be minutes, hours, days, weeks, or months as defined with the <TimeUnit> element. |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 | Occurs if the <TimeUnit> element is not defined within the Quota policy. This element
is mandatory and used to specify the unit of time applicable to the quota. The time interval
can be in minutes, hours, days, weeks, or months. |
build |
policies.ratelimit.InvalidMessageWeight |
500 | Occurs if the value of the <MessageWeight> element specified through a flow variable
is invalid (a non-integer value). |
build |
policies.ratelimit.QuotaViolation |
500 | The quota limit was exceeded. | N/A |
Deployment errors
Error name | Cause | Fix |
---|---|---|
InvalidQuotaInterval |
If the quota interval specified in the <Interval> element is not
an integer, then the deployment of the API proxy fails. For example, if the quota interval
specified is 0.1 in the <Interval> element, then the deployment of the
API proxy fails.
|
build |
InvalidQuotaTimeUnit |
If the time unit specified in the <TimeUnit> element is unsupported,
then the deployment of the API proxy fails. The supported time units are minute ,
hour , day , week , and month .
|
build |
InvalidQuotaType |
If the type of the quota specified by the type attribute in the <Quota>
element is invalid, then the deployment of the API proxy fails. The
supported quota types are default , calendar , flexi , and rollingwindow .
|
build |
InvalidStartTime |
If the format of the time specified in the <StartTime> element is
invalid, then the deployment of the API proxy fails. The valid format is yyyy-MM-dd HH:mm:ss ,
which is the ISO 8601 date and time format. For
example, if the time specified in the <StartTime> element is
7-16-2017 12:00:00 then the deployment of the API proxy fails.
|
build |
StartTimeNotSupported |
If the <StartTime> element is specified whose quota type is not
calendar type, then the deployment of the API proxy fails. The <StartTime> element is
supported only for the calendar quota type. For example, if the type attribute is set
to flexi or rolling window in the <Quota> element, then the
deployment of the API proxy fails.
|
build |
InvalidTimeUnitForDistributedQuota |
If the <Distributed> element is set to true and the <TimeUnit> element is set to
second then the deployment of the API proxy fails. The timeunit second is invalid for
a distributed quota. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
If the value specified for the <SyncIntervalInSeconds> element within the
<AsynchronousConfiguration> element in a Quota policy is less than zero, then the
deployment of the API proxy fails. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
If the value of the <AsynchronousConfiguration> element is set to true in a Quota policy, which also
has asynchronous configuration defined using the <AsynchronousConfiguration> element, then
the deployment of the API proxy fails. |
build |
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | ratelimit.QT-QuotaPolicy.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Example fault rule
<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 tra le norme relative a quota, arresto picchi e limite di frequenza simultanea