Criteri per le quote

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Cosa

Utilizza il criterio per le quote per configurare il numero di messaggi di richiesta consentiti da un proxy API un periodo di tempo, ad esempio minuto, ora, giorno, settimana o mese. Puoi impostare la quota in modo che uguale per tutte le app che accedono al proxy API oppure puoi impostare la quota in base a:

  • Il prodotto che contiene il proxy API
  • L'app che richiede l'API
  • Lo sviluppatore dell'app
  • Molti altri criteri

Non utilizzare Quota per proteggerti dai picchi di traffico complessivi. Per farlo, usa la funzione Spike Arrest . Vedi Arresto dei picchi .

Video

Questi video introducono la gestione delle quote con i criteri per le quote:

Introduzione (nuovo bordo)

Introduzione (versione classica)

Quota dinamica

Distribuito e Sincrona

Peso del messaggio

Calendar

Finestre scorrevoli

Flexi

Quota condizionale

Variabili di flusso

Gestione degli errori

Esempi

Questi esempi di codice dei criteri illustrano come iniziare e terminare i periodi di quota in base a:

Quota più dinamica

<Quota name="CheckQuota"> 
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
  <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/>
</Quota>

Le quote dinamiche consentono di configurare un singolo criterio per le quote che applica quote diverse impostazioni basate sulle informazioni passate ai criteri per le quote. Un altro termine per le impostazioni della quota in in questo contesto è "Piano di servizio". La quota dinamica controlla la posizione "Piano di servizio" e poi applica in modo forzato queste impostazioni.

Nota: se specifichi sia un valore sia un riferimento per un elemento, il riferimento ha la priorità. Se il riferimento non viene risolto in fase di runtime, il valore è in uso.

Ad esempio, quando crei un prodotto API, puoi scegliere di impostare la quota consentita limite, unità di tempo e intervallo. Tuttavia, l'impostazione di questi valori nel prodotto API non ne forza l'uso in un proxy API. Devi inoltre aggiungere un criterio per le quote al proxy API che legge questi valori. Consulta Creare API prodotti per saperne di più.

Nell'esempio precedente, il proxy API contenente il criterio per le quote utilizza una verificaAPIKey denominato verify-api-key, per convalidare la chiave API passata in una richiesta. La Il criterio per le quote accede alle variabili di flusso dal criterio VerifyAPIKey per leggere la quota vengono impostati sul prodotto API. Per scoprire di più sulle variabili di flusso VerifyAPIKey, consulta la sezione Verificare il criterio della chiave API.

Un'altra opzione è impostare attributi personalizzati per singoli sviluppatori o app e poi leggere quei valori nel criterio per le quote. Ad esempio, se vuoi impostare valori di quota diversi sviluppatore. In questo caso, imposti gli attributi personalizzati per lo sviluppatore contenente il limite, unità di tempo e intervallo. Poi farai riferimento a questi valori nel criterio per le quote come mostrato sotto:

<Quota name="DeveloperQuota"> 
  <Identifier ref="verifyapikey.verify-api-key.client_id"/> 
  <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> 
  <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> 
  <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> 
</Quota>

Questo esempio utilizza anche le variabili di flusso VerifyAPIKey per fare riferimento agli attributi personalizzati impostati sullo sviluppatore.

Puoi utilizzare qualsiasi variabile per impostare i parametri del criterio per le quote. Queste variabili possono provengono da:

  • Variabili di flusso
  • Proprietà nel prodotto, nell'app o nello sviluppatore API
  • Una mappa chiave-valore (KVM)
  • Un'intestazione, un parametro di query, un parametro del modulo e così via

Per ogni proxy API, puoi aggiungere un criterio per le quote che faccia riferimento alla stessa variabile di tutti gli altri criteri per le quote in tutti gli altri proxy oppure il criterio per le quote può fare riferimento univoche per il criterio e il proxy in questione.

Ora di inizio

<Quota name="QuotaPolicy" type="calendar">
  <StartTime>2017-02-18 10:30:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Per una quota con type impostato su calendar, devi definire una valore <StartTime> esplicito. Il valore dell'ora corrisponde all'ora GMT, non locale nel tempo. Se non specifichi un valore <StartTime> per un criterio di tipo calendar, Edge genera un errore.

