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

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

InvalidRLPolicy

کد خطا

policies.resetquota.InvalidRLPolicy

بدنه پاسخ به خطا

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

نمونه پیام خطا

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

علت

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

به عنوان مثال، فرض کنید عنصر <Quota> مطابق شکل زیر تعریف شده است، اما اگر MyQuotaPolicy در API Proxy تعریف نشده باشد، خطای بالا را دریافت می کنید.

<Quota name="MyQuotaPolicy">

تشخیص

  1. نام خط مشی سهمیه نامعتبر مشخص شده در خط مشی بازنشانی سهمیه را شناسایی کنید. می توانید نام خط مشی Quota را از رشته خطا پیدا کنید. به عنوان مثال، در رشته خطای زیر، نام خط مشی Quota MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. هر یک از سیاست‌های Reset Quota را در پراکسی API که در آن شکست رخ داده است، بررسی کنید. خط مشی مشخصی را شناسایی کنید که در آن خط مشی سهمیه مشخص شده در عنصر اجباری <Quota> با نام مشخص شده در مرحله 1 در بالا مطابقت دارد.

    به عنوان مثال، خط مشی Reset Quota زیر یک خط مشی Quota به نام MyQuotaPolicy را مشخص می کند که با آنچه در رشته خطا است مطابقت دارد:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
    
  3. تعیین کنید که آیا این خط مشی سهمیه در همان پروکسی API ایجاد و تعریف شده است. اگر خط مشی Quota در همان پراکسی API وجود نداشته باشد، دلیل این خطا است.

    در مثال نشان داده شده در بالا، قرار است سیاست Quota MyQuotaPolicy قبل از اجرای سیاست Reset Quota Reset_Quota_Demo در جریان وجود داشته باشد.

    از آنجایی که Quota Policy MyQuotaPolicy در جریان وجود ندارد، کد خطا را دریافت خواهید کرد:

"errorcode": "policies.resetquota.InvalidRLPolicy"

قطعنامه

اطمینان حاصل کنید که خط مشی سهمیه اعلام شده در عنصر <Quota> در پروکسی API تعریف شده است. این خط مشی سهمیه هدف باید هنگام اجرای خط مشی Reset Quota در دسترس باشد.

FailedToResolveAllowCountRef

کد خطا

policies.resetquota.FailedToResolveAllowCountRef

بدنه پاسخ به خطا

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

نمونه پیام خطا

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

خطای بازگشتی به کلاینت به سادگی این خواهد بود: policies.ratelimit.QuotaViolation .

علت

این خطا در صورتی رخ می دهد که ارجاع به متغیر حاوی تعداد مجاز در عنصر <Allow> خط مشی قابل حل نباشد. این عنصر اجباری است و میزان کاهش سهمیه شمار را مشخص می کند.

تشخیص

  1. خط مشی Reset Quota را در جایی که خطا رخ داده است و نام متغیر مرجعی را که قابل حل نیست شناسایی کنید. شما می توانید هر دو مورد را در پاسخ خطا پیدا کنید.

    به عنوان مثال، در رشته خطای زیر، نام سیاست ResetQuota و مرجع request.header.allowcount است:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. در XML خط مشی Reset Quota ناموفق، بررسی کنید که نام متغیر مرجع استفاده شده با نام مرجع مشخص شده در پاسخ خطا مطابقت داشته باشد (مرحله 1 در بالا).

    به عنوان مثال، خط مشی زیر عنصر را با مرجع به نام request.header.allowcount تنظیم می کند که با خطای موجود مطابقت دارد:

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. تعیین کنید که آیا متغیر مرجع در جریانی که در آن خط مشی Reset Quota اجرا می شود، تعریف شده و موجود است یا خیر.

  4. اگر متغیر یکی از این موارد باشد:

    1. خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
    2. قابل حل نیست (تعریف نشده است)

    پس این دلیل خطا است.

    در مثال نشان داده شده در بالا، مقدار تعداد مجاز در عنصر <Allow> قرار است از سرصفحه درخواست با نام allowcount بازیابی شود. با این حال، Edge قادر به حل و فصل request.header.allowcount نیست. اگر تعداد مجاز سرصفحه به عنوان بخشی از درخواست API ارسال نشود، این اتفاق می‌افتد.

    در اینجا یک نمونه درخواست API وجود دارد که از تعداد مجاز هدر به عنوان بخشی از درخواست عبور نمی کند:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    از آنجا که تعداد مجاز سرصفحه به عنوان بخشی از درخواست ارسال نمی شود، متغیر request.header.allowcount مورد استفاده در عنصر <Allow> در خط مشی Reset Quota بالا تعریف نشده است و بنابراین قابل حل نیست. بنابراین شما پاسخ خطا را دریافت خواهید کرد:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

