Risoluzione degli errori di runtime della quota

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

InvalidMessageWeight

Codice di errore

policies.ratelimit.InvalidMessageWeight

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Esempio di messaggio di errore

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Causa

Questo errore si verifica se il valore dell'elemento <MessageWeight> specificato tramite una variabile di flusso non è valido (un valore non intero).

Ad esempio, questo errore si verifica se il valore della variabile di flusso specificata per l'elemento <MessageWeight> è 1,5 (un valore non intero).

Diagnostica

  1. Identifica il valore non valido utilizzato per l'elemento <MessageWeight> nel criterio per le quote. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente errore, il valore non valido utilizzato per l'elemento <MessageWeight> è 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Esamina tutti i criteri per le quote nel proxy API specifico in cui si è verificato l'errore. Potrebbero essere presenti uno o più criteri per le quote in cui viene specificato l'elemento <MessageWeight>.

    Ad esempio, il seguente criterio specifica l'elemento <MessageWeight>tramite una variabile di flussomessage_weight:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="Quota_with_weight" type="calendar">
        <DisplayName>Quota_with_weight</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="message_weight"/>
    </Quota>
    
  3. Determina il valore della variabile utilizzata per <MessageWeight> nei criteri per le quote identificati. Il valore della variabile di flusso può essere estratto da intestazioni HTTP, parametri di query, un payload di richieste XML o JSON oppure definito in un altro criterio:

    1. Individua il codice all'interno del bundle proxy API in cui la variabile è stata definita per prima.
    2. Una volta compreso per primo il criterio in cui la variabile viene definita e compilata, controlla come viene impostato il valore della variabile.
    3. Se il valore della variabile di flusso corrisponde al valore identificato nel precedente passaggio 1, allora questa è la causa dell'errore.

    Ad esempio, supponiamo che un criterio JavaScript utilizzato prima che i criteri per le quote impostino la variabile message_weight in base al tipo di richiesta, come mostrato di seguito:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    Tieni presente che il valore della variabile message_weight è 1.5, che non è valido (un valore non intero).

Risoluzione

Assicurati che il valore che rappresenta MessageWeight specificato dalla variabile di flusso sia valido (valore intero).

Per correggere l'esempio mostrato sopra, puoi modificare il valore della variabile message_weight in JavaScript in modo che sia un numero intero.

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveQuotaIntervalReference

Codice di errore

policies.ratelimit.FailedToResolveQuotaIntervalReference

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Esempio di messaggio di errore

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Causa

Questo errore si verifica se l'elemento <Interval> non è definito nei criteri per le quote. Questo elemento è obbligatorio e utilizzato per specificare l'intervallo di tempo applicabile alla quota. L'intervallo di tempo può essere minuti, ore, giorni, settimane o mesi, come definito dall'elemento <TimeUnit>.

Diagnostica

  1. Esamina ciascuno dei criteri per le quote nel proxy API in cui si è verificato l'errore. Se esistono criteri per le quote in cui l'elemento obbligatorio <Interval> non è definito, è questa la causa dell'errore.

    Ad esempio, il seguente criterio per le quote non include l'elemento obbligatorio <Interval>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
        <DisplayName>CheckQuota</DisplayName>
        <Properties/>
        <Allow count="3"/>
            <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Poiché l'elemento obbligatorio <TimeUnit> non è definito nei criteri per le quote precedenti, riceverai il codice di errore:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Risoluzione

Assicurati che tutti i criteri per le quote per un determinato proxy API abbiano l'elemento obbligatorio <Interval> definito correttamente.

Per correggere l'esempio mostrato sopra, puoi modificare il criterio in modo da includere l'elemento <Interval>, come mostrato di seguito.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

Codice di errore

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Esempio di messaggio di errore

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Causa

Questo errore si verifica se l'elemento <TimeUnit> non è definito nei criteri per le quote. Questo elemento è obbligatorio e utilizzato per specificare l'unità di tempo applicabile alla quota. L'intervallo di tempo può essere espresso in minuti, ore, giorni, settimane o mesi.

Diagnostica

  1. Esamina ciascuno dei criteri per le quote nel proxy API in cui si è verificato l'errore. Se esistono criteri per le quote in cui l'elemento obbligatorio <TimeUnit> non è definito, è questa la causa dell'errore.

    Ad esempio, il seguente criterio per le quote non include l'elemento obbligatorio <TimeUnit>:

    <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
      <DisplayName>CheckQuota</DisplayName>
      <Properties/>
      <Allow count="3"/>
          <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
      <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Poiché l'elemento obbligatorio <TimeUnit> non è definito nei criteri per le quote precedenti, riceverai il codice di errore:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Risoluzione

Assicurati che tutti i criteri per le quote per un determinato proxy API abbiano definito l'elemento obbligatorio <TimeUnit>.

Per correggere l'esempio mostrato sopra, puoi modificare il criterio in modo da includere l'elemento <TimeUnit>, come mostrato di seguito.

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>