Il contatore delle quote per ogni app viene aggiornato in base ai <StartTime>, Valori di <Interval> e <TimeUnit>. Per questo Ad esempio, la quota inizia il conteggio alle 10:30 (GMT) del 18 febbraio 2017 e si aggiorna ogni 5 ore. Pertanto, il prossimo aggiornamento è alle 15:30 GMT del 18 febbraio 2017.

Contatore accessi

<Quota name="QuotaPolicy">
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Un proxy API ha accesso alle variabili di flusso impostate dal criterio per le quote. Puoi accedere queste variabili di flusso nel proxy API per eseguire l'elaborazione condizionale, monitora il criterio man mano che si avvicina al limite della quota, restituisci il contatore della quota corrente a un'app o ad altre motivi.

L'accesso alle variabili di flusso per il criterio si basa sui criteri Attributo name, per il criterio sopra indicato QuotaPolicy tu accede alle sue variabili di flusso nel formato:

  • ratelimit.QuotaPolicy.allowed.count: conteggio consentito.
  • ratelimit.QuotaPolicy.used.count: valore del contatore corrente.
  • ratelimit.QuotaPolicy.expiry.time: ora UTC in cui viene reimpostato il contatore.

Esistono molte altre variabili di flusso a cui puoi accedere, come descritto di seguito.

Ad esempio, puoi utilizzare il seguente criterio AssegnaMessage per restituire i valori di Quota variabili di flusso come intestazioni delle risposte:

<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars">
    <AssignTo createNew="false" type="response"/>
    <Set>
        <Headers>
            <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header>
            <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header>
            <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Prima richiesta

<Quota name="MyQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="10000"/>
</Quota>

Utilizza questo codice campione per applicare una quota di 10.000 chiamate all'ora. Il criterio viene reimpostato il contatore della quota nella parte superiore di ogni ora. Se il contatore raggiunge la quota di 10.000 chiamate prima della fine dell'ora, le chiamate oltre le 10.000 vengono rifiutate.

