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
Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
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 per le quote. Questo elemento
è obbligatorio e viene utilizzato per specificare l'intervallo di tempo applicabile alla quota. L'intervallo di tempo
può essere minuti, ore, giorni, settimane o mesi, come definito con l'elemento <TimeUnit> . |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 | Si verifica se l'elemento <TimeUnit> non è definito nel criterio per le quote. Questo elemento
è obbligatorio e viene utilizzato per specificare l'unità di tempo applicabile alla quota. L'intervallo di tempo
può essere 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 (valore non intero). |
build |
policies.ratelimit.QuotaViolation |
500 | Il limite di quota è stato superato. | N/D |
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
Il proxy API non funziona.
|
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 in <Quota>
non è valido, il deployment del proxy API non va a buon fine. La
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 ,
che è il formato di data e ora in ISO 8601. Per
Ad esempio, se l'ora specificata 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 è
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
a flexi o rolling window nell'elemento <Quota> , quindi
che 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 dei campi
L'elemento <AsynchronousConfiguration> in un criterio per le quote è minore di zero, allora
che il deployment del proxy API non va a buon fine. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
Se il valore dell'elemento <AsynchronousConfiguration> è impostato su true in un criterio per le quote, che
abbia una configurazione asincrona definita utilizzando l'elemento <AsynchronousConfiguration> , quindi
l'esecuzione del deployment del proxy API
non va a buon fine. |
build |
Variabili di errore
Queste variabili vengono impostate quando il criterio attiva un errore. Per ulteriori informazioni, vedi Cosa devi sapere sugli errori relativi alle norme.
Variabili | Dove | Esempio |
---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | ratelimit.QT-QuotaPolicy.failed = true |
Esempio di risposta di errore
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Esempio di regola di errore
<FaultRules> <FaultRule name="Quota Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "QuotaViolation") </Condition> </Step> <Condition>ratelimit.Quota-1.failed=true</Condition> </FaultRule> </FaultRules>
Schemi
Argomenti correlati
Confronto tra le norme relative a quota, arresto picchi e limite di frequenza simultanea