قطعنامه

اطمینان حاصل کنید که متغیر ارجاع شده در عنصر <Allow> در جریان خاص، جایی که سیاست Reset Quota اجرا می‌شود، تعریف شده و در دسترس است.

برای تصحیح مثالی که در بالا نشان داده شده است، می‌توانید درخواست را طوری تغییر دهید که هدر تعداد مجاز را مطابق شکل زیر درج کند:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

FailedToResolveRLPolicy

کد خطا

policies.resetquota.FailedToResolveRLPolicy

بدنه پاسخ به خطا

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

نمونه پیام خطا

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

علت

این خطا در صورتی رخ می دهد که متغیر ارجاع شده توسط ویژگی ref در عنصر <Quota> قابل حل نباشد.

برای مثال، اگر ویژگی ref به عنوان request.header.quotapolicy در عنصر <Quota> تنظیم شده باشد اما در جریان پروکسی API موجود نباشد، خطای بالا را دریافت می‌کنید.

<Quota ref="request.header.quotapolicy">

تشخیص

  1. هر یک از خط‌مشی‌های Reset Quota را در پراکسی API که در آن شکست رخ داده است، بررسی کنید و خط‌مشی Reset Quota را شناسایی کنید، جایی که نام متغیر مرجع مشخص‌شده در عنصر <Quota> به درستی قابل حل نیست.

  2. تعیین کنید که آیا متغیر در جریانی که در آن خط مشی Reset Quota اجرا می شود، تعریف شده و موجود است یا خیر.

  3. اگر متغیر یکی از این موارد باشد:

    1. خارج از محدوده (در جریان خاصی که سیاست اجرا می شود موجود نیست) یا
    2. قابل حل نیست (تعریف نشده است)

    پس این دلیل خطا است.

    در مثال نشان داده شده در زیر، نام سیاست سهمیه هدف قرار است از سرصفحه درخواست به نام quotapolicy بازیابی شود. با این حال، Edge قادر به حل و فصل request.header.quotapolicy نیست. اگر سهمیه هدر به عنوان بخشی از درخواست API ارسال نشود، این اتفاق می‌افتد.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    در اینجا یک نمونه درخواست API وجود دارد که از سهمیه هدر به عنوان بخشی از درخواست عبور نمی کند:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    از آنجا که سهمیه سرصفحه به عنوان بخشی از درخواست ارسال نمی شود، مرجع request.header.quotapolicy استفاده شده در عنصر <Quota> در خط مشی Reset Quota بالا تعریف نشده است و قابل حل نیست. در نتیجه، پاسخ خطا را دریافت می کنید:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

قطعنامه

اطمینان حاصل کنید که ویژگی ref ارجاع شده در عنصر <Quota> در زمان اجرا حل می شود و در جریان خاص، جایی که سیاست Reset Quota اجرا می شود، در دسترس است.

برای تصحیح مثالی که در بالا نشان داده شده است، می‌توانید درخواست را تغییر دهید تا هدر سهمیه‌بندی را مطابق شکل زیر تغییر دهید:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"