شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
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 باشد (مقدار غیر صحیح) این خطا رخ می دهد.
تشخیص
مقدار نامعتبر مورد استفاده برای عنصر
<MessageWeight>
در خط مشی Quota را شناسایی کنید. شما می توانید این اطلاعات را در عنصرfaultstring
پاسخ خطا پیدا کنید. به عنوان مثال، در خطای زیر، مقدار نامعتبر استفاده شده برای عنصر<MessageWeight>
1.5
است:"faultstring": "Invalid message weight value 1.5"
تمام خط مشی های سهمیه را در پروکسی API خاص که در آن شکست رخ داده است، بررسی کنید. ممکن است یک یا چند خط مشی سهمیه وجود داشته باشد که در آن عنصر
<MessageWeight>
مشخص شده باشد.به عنوان مثال، سیاست زیر
<MessageWeight>
از طریق متغیر جریانmessage_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>
مقدار متغیر مورد استفاده برای
<MessageWeight>
را در خط مشی(های) سهمیه مشخص شده تعیین کنید. مقدار متغیر جریان را می توان از هدرهای HTTP، پارامترهای پرس و جو، یک بار درخواست XML یا JSON استخراج کرد یا در خط مشی دیگری تعریف کرد:- کد را در بسته API Proxy که در آن ابتدا متغیر تعریف شده است، قرار دهید.
- هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، سپس بررسی کنید که مقدار متغیر چگونه تنظیم شده است.
- اگر مقدار متغیر جریان با مقدار مشخص شده در مرحله شماره 1 در بالا مطابقت داشته باشد، این دلیل خطا است.
به عنوان مثال، فرض کنید که یک خط مشی جاوا اسکریپت که قبل از Quota Policy استفاده می شود، متغیر
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
مشخص شده توسط متغیر جریان، یک مقدار معتبر (مقدار صحیح) باشد.
برای تصحیح مثال بالا، می توانید مقدار متغیر 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"
}
}
}
علت
اگر عنصر <Interval>
در خط مشی Quota تعریف نشده باشد، این خطا رخ می دهد. این عنصر اجباری است و برای تعیین فاصله زمانی قابل اعمال برای سهمیه استفاده می شود. فاصله زمانی می تواند دقیقه، ساعت، روز، هفته یا ماه باشد که با عنصر <TimeUnit>
تعریف شده است.
تشخیص
هر یک از خطمشیهای Quota را در پراکسی API که در آن شکست رخ داده است، بررسی کنید. اگر هر خط مشی Quota وجود داشته باشد که عنصر اجباری
<Interval>
تعریف نشده باشد، دلیل این خطا همین است.برای مثال، خط مشی 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>
از آنجایی که عنصر اجباری
<TimeUnit>
در خط مشی Quota بالا تعریف نشده است، کد خطا را دریافت خواهید کرد:policies.ratelimit.FailedToResolveQuotaIntervalReference
قطعنامه
اطمینان حاصل کنید که تمام خط مشی های Quota برای یک پراکسی API معین دارای عنصر اجباری <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"
}
}
}
علت
اگر عنصر <TimeUnit>
در خط مشی Quota تعریف نشده باشد، این خطا رخ می دهد. این عنصر اجباری است و برای تعیین واحد زمان قابل اعمال در سهمیه استفاده می شود. فاصله زمانی می تواند بر حسب دقیقه، ساعت، روز، هفته یا ماه باشد.
تشخیص
هر یک از خطمشیهای Quota را در پراکسی API که در آن شکست رخ داده است، بررسی کنید. اگر هر خط مشی Quota وجود داشته باشد که عنصر اجباری
<TimeUnit>
تعریف نشده باشد، این دلیل خطا است.برای مثال، خط مشی 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>
از آنجایی که عنصر اجباری
<TimeUnit>
در خط مشی Quota بالا تعریف نشده است، کد خطا را دریافت خواهید کرد:policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
قطعنامه
اطمینان حاصل کنید که تمام خط مشی های سهمیه برای یک پروکسی API معین دارای عنصر اجباری <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>