عیب یابی خطای زمان اجرا سهمیه

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

وزن پیام نامعتبر

کد خطا

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. مقدار نامعتبر استفاده شده برای عنصر <MessageWeight> در سیاست سهمیه‌بندی را شناسایی کنید. می‌توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در خطای زیر، مقدار نامعتبر استفاده شده برای عنصر <MessageWeight> 1.5 است:

    "faultstring": "Invalid message weight value 1.5"
    
  2. تمام سیاست‌های سهمیه‌بندی را در API Proxy خاصی که در آن خرابی رخ داده است، بررسی کنید. ممکن است یک یا چند سیاست سهمیه‌بندی وجود داشته باشد که در آنها عنصر <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>
    
  3. مقدار متغیر مورد استفاده برای <MessageWeight> را در سیاست(های) سهمیه‌بندی شناسایی‌شده تعیین کنید. مقدار متغیر جریان را می‌توان از هدرهای HTTP، پارامترهای پرس‌وجو، یک درخواست XML یا JSON استخراج کرد یا در سیاست دیگری تعریف کرد:

    1. کد موجود در بسته API Proxy را که متغیر ابتدا در آن تعریف شده است، پیدا کنید.
    2. وقتی که ابتدا سیاستی که متغیر در آن تعریف و پر می‌شود را فهمیدید، سپس بررسی کنید که مقدار متغیر چگونه تنظیم شده است.
    3. اگر مقدار متغیر جریان با مقداری که در مرحله ۱ بالا مشخص شده است مطابقت داشته باشد، علت خطا همین است.

    برای مثال، فرض کنید که یک سیاست جاوا اسکریپت که قبل از سیاست سهمیه‌بندی استفاده می‌شود، متغیر 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 است و توسط متغیر flow مشخص شده، یک مقدار معتبر (مقدار صحیح) است.

برای اصلاح مثال نشان داده شده در بالا، می‌توانید مقدار متغیر 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> تعریف می‌شود.

تشخیص

  1. هر یک از سیاست‌های سهمیه‌بندی در API Proxy را که در آن خطا رخ داده است، بررسی کنید. اگر سیاست سهمیه‌بندی وجود دارد که در آن عنصر اجباری <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>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    از آنجا که عنصر اجباری <TimeUnit> در سیاست سهمیه‌بندی فوق تعریف نشده است، کد خطای زیر را دریافت خواهید کرد:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

وضوح تصویر

اطمینان حاصل کنید که تمام سیاست‌های سهمیه‌بندی برای یک پروکسی 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> در سیاست سهمیه‌بندی تعریف نشده باشد. این عنصر اجباری است و برای تعیین واحد زمانی مربوط به سهمیه‌بندی استفاده می‌شود. فاصله زمانی می‌تواند بر حسب دقیقه، ساعت، روز، هفته یا ماه باشد.

تشخیص

  1. هر یک از سیاست‌های سهمیه‌بندی در API Proxy را که در آن خطا رخ داده است، بررسی کنید. اگر سیاست سهمیه‌بندی وجود دارد که در آن عنصر اجباری <TimeUnit> تعریف نشده است، پس علت خطا همان است.

    برای مثال، سیاست سهمیه‌بندی زیر عنصر اجباری <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> در سیاست سهمیه‌بندی فوق تعریف نشده است، کد خطای زیر را دریافت خواهید کرد:

    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>