Dépannage des erreurs d'exécution des quotas

Vous consultez la documentation d'Apigee X.
Consultez la documentation d'Apigee Edge.

InvalidMessageWeight

Code d'erreur

policies.ratelimit.InvalidMessageWeight

Corps de la réponse d'erreur

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

Exemple de message d'erreur

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

Cause

Cette erreur se produit si la valeur de l'élément <MessageWeight> spécifiée via une variable de flux n'est pas valide (valeur non entière).

Par exemple, cette erreur se produit si la valeur de la variable de flux spécifiée pour l'élément <MessageWeight> est de 1,5 (valeur non entière).

Diagnostic

  1. Identifiez la valeur non valide utilisée pour l'élément <MessageWeight> dans la règle Quota. Vous trouverez ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans l'erreur suivante, la valeur non valide utilisée pour l'élément <MessageWeight> est 1.5 :

    "faultstring": "Invalid message weight value 1.5"
    
  2. Examinez toutes les règles de quota du proxy d'API spécifique où l'erreur s'est produite. Il peut y avoir une ou plusieurs règles Quota dans lesquelles l'élément <MessageWeight> est spécifié.

    Par exemple, la règle suivante spécifie <MessageWeight> à travers une variable de fluxmessage_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. Déterminez la valeur de la variable utilisée pour <MessageWeight> dans la ou les règles de quota identifiées. La valeur de la variable de flux peut être extraite à partir d'en-têtes HTTP, de paramètres de requête, d'une charge utile de requête XML ou JSON, ou définie dans une autre stratégie :

    1. Recherchez le code dans le groupe de proxys d'API, où la variable a été définie en premier.
    2. Une fois que vous avez identifié la règle dans laquelle la variable est définie et renseignée en premier, vérifiez la valeur de la variable.
    3. Si la valeur de la variable de flux correspond à la valeur identifiée à l'étape 1 ci-dessus, alors cela est la cause de l'erreur.

    Par exemple, supposons qu'une stratégie JavaScript utilisée avant la règle de quota définisse la variable message_weight en fonction du type de requête, comme indiqué ci-dessous :

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

    Notez que la valeur de la variable message_weight est 1.5, et qu'elle n'est donc pas valide (valeur non entière).

Solution

Vérifiez que la valeur qui représente l'élément MessageWeight spécifiée par la variable de flux est une valeur valide (valeur entière).

Pour corriger l'exemple ci-dessus, vous pouvez modifier la valeur de la variable message_weight dans le code JavaScript de sorte qu'elle soit entière.

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

FailedToResolveQuotaIntervalReference

Code d'erreur

policies.ratelimit.FailedToResolveQuotaIntervalReference

Corps de la réponse d'erreur

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

Exemple de message d'erreur

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

Cause

Cette erreur se produit si l'élément <Interval> n'est pas défini dans la règle Quota. Cet élément est obligatoire et permet de spécifier l'intervalle de temps applicable au quota. L'intervalle de temps peut être exprimé en minutes, en heures, en jours, en semaines ou en mois, comme défini dans l'élément <TimeUnit>.

Diagnostic

  1. Examinez chacune des stratégies de quota dans le proxy API où la défaillance a eu lieu. S'il existe une règle relative au quota pour laquelle l'élément obligatoire <Interval> n'est pas défini, alors cela est la cause de l'erreur.

    Par exemple, la règle de quota suivante ne comporte pas l'élément obligatoire <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>
    

    Comme l'élément obligatoire <TimeUnit> n'est pas défini dans la règle de quota ci-dessus, vous recevez le code d'erreur :

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Solution

Assurez-vous que l'élément obligatoire <Interval> est correctement défini pour toutes les règles Quota d'un proxy d'API donné.

Pour corriger l'exemple ci-dessus, vous pouvez modifier la règle afin d'inclure l'élément <Interval> comme indiqué ci-dessous.

<?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

Code d'erreur

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Corps de la réponse d'erreur

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

Exemple de message d'erreur

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

Cause

Cette erreur se produit si l'élément <TimeUnit> n'est pas défini dans la règle Quota. Cet élément est obligatoire et permet de spécifier l'unité de temps applicable au quota. L'intervalle de temps peut être exprimé en minutes, en heures, en jours, en semaines ou en mois.

Diagnostic

  1. Examinez chacune des stratégies de quota dans le proxy API où la défaillance a eu lieu. S'il existe une règle relative au quota pour laquelle l'élément obligatoire <TimeUnit> n'est pas défini, alors cela est la cause de l'erreur.

    Par exemple, la règle de quota suivante ne comporte pas l'élément obligatoire <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>
    

    Comme l'élément obligatoire <TimeUnit> n'est pas défini dans la règle de quota ci-dessus, vous recevez le code d'erreur :

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Solution

Assurez-vous que l'élément obligatoire <TimeUnit> est défini pour toutes les règles Quota d'un proxy d'API donné.

Pour corriger l'exemple ci-dessus, vous pouvez modifier la règle afin d'inclure l'élément <TimeUnit> comme indiqué ci-dessous.

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