Stai visualizzando la documentazione di Apigee Edge.
Consulta la
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 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 puoi impostarla 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, utilizza il criterio SpikeArrest. Consulta le norme Spike Arrest.
Video
Questi video introducono la gestione delle quote con le norme relative alle quote:
Intro (New Edge)
Intro (Classic Edge)
Quota dinamica
Distribuito e sincrono
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 dinamica più elevata
<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'unica norma relativa alle quote che applica impostazioni diverse in base alle informazioni trasmesse alla norma relativa alle quote. 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 che 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 di quota consentito, l'unità di tempo e l'intervallo. Tuttavia, l'impostazione di questi valori nel prodotto API non ne impone l'utilizzo in un proxy API. Devi anche aggiungere un criterio Quota al proxy API che legge questi valori. Per saperne di più, consulta Crea prodotti API.
Nell'esempio precedente, il proxy API contenente i criteri per le quote utilizza un criterio VerifyAPIKey, denominato verify-api-key, per convalidare la chiave API trasmessa in una richiesta. Il criterio
Quota accede quindi alle variabili di flusso dal criterio VerifyAPIKey per leggere i valori di quota
impostati sul prodotto API. Per saperne di più sulle variabili di flusso VerifyAPIKey, consulta Norma Verifica chiave API.
Un'altra opzione è impostare attributi personalizzati per singoli sviluppatori o app e poi leggere questi valori nel criterio relativo alle quote. Ad esempio, vuoi impostare valori di quota diversi per sviluppatore. In questo caso, imposti gli attributi personalizzati sullo sviluppatore contenenti il limite, l'unità di tempo e l'intervallo. 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 provenire 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 del 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 può fare riferimento a variabili univoche per quel criterio e 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 temporale è 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 della quota per ogni app viene aggiornato in base ai valori di <StartTime>,
<Interval> e <TimeUnit>. Per questo
esempio, la quota inizia a essere conteggiata alle 10:30 GMT del 18 febbraio 2017 e viene aggiornata 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 dai criteri per le quote. Puoi accedere a queste variabili di flusso nel proxy API per eseguire l'elaborazione condizionale, monitorare la policy 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 la policy si basa sull'attributo
name, per la policy precedente denominata QuotaPolicy puoi
accedere alle variabili di flusso nel formato:
ratelimit.QuotaPolicy.allowed.count: conteggio consentito.ratelimit.QuotaPolicy.used.count: valore attuale del contatore.ratelimit.QuotaPolicy.expiry.time: l'ora UTC in cui il contatore viene reimpostato.
Come descritto di seguito, puoi accedere a molte altre variabili di flusso.
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. Le norme reimpostano il contatore della quota all'inizio di ogni ora. Se il contatore raggiunge la quota di 10.000 chiamate prima della fine dell'ora, le chiamate successive a 10.000 vengono rifiutate.
Ad esempio, se il contatore inizia 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 viene ricevuto alle ore 2017-07-08 07:35:28 e il conteggio dei messaggi raggiunge 10.000 prima delle ore 2017-07-08 08:00:00, le chiamate oltre questo conteggio vengono rifiutate fino al ripristino del conteggio all'inizio dell'ora.
Il tempo di ripristino del contatore si basa sulla combinazione di <Interval> e
<TimeUnit>. Ad esempio, se imposti <Interval> su
12 per un <TimeUnit> di ora, il contatore viene reimpostato ogni 12 ore.
Puoi impostare <TimeUnit> su minuti, ore, giorni, settimane o mesi.
Puoi fare riferimento a questa norma in più punti del proxy API. Ad esempio, puoi inserirlo nel pre-flusso del proxy in modo che venga eseguito a ogni richiesta. In alternativa, puoi posizionarlo in più flussi nel proxy API. Se utilizzi questo criterio in più posizioni nel proxy, viene mantenuto un unico contatore aggiornato da tutte le istanze del criterio.
In alternativa, puoi definire più policy Quota nel proxy API. Ogni criterio di quota
mantiene il proprio contatore, in base all'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, una policy Quota 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. In 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>. Ad esempio, puoi specificare che un parametro di query denominato id contenga l'identificatore univoco:
<Identifier ref="request.queryparam.id"/>
Se utilizzi il criterio VerifyAPIKey per convalidare la chiave API o i criteri OAuthV2
con token OAuth, puoi utilizzare le informazioni nella chiave API o nel token 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 univoco di client_id ora definisce un proprio contatore nel criterio
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 sulla classe. In questo esempio,
il limite di quota è determinato dal valore dell'intestazione developer_segment
trasmessa con ogni richiesta. Questa variabile può avere un valore di 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, ad esempio minuto, ora, giorno, settimana o mese. I criteri mantengono i contatori che conteggiano il numero di richieste ricevute dal proxy API. Questa funzionalità consente ai fornitori di API di applicare limiti al numero di chiamate API effettuate dalle app in un intervallo di tempo. Utilizzando i criteri relativi alle quote puoi, ad esempio, limitare le app a una richiesta al minuto o a 10.000 richieste al mese.
Ad esempio, se una quota è definita come 10.000 messaggi al mese, la limitazione della velocità inizia dopo il 10.000° messaggio. Non importa se sono stati conteggiati 10.000 messaggi il primo o l'ultimo giorno di quel 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 in modo esplicito utilizzando le norme di reimpostazione della quota.
Una variante della quota chiamata SpikeArrest impedisce picchi (o burst) di traffico che possono essere causati da un improvviso aumento dell'utilizzo, da client con bug o da attacchi dannosi. Per ulteriori informazioni su SpikeArrest, consulta le norme 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 dei criteri per le quote.
Tipi di criteri per le quote
I criteri per le quote supportano diversi tipi di criteri: predefiniti, calendar,
flexi e rollingwindow. Ogni tipo definisce quando inizia e quando viene reimpostato il contatore della quota, come mostrato nella tabella seguente:
| Unità di tempo | Reimpostazione predefinita (o null) | reimpostazione del calendario | flexi reset |
|---|---|---|---|
| minuto | Inizio del minuto successivo | Un minuto dopo le ore <StartTime> |
Un minuto dopo la prima richiesta |
| ora | Inizio dell'ora successiva | 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 della finestra mobile
funzionano impostando le dimensioni di una "finestra" di quota, ad esempio una finestra di un'ora o di un giorno. Quando arriva una nuova richiesta, il criterio determina se la quota è stata superata nella "finestra" di tempo precedente.
Ad esempio, definisci un intervallo di due ore che consente 1000 richieste. Alle 16:45 viene ricevuta una nuova richiesta.Il criterio calcola il conteggio della quota per la finestra delle due ore precedenti, ovvero il numero di richieste 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 conteggio della quota dalle ore 14:46 per determinare se il limite è stato superato.
Per il tipo rollingwindow, il contatore non viene mai reimpostato, ma viene
ricalcolato a ogni richiesta.
Informazioni sui contatori delle quote
Per impostazione predefinita, un criterio per le quote gestisce un unico contatore, indipendentemente dal numero di volte in cui lo fai
riferimento in un proxy API. Il nome del contatore della quota si basa sull'attributo name del criterio.
Ad esempio, crei una norma relativa alle quote denominata MyQuotaPolicy con un limite di 5 richieste e la inserisci in più flussi (A, B e C) nel proxy API. Anche se viene
utilizzato in più flussi, mantiene un unico contatore aggiornato da tutte le istanze del
criterio:
- Il flusso A viene eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 1
- Il flusso B viene eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 2
- Il flusso A viene eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 3
- Viene eseguito il flusso C -> viene eseguita MyQuotaPolicy e il relativo contatore = 4
- Il flusso A viene eseguito -> MyQuotaPolicy viene eseguito e il relativo contatore = 5
La richiesta successiva a uno dei tre flussi viene rifiutata perché il contatore della quota ha raggiunto il limite.
L'utilizzo dello stesso criterio per le quote in più posizioni in un flusso proxy API, che può causare involontariamente l'esaurimento delle quote più rapidamente del previsto, è un anti-pattern descritto in 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 mantiene 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, una singola norma può mantenere contatori diversi in base all'app che effettua la richiesta, all'app sviluppatore che effettua la richiesta, a un ID client o a un altro identificatore client e altro ancora. Per ulteriori informazioni sull'utilizzo degli elementi
<Class> o <Identifier>, consulta gli
esempi riportati sopra.
Notazione temporale
Tutti gli orari delle quote sono impostati sul fuso orario UTC (Coordinated Universal Time).
La notazione dell'ora della quota segue la notazione internazionale della data 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 l'ora un
secondo prima di mezzanotte.
Tieni presente che sono disponibili due notazioni, 00:00:00 e 24:00:00, per
distinguere le due mezzanotte che possono essere associate a una data. Pertanto, 2015-02-04
24:00:00 corrisponde alla stessa data e ora di 2015-02-05 00:00:00. Quest'ultima è
di solito la notazione preferita.
Recupero delle 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 di prodotto in una norma relativa alle quote. Ecco alcuni vantaggi dell'impostazione di una quota sul prodotto a cui fare riferimento per le norme relative alle quote:
- I criteri per le quote possono utilizzare un'impostazione uniforme in tutti i proxy API del prodotto API.
- Puoi apportare modifiche in fase di runtime all'impostazione della quota di un prodotto API e i valori delle quote vengono aggiornati automaticamente nei criteri delle quote che fanno riferimento al valore.
Per ulteriori informazioni sull'utilizzo delle impostazioni di quota di un prodotto API, consulta l'esempio "Quota dinamica" riportato sopra..
Per informazioni sulla configurazione dei prodotti API con limiti di quota, vedi Crea prodotti API.
Riferimento elemento
Di seguito sono riportati gli elementi e gli attributi che puoi configurare in queste norme. Tieni presente che alcune combinazioni di elementi
sono reciprocamente esclusive o non richieste. Consulta gli esempi 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 Recuperare 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 queste norme.
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| tipo |
Utilizza questa opzione per determinare quando e come il contatore della quota controlla l'utilizzo della quota. Per saperne di più, consulta Tipi di norme relative alle quote. 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 del criterio raggiunge questo limite valore, le chiamate successive vengono rifiutate finché 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 che countRef, countRef
ha la priorità. Se countRef non viene risolto in fase di runtime, viene utilizzato il valore di
count.
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | Numero intero |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| conteggio |
Utilizza questo campo per specificare un conteggio dei messaggi per la quota. Ad esempio, un valore dell'attributo |
2000 | Facoltativo |
| countRef |
Utilizza questa opzione 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 figlio <Allow> diverso di <Class>,
il criterio mantiene un contatore diverso.
Per utilizzare l'elemento <Class>, specifica una variabile di flusso utilizzando l'attributo ref nel 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 di query contiene un valore non valido, il criterio restituisce un errore di violazione della quota.
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| ref |
Utilizza questa opzione 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 di quote
definito dall'elemento <Class>. Per ogni
tag figlio <Allow> diverso di <Class>, i
criteri mantengono 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, la policy di quota gestisce due contatori di quota denominati
peak_time e off_peak_time.
| 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>
Utilizza questo campo per specificare un numero intero (ad esempio 1, 2, 5, 60 e così via) che verrà abbinato all'unità
TimeUnit specificata (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 significa che la quota verrà
calcolata nell'arco di 24 ore.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
| Predefinito: | nessuno |
| Presenza: | Obbligatorio |
| Tipo: | Numero intero |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| ref |
Utilizza questa opzione per specificare una variabile di flusso contenente l'intervallo per una quota. |
nessuno | Facoltativo |
Elemento <TimeUnit>
Utilizza per specificare l'unità di tempo applicabile alla quota.
Ad esempio, un Interval di 24 con
un TimeUnit di hour significa che la quota verrà
calcolata nell'arco di 24 ore.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
| Predefinito: | nessuno |
| Presenza: | Obbligatorio |
| Tipo: |
Stringa. Scegli tra |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| ref | Utilizza questa opzione 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,, specifica la data
e l'ora in cui il contatore della quota inizierà il conteggio, indipendentemente dal fatto che siano state
ricevute richieste da qualsiasi app.
Ad esempio:
<StartTime>2017-7-16 12:00:00</StartTime>
| Predefinito: | nessuno |
| Presenza: | Obbligatorio quando type è impostato su calendar. |
| Tipo: |
Stringa nel formato di data e 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 contatore centrale
e sincronizzarlo continuamente in tutti i processori di messaggi. I processori di messaggi
possono trovarsi in zone di disponibilità e/o regioni diverse.
Se utilizzi il valore predefinito di false, potresti superare la quota perché
il conteggio per ogni processore di messaggi 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>
| Predefinito: | falso |
| Presenza: | Facoltativo |
| Tipo: | Booleano |
Elemento <Synchronous>
Imposta su true per aggiornare in modo sincrono un contatore di quota distribuita. Ciò significa che l'aggiornamento del contatore viene eseguito contemporaneamente al controllo della quota in una richiesta all'API. Imposta questo valore su true se è essenziale non consentire chiamate API
oltre la quota.
Imposta false per aggiornare il contatore della quota in modo asincrono. Ciò significa
che è possibile che alcune chiamate API che superano la quota vengano eseguite, a seconda di quando
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 è 10 secondi. Utilizza l'elemento
AsynchronousConfiguration per configurare questo comportamento asincrono.
<Synchronous>false</Synchronous>
| 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>
| Predefinito: | SyncIntervalInSeconds = 10 secondi |
| Presenza: | Facoltativo; ignorato quando <Synchronous> è impostato su
true. |
| Tipo: |
Complesso |
Elemento <AsynchronousConfiguration>/<SyncIntervalInSeconds>
Utilizza questo parametro 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.
| Predefinito: | 10 |
| Presenza: | Facoltativo |
| Tipo: |
Numero intero |
Elemento <AsynchronousConfiguration>/<SyncMessageCount>
Specifica il numero di richieste in tutti i processori di messaggi Apigee tra gli aggiornamenti delle quote.
<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.
| 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 unico contatore applicato alla quota.
Questo elemento è trattato anche nel seguente post della community Apigee: Quota identifier across different policies.
<Identifier ref="verifyapikey.verify-api-key.client_id"/>
<Class> e
<Identifier> nello stesso criterio per le quote.
| 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 del modulo o un contenuto del messaggio univoco per ogni app, utente dell'app, sviluppatore di app, prodotto API o altra caratteristica. L' In alcuni casi, le impostazioni di quota devono essere recuperate quando non è disponibile alcun
|
N/D | Facoltativo |
Elemento <MessageWeight>
Utilizza questo campo per specificare la ponderazione assegnata a ogni messaggio. Utilizza il peso dei messaggi 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 se fossero due volte più "pesanti" o costosi dei messaggi GET. Pertanto, imposti 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 MessageWeight per le richieste POST è 2, la quota
consente 5 richieste POST in qualsiasi intervallo di 10 minuti. Qualsiasi richiesta aggiuntiva, POST o GET,
prima del ripristino del contatore viene rifiutata.
Un valore che rappresenta MessageWeight deve essere specificato da una variabile di flusso e può essere estratto da intestazioni HTTP, parametri di query, un payload di richiesta XML o JSON o qualsiasi altra variabile di flusso. Ad esempio, lo imposti in un'intestazione denominata
weight:
<MessageWeight ref="message_weight"/>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: |
Numero intero |
Variabili di flusso
Le seguenti variabili di flusso predefinite vengono compilate automaticamente quando viene eseguita una policy di quota. Per ulteriori informazioni sulle variabili di flusso, consulta 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 attuale utilizzata in un intervallo di quota |
| ratelimit.{policy_name}.available.count | Lungo | Sola lettura | Restituisce il conteggio della quota disponibile nell'intervallo di quota |
| ratelimit.{policy_name}.exceed.count | Lungo | Sola lettura | Restituisce 1 dopo il superamento della quota. |
| ratelimit.{policy_name}.total.exceed.count | Lungo | Sola lettura | Restituisce 1 dopo il superamento della quota. |
| ratelimit.{policy_name}.expiry.time | Lungo | Sola lettura |
Restituisce l'ora UTC in millisecondi che determina la scadenza della quota e l'inizio di un nuovo intervallo di quota. Quando il tipo di criterio Quota è |
| ratelimit.{policy_name}.identifier | Stringa | Sola lettura | Restituisce il riferimento all'identificatore (client) allegato alle norme |
| 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 conteggio della quota consentita definita 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 conteggio delle quote disponibili nella classe |
| ratelimit.{policy_name}.class.exceed.count | Lungo | Sola lettura | Restituisce il conteggio delle richieste che superano il limite nella classe 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 nella classe 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 non è stato rispettato (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 norme relative a quota, Spike Arrest e limite di frequenza simultanea