Criteri per le quote

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 type, il contatore inizia all'inizio del minuto/dell'ora/del giorno/della settimana/del mese.

I valori validi includono:

  • calendar: configura una quota in base a un'ora di inizio esplicita. Il contatore della quota per ogni app viene aggiornato in base ai valori <StartTime>, <Interval> e <TimeUnit> impostati.
  • rollingwindow: configura una quota che utilizza una "finestra mobile" per determinare l'utilizzo della quota. Con rollingwindow, puoi determinare le dimensioni della finestra con gli elementi <Interval> e <TimeUnit>, ad esempio 1 giorno. Quando arriva una richiesta, Edge controlla l'ora esatta della richiesta (ad esempio le 17:01), conteggia il numero di richieste ricevute tra quell'ora e le 17:01 del giorno precedente (1 giorno) e determina se la quota è stata superata o meno durante questo intervallo.
  • flexi: configura una quota che fa iniziare il contatore quando viene ricevuto il primo messaggio di richiesta da un'app e reimposta i valori in base ai valori <Interval>, e <TimeUnit>.
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 name può Deve contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, puoi utilizzare l'elemento <DisplayName> per etichettare il criterio in l'editor proxy della UI di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
enabled

Imposta il valore su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicata anche se rimane collegata a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

falso Deprecato

&lt;DisplayName&gt; 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 name del criterio è in uso.

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 count pari a 100, Interval pari a 1 e TimeUnit pari a month specificano una quota di 100 messaggi al mese.

2000 Facoltativo
countRef

Da utilizzare per specificare una variabile di flusso contenente il conteggio dei messaggi per una quota. countRef ha la precedenza sull'attributo count.

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. ref ha la precedenza su un valore dell'intervallo esplicito. Se sono specificati sia il riferimento sia il valore, il riferimento ha la priorità. Se ref non viene risolto in fase di esecuzione, viene utilizzato il valore.

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 minute, hour, day, week o month.

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.

Puoi creare contatori univoci per le caratteristiche definite da una variabile di flusso. Ad esempio, potresti utilizzare l'indirizzo email dello sviluppatore per associare una quota a uno sviluppatore specifico. Puoi utilizzare una serie di variabili per identificare una quota, che si tratti di variabili personalizzate o predefinite, come quelle disponibili con le norme per la verifica delle chiavi API. Consulta anche il riferimento alle variabili.

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 <Identifier> più comunemente utilizzato per identificare in modo univoco le app è il client_id. client_id è un altro nome per la chiave API o la chiave consumer che viene generata per un'app quando viene registrata in un'organizzazione su Apigee Edge. Puoi utilizzare questo identificatore se hai attivato la chiave API o i criteri di autorizzazione OAuth per la tua API.

In alcuni casi, le impostazioni di quota devono essere recuperate quando non è disponibile alcun client_id, ad esempio quando non è in vigore alcun criterio di sicurezza. In queste situazioni, puoi utilizzare il criterio Access Entity per recuperare le impostazioni del prodotto API appropriate, estrarre i valori utilizzando ExtractVariables e utilizzare la variabile di contesto estratta nel criterio Quota. Per ulteriori informazioni, consulta le norme relative alle persone giuridiche di accesso.

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 è rollingwindow, questo valore non è valido perché l'intervallo della quota non scade mai.

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>.
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.
policies.ratelimit.InvalidMessageWeight 500 Si verifica se il valore dell'elemento <MessageWeight> specificato tramite una variabile di flusso non è valido (valore non intero).
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.
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.
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.
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.
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.
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.
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.
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.

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

Criteri per ResetQuota

Criterio SpikeArrest

Confronto tra le norme relative a quota, arresto picchi e limite di frequenza simultanea