現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。
InvalidMessageWeight
エラーコード
policies.ratelimit.InvalidMessageWeight
エラー レスポンスの本文
{
"fault": {
"faultstring": "Invalid message weight value [invalid_value]",
"detail": {
"errorcode": "policies.ratelimit.InvalidMessageWeight"
}
}
}
エラー メッセージの例
{
"fault": {
"faultstring": "Invalid message weight value 1.5",
"detail": {
"errorcode": "policies.ratelimit.InvalidMessageWeight"
}
}
}
原因
このエラーは、フロー変数で <MessageWeight>
要素に無効な値(整数以外の値)が指定された場合に発生します。
たとえば、<MessageWeight>
要素に指定されたフロー変数の値が 1.5(整数以外の値)であると、このエラーが発生します。
診断
Quota ポリシーで
<MessageWeight>
要素に使用されている無効な値を確認します。この情報はエラー レスポンスのfaultstring
要素で調べることができます。たとえば、次のエラーでは、<MessageWeight>
要素の無効な値は1.5
です。"faultstring": "Invalid message weight value 1.5"
エラーが発生した特定の API プロキシで、すべての割り当てポリシーを調べます。
<MessageWeight>
要素が指定された Quota ポリシーが 1 つ以上存在する可能性もあります。たとえば、次のポリシーではフロー変数
message_weight
を使用して<MessageWeight>
を指定します。<?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>
識別した Quota ポリシーで
<MessageWeight>
に使用されている変数の値を決定します。フロー変数の値は、HTTP ヘッダー、クエリ パラメータ、XML または JSON リクエストのペイロードから抽出することも、別のポリシーで定義されていることもあります。- API プロキシ バンドルで、最初にその変数が定義されたコードを特定します。
- 変数が定義されているポリシーを特定したら、その変数の値がどのように設定されるのか調べます。
- フロー変数の値が上記のステップ 1 で特定した値と一致する場合は、それがエラーの原因です。
たとえば、Quota ポリシーより前に使用された JavaScript ポリシーで、リクエスト タイプに基づいて変数
message_weight
が設定されるとします。var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }
変数
message_weight
の値は1.5
で、これは無効な(整数以外の)値です。
解決策
フロー変数で指定される MessageWeight
を表す値が有効な値(整数値)になっていることを確認します。
上記の例を修正するには、JavaScript の変数 message_weight
の値が整数になるように変更します。
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveQuotaIntervalReference
エラーコード
policies.ratelimit.FailedToResolveQuotaIntervalReference
エラー レスポンスの本文
{
"fault": {
"faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
}
}
}
エラー メッセージの例
{
"fault": {
"faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
}
}
}
原因
このエラーは、Quota ポリシー内で <Interval>
要素が定義されていない場合に発生します。この要素は必須であり、割り当てに適用される間隔を指定するために使用されます。間隔は、<TimeUnit>
要素で定義された分、時、日、週、月で指定できます。
診断
エラーが発生した API プロキシで、各 Quota ポリシーを調べます。必須の要素
<Interval>
が定義されていない Quota ポリシーがある場合、それがエラーの原因です。たとえば、次の Quota ポリシーには必須の
<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>
上記の Quota ポリシーには必須の
<TimeUnit>
要素が定義されていないため、次のエラーコードを受け取ります。policies.ratelimit.FailedToResolveQuotaIntervalReference
解決策
所定の API プロキシのすべての Quota ポリシーに、必須の <Interval>
要素が適切に定義されていることを確認します。
上記の例を修正するには、次のように <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> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval> <StartTime>2017-7-16 12:00:00</StartTime> </Quota>
FailedToResolveQuotaIntervalTimeUnitReference
エラーコード
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
エラー レスポンスの本文
{
"fault": {
"faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
}
}
}
エラー メッセージの例
{
"fault": {
"faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
}
}
}
原因
このエラーは、Quota ポリシー内で <TimeUnit>
要素が定義されていない場合に発生します。この要素は必須であり、割り当てに適用される時間単位を指定するために使用されます。間隔は、分、時間、日、週、月で指定できます。
診断
エラーが発生した API プロキシで、各 Quota ポリシーを調べます。必須の要素
<TimeUnit>
が定義されていない Quota ポリシーがある場合、それがエラーの原因です。たとえば、次の Quota ポリシーには必須の
<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>
上記の Quota ポリシーには必須の
<TimeUnit>
要素が定義されていないため、次のエラーコードを受け取ります。policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
解決策
所定の API プロキシのすべての Quota ポリシーに、必須の <TimeUnit>
要素が定義されていることを確認します。
上記の例を修正するには、次のように <TimeUnit>
要素を含めるようにポリシーを変更します。
<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>