Ad esempio, se il contatore parte da 2017-07-08 07:00:00, viene reimpostato su 0 alle 2017-07-08 08:00:00 (1 ora dall'ora di inizio). Se il primo messaggio è ricevuti alle ore 2017-07-08 07:35:28 e il numero dei messaggi raggiunge le 10.000 prima del giorno 2017-07-08 08:00:00, le chiamate che superano questo conteggio vengono rifiutate il conteggio viene reimpostato in cima all'ora.

Il tempo di reimpostazione del contatore si basa sulla combinazione di <Interval> e <TimeUnit>. Ad esempio, se imposti <Interval> su 12 per <TimeUnit> di ora, poi il contatore viene reimpostato ogni dodici ore. Puoi impostare <TimeUnit> su minuto, ora, giorno, settimana o mese.

Puoi fare riferimento a questo criterio in più posizioni nel proxy API. Ad esempio, potresti posizionarlo su Proxy PreFlow in modo che venga eseguito su ogni richiesta. Oppure puoi inserire su più flussi nel proxy API. Se utilizzi questo criterio in più punti delle , mantiene un unico contatore aggiornato da tutte le istanze del criterio.

In alternativa, puoi definire più criteri per le quote nel proxy API. Ogni criterio per le quote mantiene il proprio contatore basato sull'attributo name del criterio.

Imposta identificatore

<Quota name="QuotaPolicy" type="calendar">
  <Identifier ref="request.header.clientId"/> 
  <StartTime>2017-02-18 10:00:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Per impostazione predefinita, un criterio per le quote definisce un singolo contatore per il proxy API, indipendentemente dal l'origine di una richiesta. In alternativa, puoi utilizzare l'attributo <Identifier> un criterio per le quote per mantenere contatori separati in base al valore Attributo <Identifier>.

Ad esempio, utilizza il tag <Identifier> per definire contatori separati per per ogni ID client. Quando viene inviata una richiesta al proxy, l'app client passa quindi un'intestazione contenente clientID, come mostrato nell'esempio precedente.

Puoi specificare qualsiasi variabile di flusso per l'attributo <Identifier>. Per Ad esempio, puoi specificare che un parametro di query denominato id contiene il parametro identificatore:

<Identifier ref="request.queryparam.id"/>

Se utilizzi il criterio VerifyAPIKey per convalidare la chiave API o i criteri OAuthV2 con i token OAuth, puoi utilizzare le informazioni nella chiave API o nel token per definire per lo stesso criterio per le quote. Ad esempio, Il tag <Identifier> utilizza la variabile di flusso client_id di un Criterio VerifyAPIKey denominato verify-api-key:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

Ogni valore client_id univoco ora definisce il proprio contatore nella quota .

Classe

<Quota name="QuotaPolicy">
  <Interval>1</Interval>
  <TimeUnit>day</TimeUnit>
  <Allow>
    <Class ref="request.header.developer_segment">
      <Allow class="platinum" count="10000"/>
      <Allow class="silver" count="1000" />
    </Class>
  </Allow>
</Quota>

Puoi impostare i limiti di quota in modo dinamico utilizzando un conteggio delle quote basato su classi. In questo esempio, il limite della quota è determinato dal valore dell'attributo developer_segment passata a ogni richiesta. La variabile può avere il valore platinum o silver. Se l'intestazione contiene un valore non valido, il criterio restituisce una quota errore di violazione.


Informazioni sui criteri per le quote

Una quota è un'allocazione di messaggi di richiesta che un proxy API può gestire in un periodo di tempo. come minuto, ora, giorno, settimana o mese. Il criterio gestisce i contatori che calcolano il numero di richieste ricevute dal proxy API. Questa funzionalità consente ai provider API di applicare limiti Il numero di chiamate API effettuate dalle app in un intervallo di tempo. Utilizzando i criteri per le quote, puoi Ad esempio, limita le app a 1 richiesta al minuto o a 10.000 richieste al mese.

Ad esempio, se una quota è definita come 10.000 messaggi al mese, la limitazione di frequenza inizia dopo il 10.000° messaggio. Non importa se sono stati conteggiati 10.000 messaggi il primo giorno o l'ultimo giorno di tale periodo; nessuna area di richieste aggiuntiva consentita fino al contatore della quota viene reimpostata automaticamente alla fine dell'intervallo di tempo specificato o finché la quota non viene esplicitamente reimpostata usando Reimposta quota .

Una variante della quota chiamata SpikeArrest impedisce picchi di traffico (o burst) che possono essere causate da un improvviso aumento dell'utilizzo, da client con bug o da attacchi dannosi. Per ulteriori informazioni informazioni su SpikeArrest, consulta le norme relative all'arresto degli attacchi.

Le quote si applicano ai singoli proxy API e non vengono distribuite tra i proxy API. Ad esempio: se hai tre proxy API in un prodotto API, una singola quota non viene condivisa tra tutti e tre anche se tutti e tre usano la stessa configurazione dei criteri per le quote.

Tipi di criteri per le quote

Il criterio per le quote supporta diversi tipi di criteri: predefiniti, calendar, flexi e rollingwindow. Ogni tipo definisce quando il contatore della quota all'avvio e al reset, come illustrato nella tabella seguente:

Unità di tempo Ripristino predefinito (o nullo) reimpostazione calendario ripristino flessibile
minuto Inizio del prossimo minuto Un minuto dopo <StartTime> Un minuto dopo la prima richiesta
ora Inizio della prossima ora Un'ora dopo <StartTime> Un'ora dopo la prima richiesta
giorno Mezzanotte GMT del giorno corrente 24 ore dopo <StartTime> 24 ore dopo la prima richiesta
settimana Mezzanotte GMT Domenica alla fine della settimana Una settimana dopo <StartTime> Una settimana dopo la prima richiesta
mese Mezzanotte GMT dell'ultimo giorno del mese Un mese (28 giorni) dopo <StartTime> Un mese (28 giorni) dopo la prima richiesta

Per type="calendar", devi specificare il valore di <StartTime>.

La tabella non elenca il valore per il tipo rollingwindow. Finestra temporale continua funzionano impostando la dimensione di una "finestra", ad esempio una finestra di un'ora o di un giorno. Quando quando arriva una nuova richiesta, il criterio determina se la quota è stata superata in passato "finestra" del tempo.

Ad esempio, definisci una finestra di due ore che consente 1000 richieste. Una nuova richiesta alle 16:45.Il criterio calcola il conteggio delle quote delle ultime due ore, ovvero il numero di richieste a partire dalle 14:45. Se il limite della quota non è stato superato nel di due ore, la richiesta è consentita.

Un minuto dopo, alle 16:46, è in arrivo un'altra richiesta. Ora il criterio calcola numero di quote dalle 14:46 per determinare se il limite è stato superato.

Per il tipo rollingwindow, il contatore non viene mai reimpostato, ma viene viene ricalcolato a ogni richiesta.

Informazioni sui contatori delle quote

Per impostazione predefinita, un criterio per le quote gestisce un unico contatore, indipendentemente dal numero di volte farvi riferimento in un proxy API. Il nome del contatore della quota è basato su l'attributo name del criterio.

Ad esempio, crei un criterio per le quote denominato MyQuotaPolicy con un limite di 5 richieste e lo collochi su più flussi (flusso A, B e C) nel proxy API. Anche se utilizzato in più flussi, mantiene un unico contatore che viene aggiornato da tutte le istanze norme:

  • Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è uguale a 1
  • Viene eseguito il flusso B -> MyQuotaPolicy viene eseguito e il relativo contatore è = 2
  • Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è = 3
  • Viene eseguito il flusso C -> MyQuotaPolicy viene eseguito e il relativo contatore è uguale a 4
  • Viene eseguito il flusso A -> MyQuotaPolicy viene eseguito e il relativo contatore è pari a 5

La richiesta successiva a uno dei tre flussi viene rifiutata perché il contatore della quota ha raggiunto il suo limite.

Utilizzare lo stesso criterio per le quote in più di una posizione in un flusso proxy API, con la possibilità causare involontariamente l'esaurimento della quota più velocemente del previsto è un anti-pattern descritto in Il libro degli antipattern Apigee Edge.

In alternativa, puoi definire più criteri per le quote nel proxy API e utilizzare un altro in ogni flusso. Ogni criterio per le quote gestisce il proprio contatore, basato su l'attributo name del criterio.

In alternativa, utilizza <Class> o <Identifier> elementi in il criterio per le quote per definire più contatori univoci in un unico criterio. Utilizzando questi , un'unica norma può mantenere diversi contatori in base all'app che effettua la richiesta, lo sviluppatore dell'app che effettua la richiesta, un ID client o un altro identificatore client e altro ancora. Consulta le esempi sopra per ulteriori informazioni sull'uso Elementi <Class> o <Identifier>.

Notazione dell'ora

Tutti i tempi di quota sono impostati sul valore Coordinated Universal Ora (UTC).

La notazione dell'ora delle quote segue la notazione della data standard internazionale definita in Internazionale Standard ISO 8601.

Le date sono definite anno, mese e giorno nel seguente formato: YYYY-MM-DD. Ad esempio, 2015-02-04 rappresenta il 4 febbraio 2015.

L'ora del giorno viene espressa in ore, minuti e secondi nel seguente formato: hours:minutes:seconds. Ad esempio, 23:59:59 rappresenta il momento in cui secondo prima di mezzanotte.

Tieni presente che sono disponibili due notazioni, 00:00:00 e 24:00:00, distinguere le due mezze notti che possono essere associate a una sola data. Di conseguenza, 2015-02-04 24:00:00 corrisponde alla stessa data e ora di 2015-02-05 00:00:00. Il secondo è di solito la notazione preferita.

Recupero delle impostazioni della quota dalla configurazione del prodotto API

Puoi impostare limiti di quota nelle configurazioni dei prodotti API. Questi limiti non vengono automaticamente applicare la quota. Puoi però fare riferimento alle impostazioni delle quote dei prodotti in un criterio per le quote. Ecco alcuni esempi vantaggi dell'impostazione di una quota sul prodotto per far riferimento ai criteri di quota:

  • I criteri per le quote possono utilizzare un'impostazione uniforme su tutti i proxy API nel prodotto API.
  • Puoi apportare modifiche in fase di runtime all'impostazione della quota in un prodotto API e ai criteri sulle quote che fanno riferimento al valore, i valori di quota vengono automaticamente aggiornati.

Per ulteriori informazioni sull'utilizzo delle impostazioni di quota da un prodotto API, consulta "Quota dinamica" esempio sopra..

Per informazioni sulla configurazione di prodotti API con limiti di quota, consulta Creare prodotti API.

Riferimento elemento

Di seguito sono riportati gli elementi e gli attributi che puoi configurare in questo criterio. Tieni presente che alcuni elementi si escludono a vicenda o non sono obbligatorie. Visualizza gli esempi per l'utilizzo specifico. La Le seguenti verifyapikey.VerifyAPIKey.apiproduct.* variabili sono disponibili per impostazione predefinita quando un criterio di verifica della chiave API denominato "VerifyAPIKey" viene utilizzato per controllare la chiave API dell'app nella richiesta. I valori della variabile provengono dalle impostazioni della quota sul prodotto API a cui è associata la chiave come descritto in Recupero delle impostazioni di quota dal prodotto API configurazione.

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
   <DisplayName>Quota 3</DisplayName>
   <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
   <Allow>
      <Class ref="request.queryparam.time_variable">
        <Allow class="peak_time" count="5000"/>
        <Allow class="off_peak_time" count="1000"/>
      </Class>
   </Allow>
   <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> 
   <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
   <StartTime>2017-7-16 12:00:00</StartTime> 
   <Distributed>false</Distributed> 
   <Synchronous>false</Synchronous> 
   <AsynchronousConfiguration> 
      <SyncIntervalInSeconds>20</SyncIntervalInSeconds> 
      <SyncMessageCount>5</SyncMessageCount> 
   </AsynchronousConfiguration> 
   <Identifier/> 
   <MessageWeight/> 
</Quota>

&lt;Quota&gt; attributi

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

Gli attributi riportati di seguito sono specifici di questo criterio.

Attributo Descrizione Predefinito Presenza
tipo

Consente di determinare quando e come il contatore della quota controlla l'utilizzo della quota. Consulta Per ulteriori informazioni, consulta i tipi di criteri per le quote.

Se ometti un valore type, il contatore inizia dall'inizio. del minuto/ora/giorno/settimana/mese.

I valori validi sono:

  • calendar: configura una quota in base a un'ora di inizio esplicita. La quota di ogni app viene aggiornato in base <StartTime>, <Interval> e <TimeUnit> valori che hai impostato.
  • rollingwindow: configura una quota che utilizza una "finestra temporale" a determinare l'utilizzo della quota. Con rollingwindow, puoi determinare le dimensioni della finestra con elementi <Interval> e <TimeUnit>; ad esempio 1 giorno Quando arriva una richiesta, Edge considera l'ora esatta della richiesta (ad esempio, 17:01), conteggia il numero di richieste ricevute tra quella data e le 17:01 il giorno precedente (1 giorno) e determina se la quota è stata superata o meno durante quella finestra.
  • flexi: configura una quota in modo che il contatore inizi quando viene eseguito il il primo messaggio di richiesta viene ricevuto da un'app e viene reimpostato in base i 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

&lt;Allow&gt; elemento

Specifica il limite di conteggio per la quota. Se il contatore per il criterio raggiunge questo limite le chiamate successive vengono rifiutate fino a quando il contatore non viene reimpostato.

Di seguito sono riportati tre modi per impostare l'elemento <Allow>:

<Allow count="2000"/> 
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> 
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> 

Se specifichi sia count sia countRef, countRef ha la priorità. Se countRef non si risolve in fase di runtime, il valore di È in uso count.

Predefinita: N/D
Presenza: Facoltativo
Tipo: Numero intero

Attributi

Attributo Descrizione Predefinito Presenza
conteggio

Utilizzalo per specificare un conteggio dei messaggi per la quota.

Ad esempio, un valore dell'attributo count pari a 100, Interval pari a 1, mentre un TimeUnit al mese specifica una quota di 100 messaggi al mese.

2000 Facoltativo
countRef

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

nessuno Facoltativo

&lt;Allow&gt;/&lt;Class&gt; elemento

L'elemento <Class> ti consente di condizionare il valore dell'elemento <Allow> in base al valore di una variabile di flusso. Per ogni tag secondario <Allow> di <Class>, il criterio mantiene uno diverso contatore.

Per utilizzare l'elemento <Class>, specifica una variabile di flusso utilizzando il metodo ref al tag <Class>. Edge utilizza quindi il valore di flusso per selezionare uno dei <Allow> tag secondari per determinare il del criterio. Il perimetro associa il valore della variabile di flusso a class del tag <Allow>, come mostrato di seguito:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

In questo esempio, il contatore di quota corrente è determinato dal valore del parametro time_variable parametro di query passato a ogni richiesta. La variabile può avere un valore di peak_time o off_peak_time. Se il parametro di query contiene un valore non valido , il criterio restituisce un errore di violazione della quota.

Predefinita: N/D
Presenza: Facoltativo
Tipo: N/D

Attributi

Attributo Descrizione Predefinito Presenza
riferimento

Consente di specificare una variabile di flusso contenente la classe di quota per una quota.

nessuno Obbligatorio

&lt;Allow&gt;/&lt;Class&gt;/&lt;Allow&gt; elemento

L'elemento <Allow> specifica il limite per un contatore delle quote definita dall'elemento <Class>. Per ogni un altro tag secondario <Allow> di <Class>, mantiene uno diverso contatore.

Ad esempio:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

In questo esempio, il criterio per le quote gestisce due contatori delle quote denominati di peak_time e off_peak_time.

Predefinita: N/D
Presenza: Facoltativo
Tipo: N/D

Attributi

Attributo Descrizione Predefinito Presenza
classe

Definisce il nome del contatore della quota.

nessuno Obbligatorio
conteggio Specifica il limite di quota per il contatore. nessuno Obbligatorio

&lt;Interval&gt; elemento

Da utilizzare per specificare un numero intero (ad esempio, 1, 2, 5, 60 e così via) che verrà associato al valore TimeUnit specifichi (minuto, ora, giorno, settimana o mese) per determinare un orario durante il quale Edge calcola l'utilizzo della quota.

Ad esempio, Interval di 24 con un TimeUnit di hour significa che la quota sarà calcolati nell'arco di 24 ore.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Predefinita: nessuno
Presenza: Obbligatorio
Tipo: Numero intero

Attributi

Attributo Descrizione Predefinito Presenza
riferimento

Utilizzalo per specificare una variabile di flusso contenente l'intervallo per un quota. ref ha la precedenza su un intervallo esplicito valore. Se sono specificati sia riferimento che valore, il riferimento ha la priorità. Se ref non si risolve in fase di runtime, viene utilizzato il valore.

nessuno Facoltativo

&lt;TimeUnit&gt; elemento

Utilizzalo per specificare l'unità di tempo applicabile alla quota.

Ad esempio, Interval di 24 con un TimeUnit di hour significa che la quota sarà calcolati nell'arco di 24 ore.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Predefinita: nessuno
Presenza: Obbligatorio
Tipo:

Stringa. Seleziona tra minute, hour, day, week o month.

Attributi

Attributo Descrizione Predefinito Presenza
riferimento Utilizzalo per specificare una variabile di flusso contenente l'unità di tempo per una quota. ref ha la precedenza su un intervallo esplicito. Se ref non viene risolto in fase di runtime, viene utilizzato il valore. nessuno Facoltativo

&lt;StartTime&gt; elemento

Se il criterio type è impostato su calendar,, viene specificata la data e l'ora in cui inizierà il conteggio il contatore della quota, indipendentemente dal fatto che siano state ricevuto da qualsiasi app.

Devi fornire un valore StartTime esplicito quando type è impostato in modo esplicito a calendar, non puoi utilizzare un riferimento a una variabile di flusso, se specifichi un valore StartTime se non è impostato alcun valore type, riceverai un .

Ad esempio:

<StartTime>2017-7-16 12:00:00</StartTime>
Predefinita: nessuno
Presenza: Obbligatorio quando il criterio type è impostato su calendar.
Tipo:

Stringa in ISO 8601 formato di data e ora.

<Distribuito> elemento

Un'installazione di Edge può utilizzare uno o più processori di messaggi per elaborare le richieste. Imposta questo su true per specificare che il criterio deve mantenere una e sincronizzarlo continuamente su tutti i processori di messaggi. I processori di messaggi possono essere in zone di disponibilità e/o regioni.

Se utilizzi il valore predefinito false, potresti superare la quota per il conteggio per ciascun processore di messaggi non viene condiviso:

<Distributed>true</Distributed>

Per garantire che i contatori siano sincronizzati e aggiornati a ogni richiesta, imposta <Distributed> e <Synchronous> su true:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
Predefinita: falso
Presenza: Facoltativo
Tipo: Booleano

&lt;Synchronous&gt; elemento

Imposta su true per aggiornare un contatore di quota distribuita in modo sincrono. Questo significa che l'aggiornamento del contatore viene eseguito nello stesso momento in cui viene controllata la quota su una richiesta all'API. Imposta su true se è essenziale non consentire nessuna API oltre la quota.

Imposta su false per aggiornare il contatore della quota in modo asincrono. Ciò significa è possibile che alcune chiamate API che superano la quota vengano andate a buon fine, a seconda di quando il contatore delle quote nel repository centrale viene aggiornato in modo asincrono. Tuttavia, non affronterai il potenziale impatto sulle prestazioni associato agli aggiornamenti sincroni.

L'intervallo di aggiornamento asincrono predefinito è di 10 secondi. Utilizza la AsynchronousConfiguration per configurare questo comportamento asincrono.

<Synchronous>false</Synchronous>
Predefinita: falso
Presenza: Facoltativo
Tipo: Booleano

&lt;AsynchronousConfiguration&gt; elemento

Configura l'intervallo di sincronizzazione tra i contatori delle quote distribuite quando il criterio l'elemento di configurazione <Synchronous> non è presente o non è presente e impostato a false.

Puoi eseguire la sincronizzazione dopo un periodo di tempo o il numero di messaggi utilizzando il metodo Elementi secondari SyncIntervalInSeconds o SyncMessageCount. Si escludono a vicenda. Ad esempio,

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

o

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
Predefinita: SyncIntervalInSeconds = 10 secondi
Presenza: Facoltativo; ignorato quando <Synchronous> è impostato su true.
Tipo:

Complesso

&lt;AsynchronousConfiguration&gt;/&lt;SyncIntervalInSeconds&gt; elemento

Utilizza questa opzione per eseguire l'override del comportamento predefinito in cui gli aggiornamenti asincroni vengono eseguiti dopo un di 10 secondi.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

L'intervallo di sincronizzazione deve essere maggiore o uguale a 10 secondi, come descritto in Limiti.

Predefinita: 10
Presenza: Facoltativo
Tipo:

Numero intero

&lt;AsynchronousConfiguration&gt;/&lt;SyncMessageCount&gt; elemento

Specifica il numero di richieste tra tutti i processori di messaggi Apigee tra la quota aggiornamenti.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

In questo esempio viene specificato che il conteggio delle quote viene aggiornato ogni 5 richieste in ogni piattaforma Apigee Processore di messaggi Edge.

Predefinita: n/d
Presenza: Facoltativo
Tipo:

Numero intero

&lt;Identifier&gt; elemento

Utilizza l'elemento <Identifier> per configurare il criterio in modo da creare elementi univoci in base a una variabile di flusso.

di Gemini Advanced. Puoi creare contatori univoci per le caratteristiche definite da una variabile di flusso. Ad esempio: potresti utilizzare l'indirizzo email dello sviluppatore per legare una quota a uno sviluppatore specifico. Puoi utilizzare uno dei seguenti di variabili per identificare una quota, sia che utilizzi variabili personalizzate. oppure variabili predefinite, come quelle disponibili con il criterio Verifica chiave API. Vedi anche il riferimento delle variabili.

Se non utilizzi questo elemento, la norma utilizza un unico contatore applicato a la quota.

Questo elemento è discusso anche nel seguente post della community Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
Predefinita: N/D
Presenza: Facoltativo
Tipo:

Stringa

Attributi

Attributo Descrizione Predefinito Presenza
riferimento

Specifica una variabile di flusso che identifica il contatore da utilizzare per la richiesta. La L'identificatore può essere un'intestazione HTTP, un parametro di ricerca, un parametro del modulo o un contenuto del messaggio univoco per ogni app, utente di app, sviluppatore di app, prodotto API o altro una caratteristica.

Il metodo <Identifier> più comunemente usato per identificare in modo univoco le app è client_id. client_id è un altro nome della chiave API, o chiave utente generata per un'app quando è registrata in un'organizzazione su Apigee Edge Puoi utilizzare questo identificatore se hai abilitato la chiave API o OAuth di autorizzazione per l'API.

In alcuni casi, è necessario recuperare le impostazioni della quota client_id è disponibile, ad esempio quando non è attivo alcun criterio di sicurezza. Nella in queste situazioni, puoi utilizzare il criterio Access Entity per recuperare l'API appropriata le impostazioni del prodotto, estrae i valori con ExtractVariables e poi utilizza di contesto nel criterio per le quote. Per ulteriori informazioni, consulta Accedere all'entità .

N/D Facoltativo

&lt;MessageWeight&gt; elemento

Utilizzalo per specificare il peso assegnato a ciascun messaggio. Usa il peso del messaggio per aumentare l'impatto di richieste che, ad esempio, consumano più risorse di calcolo di altre.

Ad esempio, se vuoi che i messaggi POST siano il doppio più "pesanti" o costoso, come GET messaggi. Di conseguenza, imposti MessageWeight su 2 per POST e 1 per SCARICA. Puoi anche impostare MessageWeight su 0 in modo che la richiesta non influisce sul contatore. In questo esempio, se la quota è di 10 messaggi al minuto il valore MessageWeight per le richieste POST è 2, la quota consente cinque richieste POST in un intervallo di 10 minuti. Per qualsiasi richiesta aggiuntiva, POST o GET, prima che il contatore venga reimpostato.

Un valore che rappresenta MessageWeight deve essere specificato da un flusso e può essere estratta da intestazioni HTTP, parametri di ricerca, una richiesta XML o JSON o qualsiasi altra variabile di flusso. Ad esempio, lo imposti in un'intestazione denominata weight:

<MessageWeight ref="message_weight"/>
Predefinita: N/D
Presenza: Facoltativo
Tipo:

Numero intero

Variabili di flusso

Le seguenti variabili di flusso predefinite vengono compilate automaticamente quando un criterio per le quote . Per ulteriori informazioni sulle variabili di flusso, consulta Riferimento per le variabili.

Variabili Tipo Autorizzazioni Descrizione
ratelimit.{policy_name}.allowed.count Lungo Sola lettura Restituisce il conteggio delle quote consentito
ratelimit.{policy_name}.used.count Lungo Sola lettura Restituisce la quota corrente utilizzata entro un intervallo di quota
ratelimit.{policy_name}.available.count Lungo Sola lettura Restituisce il conteggio della quota disponibile nell'intervallo di quota
ratelimit.{policy_name}.exceed.count Lungo Sola lettura Restituisce 1 dopo il superamento della quota.
ratelimit.{policy_name}.total.exceed.count Lungo Sola lettura Restituisce 1 dopo il superamento della quota.
ratelimit.{policy_name}.expiry.time Lungo Sola lettura

Restituisce il tempo UTC in millisecondi che determina quando scade la quota e di inizio intervallo di quota.

Se il tipo di criterio per le quote è rollingwindow, questo valore non è valido poiché l'intervallo di quota non scade mai.

ratelimit.{policy_name}.identifier Stringa Sola lettura Restituisce il riferimento dell'identificatore (client) associato al criterio
ratelimit.{policy_name}.class Stringa Sola lettura Restituisce la classe associata all'identificatore cliente
ratelimit.{policy_name}.class.allowed.count Lungo Sola lettura Restituisce il conteggio delle quote consentito definito nella classe
ratelimit.{policy_name}.class.used.count Lungo Sola lettura Restituisce la quota utilizzata all'interno di una classe
ratelimit.{policy_name}.class.available.count Lungo Sola lettura Restituisce il conteggio delle quote disponibili nella classe
ratelimit.{policy_name}.class.exceed.count Lungo Sola lettura Restituisce il conteggio delle richieste che supera il limite nella classe nella classe intervallo quota attuale
ratelimit.{policy_name}.class.total.exceed.count Lungo Sola lettura Restituisce il conteggio totale delle richieste che supera il limite nella classe in tutte intervalli di quota, pertanto è la somma di class.exceed.count per intervalli di quota.
ratelimit.{policy_name}.failed Booleano Sola lettura

Indica se il criterio ha avuto esito negativo (vero o falso).

Messaggi di errore

Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.

Errori di runtime

Questi errori possono verificarsi quando il criterio viene eseguito.

Codice di errore Stato HTTP Causa Correggi
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 Si verifica se l'elemento <Interval> non è definito nel criterio per le quote. Questo elemento è obbligatorio e viene utilizzato per specificare l'intervallo di tempo applicabile alla quota. L'intervallo di tempo può essere minuti, ore, giorni, settimane o mesi, come definito con l'elemento <TimeUnit>.
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

Criterio ResetQuota

SpikeArrest norme

Confronto Norme relative a quote, picco e limiti di frequenza simultanei