Criteri per le quote

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

I valori validi includono:

  • calendar: configura una quota in base a un orario di inizio esplicito. Il contatore della quota per ogni app viene aggiornato in base ai valori <StartTime>, <Interval> e <TimeUnit> che hai impostato.
  • rollingwindow: configura una quota che utilizza una "finestra mobile" per determinare l'utilizzo della quota. Con rollingwindow, determini le dimensioni della finestra con gli elementi <Interval> e <TimeUnit>; ad esempio, 1 giorno. Quando arriva una richiesta, Edge esamina l'ora esatta della richiesta (ad esempio le 17:01), conta il numero di richieste arrivate tra quell'ora e le 17:01 del giorno precedente (1 giorno) e determina se la quota è stata superata o meno durante questo periodo.
  • flexi: configura una quota che fa iniziare il conteggio quando viene ricevuto il primo messaggio di richiesta da un'app e si azzera 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 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 count pari a 100, un valore dell'attributo Interval pari a 1 e un valore dell'attributo TimeUnit pari a mese specificano una quota di 100 messaggi al mese.

2000 Facoltativo
countRef

Utilizza questa opzione 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 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. ref ha la precedenza su un valore di intervallo esplicito. Se vengono specificati sia il riferimento che il valore, il riferimento ha la priorità. Se ref non viene risolto in fase di runtime, viene utilizzato il valore.

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

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.

Puoi creare contatori univoci per le caratteristiche definite da una variabile di flusso. Ad esempio, puoi utilizzare l'indirizzo email dello sviluppatore per collegare una quota a uno sviluppatore specifico. Puoi utilizzare una varietà di variabili per identificare una quota, indipendentemente dal fatto che utilizzi variabili personalizzate o variabili predefinite, come quelle disponibili con il criterio Verifica chiave API. Vedi anche il riferimento alle variabili.

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"/>
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'<Identifier> più comunemente utilizzato per identificare in modo univoco le app è l'client_id. client_id è un altro nome per la chiave API, o chiave consumer, generata per un'app quando viene registrata in un'organizzazione su Apigee Edge. Puoi utilizzare questo identificatore se hai abilitato le norme di autorizzazione OAuth o della chiave API 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 alcuna norma di sicurezza. In queste situazioni, puoi utilizzare il criterio Access Entity per recuperare le impostazioni del prodotto API appropriate, quindi estrarre i valori utilizzando ExtractVariables e poi utilizzare la variabile di contesto estratta nel criterio Quota. Per saperne di più, consulta Policy di accesso all'entità.

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

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>.
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 ResetQuota

Norme SpikeArrest

Confronto tra norme relative a quota, Spike Arrest e limite di frequenza simultanea