Vous consultez la documentation Apigee Edge.
Accédez à la documentation sur Apigee X. info
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
Identifiez la valeur non valide utilisée pour l'élément
<MessageWeight>
dans la règle Quota. Vous trouverez ces informations dans l'élémentfaultstring
de la réponse d'erreur. Par exemple, dans l'erreur suivante, la valeur non valide utilisée pour l'élément<MessageWeight>
est1.5
:"faultstring": "Invalid message weight value 1.5"
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>
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 :- Recherchez le code dans le groupe de proxys d'API, où la variable a été définie en premier.
- 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.
- 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
est1.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
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
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>