Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Cosa
Utilizza il criterio per le quote per configurare il numero di messaggi di richiesta consentiti da un proxy API un periodo di tempo, ad esempio minuto, ora, giorno, settimana o mese. Puoi impostare la quota in modo che uguale per tutte le app che accedono al proxy API oppure puoi impostare la quota in base a:
- Il prodotto che contiene il proxy API
- L'app che richiede l'API
- Lo sviluppatore dell'app
- Molti altri criteri
Non utilizzare Quota per proteggerti dai picchi di traffico complessivi. Per farlo, usa la funzione Spike Arrest . Vedi Arresto dei picchi .
Video
Questi video introducono la gestione delle quote con i criteri per le quote:
Introduzione (nuovo bordo)
Introduzione (versione classica)
Quota dinamica
Distribuito e Sincrona
Peso del messaggio
Calendar
Finestre scorrevoli
Flexi
Quota condizionale
Variabili di flusso
Gestione degli errori
Esempi
Questi esempi di codice dei criteri illustrano come iniziare e terminare i periodi di quota in base a:
Quota più dinamica
<Quota name="CheckQuota"> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/> </Quota>
Le quote dinamiche consentono di configurare un singolo criterio per le quote che applica quote diverse impostazioni basate sulle informazioni passate ai criteri per le quote. Un altro termine per le impostazioni della quota in in questo contesto è "Piano di servizio". La quota dinamica controlla la posizione "Piano di servizio" e poi applica in modo forzato 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, il valore è in uso.
Ad esempio, quando crei un prodotto API, puoi scegliere di impostare la quota consentita limite, unità di tempo e intervallo. Tuttavia, l'impostazione di questi valori nel prodotto API non ne forza l'uso in un proxy API. Devi inoltre aggiungere un criterio per le quote al proxy API che legge questi valori. Consulta Creare API prodotti per saperne di più.
Nell'esempio precedente, il proxy API contenente il criterio per le quote utilizza una verificaAPIKey
denominato verify-api-key
, per convalidare la chiave API passata in una richiesta. La
Il criterio per le quote accede alle variabili di flusso dal criterio VerifyAPIKey per leggere la quota
vengono impostati sul prodotto API. Per scoprire di più sulle variabili di flusso VerifyAPIKey, consulta la sezione Verificare il criterio della chiave API.
Un'altra opzione è impostare attributi personalizzati per singoli sviluppatori o app e poi leggere quei valori nel criterio per le quote. Ad esempio, se vuoi impostare valori di quota diversi sviluppatore. In questo caso, imposti gli attributi personalizzati per lo sviluppatore contenente il limite, unità di tempo e intervallo. Poi farai riferimento a questi valori nel criterio per le quote come mostrato sotto:
<Quota name="DeveloperQuota"> <Identifier ref="verifyapikey.verify-api-key.client_id"/> <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> </Quota>
Questo esempio utilizza anche le variabili di flusso VerifyAPIKey per fare riferimento agli attributi personalizzati impostati sullo sviluppatore.
Puoi utilizzare qualsiasi variabile per impostare i parametri del criterio per le quote. Queste variabili possono provengono da:
- Variabili di flusso
- Proprietà nel prodotto, nell'app o nello sviluppatore API
- Una mappa chiave-valore (KVM)
- Un'intestazione, un parametro di query, un parametro del modulo e così via
Per ogni proxy API, puoi aggiungere un criterio per le quote che faccia riferimento alla stessa variabile di tutti gli altri criteri per le quote in tutti gli altri proxy oppure il criterio per le quote può fare riferimento univoche per il criterio e il proxy in questione.
Ora di inizio
<Quota name="QuotaPolicy" type="calendar"> <StartTime>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 una
valore <StartTime>
esplicito. Il valore dell'ora corrisponde all'ora GMT, non locale
nel tempo. Se non specifichi 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 <StartTime>
,
Valori di <Interval>
e <TimeUnit>
. Per questo
Ad esempio, la quota inizia il conteggio alle 10:30 (GMT) del 18 febbraio 2017 e si aggiorna ogni
5 ore. Pertanto, il prossimo aggiornamento è alle 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 queste variabili di flusso nel proxy API per eseguire l'elaborazione condizionale, monitora il criterio man mano che si avvicina al limite della quota, restituisci il contatore della quota corrente a un'app o ad altre motivi.
L'accesso alle variabili di flusso per il criterio si basa sui criteri
Attributo name
, per il criterio sopra indicato QuotaPolicy
tu
accede alle sue variabili di flusso nel formato:
ratelimit.QuotaPolicy.allowed.count
: conteggio consentito.ratelimit.QuotaPolicy.used.count
: valore del contatore corrente.ratelimit.QuotaPolicy.expiry.time
: ora UTC in cui viene reimpostato il contatore.
Esistono molte altre variabili di flusso a cui puoi accedere, come descritto di seguito.
Ad esempio, puoi utilizzare il seguente criterio AssegnaMessage per restituire i valori di Quota variabili di flusso come intestazioni delle risposte:
<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 campione per applicare una quota di 10.000 chiamate all'ora. Il criterio viene reimpostato il contatore della quota nella parte superiore di ogni ora. Se il contatore raggiunge la quota di 10.000 chiamate prima della fine dell'ora, le chiamate oltre le 10.000 vengono rifiutate.
Ad esempio, se il contatore parte da 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 è
ricevuti alle ore 2017-07-08 07:35:28
e il numero dei messaggi raggiunge le 10.000
prima del giorno 2017-07-08 08:00:00
, le chiamate che superano questo conteggio vengono rifiutate
il conteggio viene reimpostato in cima all'ora.
Il tempo di reimpostazione del contatore si basa sulla combinazione di <Interval>
e
<TimeUnit>
. Ad esempio, se imposti <Interval>
su
12 per <TimeUnit>
di ora, poi il contatore viene reimpostato ogni dodici ore.
Puoi impostare <TimeUnit>
su minuto, ora, giorno, settimana o mese.
Puoi fare riferimento a questo criterio in più posizioni nel proxy API. Ad esempio, potresti posizionarlo su Proxy PreFlow in modo che venga eseguito su ogni richiesta. Oppure puoi inserire su più flussi nel proxy API. Se utilizzi questo criterio in più punti delle , mantiene un unico contatore aggiornato da tutte le istanze del criterio.
In alternativa, puoi definire più criteri per le quote nel proxy API. Ogni criterio per le quote
mantiene il proprio contatore basato sull'attributo name
del criterio.
Imposta identificatore
<Quota name="QuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>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 dal
l'origine di una richiesta. In alternativa, puoi utilizzare l'attributo <Identifier>
un criterio per le quote per mantenere contatori separati in base al valore
Attributo <Identifier>
.
Ad esempio, utilizza il tag <Identifier>
per definire contatori separati per
per ogni ID client. Quando viene inviata una richiesta al proxy, l'app client passa quindi un'intestazione contenente
clientID
, come mostrato nell'esempio precedente.
Puoi specificare qualsiasi variabile di flusso per l'attributo <Identifier>
. Per
Ad esempio, puoi specificare che un parametro di query denominato id
contiene il parametro
identificatore:
<Identifier ref="request.queryparam.id"/>
Se utilizzi il criterio VerifyAPIKey per convalidare la chiave API o i criteri OAuthV2
con i token OAuth, puoi utilizzare le informazioni nella chiave API o nel token per definire
per lo stesso criterio per le quote. Ad esempio,
Il tag <Identifier>
utilizza la variabile di flusso client_id
di un
Criterio VerifyAPIKey denominato verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Ogni valore client_id
univoco ora definisce il proprio contatore nella quota
.
Classe
<Quota name="QuotaPolicy"> <Interval>1</Interval> <TimeUnit>day</TimeUnit> <Allow> <Class ref="request.header.developer_segment"> <Allow class="platinum" count="10000"/> <Allow class="silver" count="1000" /> </Class> </Allow> </Quota>
Puoi impostare i limiti di quota in modo dinamico utilizzando un conteggio delle quote basato su classi. In questo esempio,
il limite della quota è determinato dal valore dell'attributo developer_segment
passata a ogni richiesta. La variabile può avere il valore platinum
o silver
. Se l'intestazione contiene un valore non valido, il criterio restituisce una quota
errore di violazione.
Informazioni sui criteri per le quote
Una quota è un'allocazione di messaggi di richiesta che un proxy API può gestire in un periodo di tempo. come minuto, ora, giorno, settimana o mese. Il criterio gestisce i contatori che calcolano il numero di richieste ricevute dal proxy API. Questa funzionalità consente ai provider API di applicare limiti Il numero di chiamate API effettuate dalle app in un intervallo di tempo. Utilizzando i criteri per le quote, puoi Ad esempio, limita le app a 1 richiesta al minuto o a 10.000 richieste al mese.
Ad esempio, se una quota è definita come 10.000 messaggi al mese, la limitazione di frequenza inizia dopo il 10.000° messaggio. Non importa se sono stati conteggiati 10.000 messaggi il primo giorno o l'ultimo giorno di tale periodo; nessuna area di richieste aggiuntiva consentita fino al contatore della quota viene reimpostata automaticamente alla fine dell'intervallo di tempo specificato o finché la quota non viene esplicitamente reimpostata usando Reimposta quota .
Una variante della quota chiamata SpikeArrest impedisce picchi di traffico (o burst) che possono essere causate da un improvviso aumento dell'utilizzo, da client con bug o da attacchi dannosi. Per ulteriori informazioni informazioni su SpikeArrest, consulta le norme relative all'arresto degli attacchi.
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 usano la stessa configurazione dei criteri per le quote.
Tipi di criteri per le quote
Il criterio per le quote supporta diversi tipi di criteri: predefiniti, calendar
,
flexi
e rollingwindow
. Ogni tipo definisce quando il contatore della quota
all'avvio e al reset, come illustrato nella tabella seguente:
Unità di tempo | Ripristino predefinito (o nullo) | reimpostazione calendario | ripristino flessibile |
---|---|---|---|
minuto | Inizio del prossimo minuto | Un minuto dopo <StartTime> |
Un minuto dopo la prima richiesta |
ora | Inizio della prossima ora | Un'ora dopo <StartTime> |
Un'ora dopo la prima richiesta |
giorno | Mezzanotte GMT del giorno corrente | 24 ore dopo <StartTime> |
24 ore dopo la prima richiesta |
settimana | Mezzanotte GMT Domenica alla fine della settimana | Una settimana dopo <StartTime> |
Una settimana dopo la prima richiesta |
mese | Mezzanotte GMT dell'ultimo giorno del mese | Un mese (28 giorni) dopo <StartTime> |
Un mese (28 giorni) dopo la prima richiesta |
Per type="calendar"
, devi specificare il valore di
<StartTime>
.
La tabella non elenca il valore per il tipo rollingwindow
. Finestra temporale continua
funzionano impostando la dimensione di una "finestra", ad esempio una finestra di un'ora o di un giorno. Quando
quando arriva una nuova richiesta, il criterio determina se la quota è stata superata in passato
"finestra" del tempo.
Ad esempio, definisci una finestra di due ore che consente 1000 richieste. Una nuova richiesta alle 16:45.Il criterio calcola il conteggio delle quote delle ultime due ore, ovvero il numero di richieste a partire dalle 14:45. Se il limite della quota non è stato superato nel di due ore, la richiesta è consentita.
Un minuto dopo, alle 16:46, è in arrivo un'altra richiesta. Ora il criterio calcola numero di quote dalle 14:46 per determinare se il limite è stato superato.
Per il tipo rollingwindow
, il contatore non viene mai reimpostato, ma viene
viene ricalcolato a ogni richiesta.
Informazioni sui contatori delle quote
Per impostazione predefinita, un criterio per le quote gestisce un unico contatore, indipendentemente dal numero di volte
farvi riferimento in un proxy API. Il nome del contatore della quota è basato su
l'attributo name
del criterio.
Ad esempio, crei un criterio per le quote denominato MyQuotaPolicy
con un limite di 5
richieste e lo collochi su più flussi (flusso A, B e C) nel proxy API. Anche se
utilizzato in più flussi, mantiene un unico contatore che viene aggiornato da tutte le istanze
norme:
- Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è uguale a 1
- Viene eseguito il flusso B -> MyQuotaPolicy viene eseguito e il relativo contatore è = 2
- Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è = 3
- Viene eseguito il flusso C -> MyQuotaPolicy viene eseguito e il relativo contatore è uguale a 4
- Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è pari a 5
La richiesta successiva a uno dei tre flussi viene rifiutata perché il contatore della quota ha raggiunto il suo limite.
Utilizzare lo stesso criterio per le quote in più di una posizione in un flusso proxy API, con la possibilità causare involontariamente l'esaurimento della quota più velocemente del previsto è un anti-pattern descritto in Il libro degli antipattern Apigee Edge.
In alternativa, puoi definire più criteri per le quote nel proxy API e utilizzare un altro
in ogni flusso. Ogni criterio per le quote gestisce il proprio contatore, basato su
l'attributo name
del criterio.
In alternativa, utilizza
<Class>
o <Identifier>
elementi in
il criterio per le quote per definire più contatori univoci in un unico criterio. Utilizzando questi
, un'unica norma può mantenere diversi contatori in base all'app che effettua la richiesta,
lo sviluppatore dell'app che effettua la richiesta, un ID client o un altro identificatore client e altro ancora. Consulta le
esempi sopra per ulteriori informazioni sull'uso
Elementi <Class>
o <Identifier>
.
Notazione dell'ora
Tutti i tempi di quota sono impostati sul valore Coordinated Universal Ora (UTC).
La notazione dell'ora delle quote segue la notazione della data standard internazionale definita in Internazionale Standard ISO 8601.
Le date sono definite anno, mese e giorno nel seguente formato: YYYY-MM-DD
.
Ad esempio, 2015-02-04
rappresenta il 4 febbraio 2015.
L'ora del giorno viene espressa in ore, minuti e secondi nel seguente formato:
hours:minutes:seconds
. Ad esempio, 23:59:59
rappresenta il momento in cui
secondo prima di mezzanotte.
Tieni presente che sono disponibili due notazioni, 00:00:00
e 24:00:00
,
distinguere le due mezze notti che possono essere associate a una sola data. Di conseguenza, 2015-02-04
24:00:00
corrisponde alla stessa data e ora di 2015-02-05 00:00:00
. Il secondo è
di solito la notazione preferita.
Recupero delle impostazioni della quota dalla configurazione del prodotto API
Puoi impostare limiti di quota nelle configurazioni dei prodotti API. Questi limiti non vengono automaticamente applicare la quota. Puoi però fare riferimento alle impostazioni delle quote dei prodotti in un criterio per le quote. Ecco alcuni esempi vantaggi dell'impostazione di una quota sul prodotto per far riferimento ai criteri di quota:
- I criteri per le quote possono utilizzare un'impostazione uniforme su tutti i proxy API nel prodotto API.
- Puoi apportare modifiche in fase di runtime all'impostazione della quota in un prodotto API e ai criteri sulle quote che fanno riferimento al valore, i valori di quota vengono automaticamente aggiornati.
Per ulteriori informazioni sull'utilizzo delle impostazioni di quota da un prodotto API, consulta "Quota dinamica" esempio sopra..
Per informazioni sulla configurazione di prodotti API con limiti di quota, consulta Creare prodotti API.
Riferimento elemento
Di seguito sono riportati gli elementi e gli attributi che puoi configurare in questo criterio. Tieni presente che alcuni elementi
si escludono a vicenda o non sono obbligatorie. Visualizza gli esempi per l'utilizzo specifico. La
Le seguenti verifyapikey.VerifyAPIKey.apiproduct.*
variabili sono disponibili per impostazione predefinita quando
un criterio di verifica della chiave API denominato "VerifyAPIKey" viene utilizzato per controllare la chiave API dell'app nella richiesta.
I valori della variabile provengono dalle impostazioni della quota sul prodotto API a cui è associata la chiave
come descritto in Recupero delle impostazioni di quota dal prodotto API
configurazione.
<Quota 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>
<Quota> attributi
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
Gli attributi riportati di seguito sono specifici di questo criterio.
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
tipo |
Consente di determinare quando e come il contatore della quota controlla l'utilizzo della quota. Consulta Per ulteriori informazioni, consulta i tipi di criteri per le quote. Se ometti un valore I valori validi sono:
|
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 |
<Allow> elemento
Specifica il limite di conteggio per la quota. Se il contatore per il criterio raggiunge questo limite le chiamate successive vengono rifiutate fino a quando il contatore non viene reimpostato.
Di seguito sono riportati tre modi per impostare l'elemento <Allow>
:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
Se specifichi sia count
sia countRef
, countRef
ha la priorità. Se countRef
non si risolve in fase di runtime, il valore di
È in uso count
.
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | Numero intero |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
conteggio |
Utilizzalo 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 |
<Allow>/<Class> elemento
L'elemento <Class>
ti consente di condizionare il valore
dell'elemento <Allow>
in base al valore di una variabile di flusso. Per
ogni tag secondario <Allow>
di <Class>
,
il criterio mantiene uno diverso contatore.
Per utilizzare l'elemento <Class>
, specifica una variabile di flusso utilizzando il metodo
ref
al tag <Class>
. Edge utilizza quindi il valore
di flusso per selezionare uno dei <Allow>
tag secondari per determinare il
del criterio. Il perimetro associa il valore della variabile di flusso a 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 di quota corrente è determinato dal valore del parametro
time_variable
parametro di query passato a ogni richiesta. La variabile può avere un valore
di peak_time
o off_peak_time
. Se il parametro di query contiene un valore non valido
, il criterio restituisce un errore di violazione della quota.
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento |
Consente di specificare una variabile di flusso contenente la classe di quota per una quota. |
nessuno | Obbligatorio |
<Allow>/<Class>/<Allow> elemento
L'elemento <Allow>
specifica il limite per un contatore delle quote
definita dall'elemento <Class>
. Per ogni
un altro tag secondario <Allow>
di <Class>
,
mantiene uno diverso contatore.
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 per le quote gestisce due contatori delle quote denominati
di peak_time
e off_peak_time
.
Predefinita: | 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 |
<Interval> elemento
Da utilizzare per specificare un numero intero (ad esempio, 1, 2, 5, 60 e così via) che verrà associato al valore
TimeUnit
specifichi (minuto, ora, giorno, settimana o mese) per determinare un orario
durante il quale Edge calcola l'utilizzo della quota.
Ad esempio, Interval
di 24
con
un TimeUnit
di hour
significa che la quota sarà
calcolati nell'arco di 24 ore.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Predefinita: | nessuno |
Presenza: | Obbligatorio |
Tipo: | Numero intero |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento |
Utilizzalo per specificare una variabile di flusso contenente l'intervallo per un
quota. |
nessuno | Facoltativo |
<TimeUnit> elemento
Utilizzalo per specificare l'unità di tempo applicabile alla quota.
Ad esempio, Interval
di 24
con
un TimeUnit
di hour
significa che la quota sarà
calcolati nell'arco di 24 ore.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Predefinita: | nessuno |
Presenza: | Obbligatorio |
Tipo: |
Stringa. Seleziona tra |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento | Utilizzalo per specificare una variabile di flusso contenente l'unità di tempo per una quota. ref
ha la precedenza su un intervallo esplicito. Se ref
non viene risolto in fase di runtime, viene utilizzato il valore. |
nessuno | Facoltativo |
<StartTime> elemento
Se il criterio type
è impostato su calendar,
, viene specificata la data
e l'ora in cui inizierà il conteggio il contatore della quota, indipendentemente dal fatto che siano state
ricevuto da qualsiasi app.
Devi fornire un valore StartTime
esplicito quando type
è impostato in modo esplicito
a calendar,
non puoi utilizzare un riferimento a una variabile di flusso, se specifichi
un valore StartTime
se non è impostato alcun valore type
, riceverai un
.
Ad esempio:
<StartTime>2017-7-16 12:00:00</StartTime>
Predefinita: | nessuno |
Presenza: | Obbligatorio quando il criterio type è impostato su calendar . |
Tipo: |
Stringa in ISO 8601 formato di data e ora. |
<Distribuito> elemento
Un'installazione di Edge può utilizzare uno o più processori di messaggi per elaborare le richieste. Imposta questo
su true
per specificare che il criterio deve mantenere una
e sincronizzarlo continuamente su tutti i processori di messaggi. I processori di messaggi
possono essere in zone di disponibilità e/o regioni.
Se utilizzi il valore predefinito false
, potresti superare la quota per
il conteggio per ciascun processore di messaggi non viene 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>
Predefinita: | falso |
Presenza: | Facoltativo |
Tipo: | Booleano |
<Synchronous> elemento
Imposta su true
per aggiornare un contatore di quota distribuita in modo sincrono. Questo
significa che l'aggiornamento del contatore viene eseguito nello stesso momento in cui viene controllata la quota su una richiesta
all'API. Imposta su true
se è essenziale non consentire nessuna API
oltre la quota.
Imposta su false
per aggiornare il contatore della quota in modo asincrono. Ciò significa
è possibile che alcune chiamate API che superano la quota vengano andate a buon fine, a seconda di quando
il contatore delle quote nel repository centrale
viene aggiornato in modo asincrono. Tuttavia, non affronterai
il potenziale impatto sulle prestazioni associato agli aggiornamenti sincroni.
L'intervallo di aggiornamento asincrono predefinito è di 10 secondi. Utilizza la
AsynchronousConfiguration
per configurare questo comportamento asincrono.
<Synchronous>false</Synchronous>
Predefinita: | falso |
Presenza: | Facoltativo |
Tipo: | Booleano |
<AsynchronousConfiguration> elemento
Configura l'intervallo di sincronizzazione tra i contatori delle quote distribuite quando il criterio
l'elemento di configurazione <Synchronous>
non è presente o non è presente e impostato
a false
.
Puoi eseguire la sincronizzazione dopo un periodo di tempo o il numero di messaggi utilizzando il metodo
Elementi secondari SyncIntervalInSeconds
o SyncMessageCount
.
Si escludono a vicenda. Ad esempio,
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
o
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Predefinita: | SyncIntervalInSeconds = 10 secondi |
Presenza: | Facoltativo; ignorato quando <Synchronous> è impostato su
true . |
Tipo: |
Complesso |
<AsynchronousConfiguration>/<SyncIntervalInSeconds> elemento
Utilizza questa opzione per eseguire l'override del comportamento predefinito in cui gli aggiornamenti asincroni vengono eseguiti dopo un di 10 secondi.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
L'intervallo di sincronizzazione deve essere maggiore o uguale a 10 secondi, come descritto in Limiti.
Predefinita: | 10 |
Presenza: | Facoltativo |
Tipo: |
Numero intero |
<AsynchronousConfiguration>/<SyncMessageCount> elemento
Specifica il numero di richieste tra tutti i processori di messaggi Apigee tra la quota aggiornamenti.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
In questo esempio viene specificato che il conteggio delle quote viene aggiornato ogni 5 richieste in ogni piattaforma Apigee Processore di messaggi Edge.
Predefinita: | n/d |
Presenza: | Facoltativo |
Tipo: |
Numero intero |
<Identifier> elemento
Utilizza l'elemento <Identifier>
per configurare il criterio in modo da creare elementi univoci
in base a una variabile di flusso.
Se non utilizzi questo elemento, la norma utilizza un unico contatore applicato a la 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"/>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: |
Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
riferimento |
Specifica una variabile di flusso che identifica il contatore da utilizzare per la richiesta. La L'identificatore può essere un'intestazione HTTP, un parametro di ricerca, un parametro del modulo o un contenuto del messaggio univoco per ogni app, utente di app, sviluppatore di app, prodotto API o altro una caratteristica. Il metodo In alcuni casi, è necessario recuperare le impostazioni della quota
|
N/D | Facoltativo |
<MessageWeight> elemento
Utilizzalo per specificare il peso assegnato a ciascun messaggio. Usa il peso del messaggio per aumentare l'impatto di richieste che, ad esempio, consumano più risorse di calcolo di altre.
Ad esempio, se vuoi che i messaggi POST siano il doppio più "pesanti" o costoso, come GET
messaggi. Di conseguenza, imposti MessageWeight
su 2 per POST e 1 per
SCARICA. Puoi anche impostare MessageWeight
su 0 in modo che la richiesta non
influisce sul contatore. In questo esempio, se la quota è di 10 messaggi al minuto
il valore MessageWeight
per le richieste POST è 2
, la quota
consente cinque richieste POST in un intervallo di 10 minuti. Per qualsiasi richiesta aggiuntiva, POST o GET,
prima che il contatore venga reimpostato.
Un valore che rappresenta MessageWeight
deve essere specificato da un flusso
e può essere estratta da intestazioni HTTP, parametri di ricerca, una richiesta XML o JSON
o qualsiasi altra variabile di flusso. Ad esempio, lo imposti in un'intestazione denominata
weight
:
<MessageWeight ref="message_weight"/>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: |
Numero intero |
Variabili di flusso
Le seguenti variabili di flusso predefinite vengono compilate automaticamente quando un criterio per le quote . Per ulteriori informazioni sulle variabili di flusso, consulta Riferimento per le variabili.
Variabili | Tipo | Autorizzazioni | Descrizione |
---|---|---|---|
ratelimit.{policy_name}.allowed.count | Lungo | Sola lettura | Restituisce il conteggio delle quote consentito |
ratelimit.{policy_name}.used.count | Lungo | Sola lettura | Restituisce la quota corrente utilizzata entro un intervallo di quota |
ratelimit.{policy_name}.available.count | Lungo | Sola lettura | Restituisce il conteggio della quota disponibile nell'intervallo di quota |
ratelimit.{policy_name}.exceed.count | Lungo | Sola lettura | Restituisce 1 dopo il superamento della quota. |
ratelimit.{policy_name}.total.exceed.count | Lungo | Sola lettura | Restituisce 1 dopo il superamento della quota. |
ratelimit.{policy_name}.expiry.time | Lungo | Sola lettura |
Restituisce il tempo UTC in millisecondi che determina quando scade la quota e di inizio intervallo di quota. Se il tipo di criterio per le quote è |
ratelimit.{policy_name}.identifier | Stringa | Sola lettura | Restituisce il riferimento dell'identificatore (client) associato al criterio |
ratelimit.{policy_name}.class | Stringa | Sola lettura | Restituisce la classe associata all'identificatore cliente |
ratelimit.{policy_name}.class.allowed.count | Lungo | Sola lettura | Restituisce il conteggio delle quote consentito definito nella classe |
ratelimit.{policy_name}.class.used.count | Lungo | Sola lettura | Restituisce la quota utilizzata all'interno di una classe |
ratelimit.{policy_name}.class.available.count | Lungo | Sola lettura | Restituisce il conteggio delle quote disponibili nella classe |
ratelimit.{policy_name}.class.exceed.count | Lungo | Sola lettura | Restituisce il conteggio delle richieste che supera il limite nella classe nella classe intervallo quota attuale |
ratelimit.{policy_name}.class.total.exceed.count | Lungo | Sola lettura | Restituisce il conteggio totale delle richieste che supera il limite nella classe in tutte
intervalli di quota, pertanto è la somma di class.exceed.count per
intervalli di quota. |
ratelimit.{policy_name}.failed | Booleano | Sola lettura |
Indica se il criterio ha avuto esito negativo (vero o falso). |
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore 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 Norme relative a quote, picco e limiti di frequenza simultanei