פתרון בעיות בזמן ריצה של מכסה

כרגע מוצג התיעוד של 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 (ערך שאינו מספר שלם).

אבחון

  1. יש לזהות את הערך הלא חוקי המשמש לרכיב <MessageWeight> במדיניות המכסה. אפשר למצוא את המידע הזה ברכיב faultstring של תגובת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא חוקי שמשמש לרכיב <MessageWeight> הוא 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. יש לבדוק את כל כללי מדיניות המכסה בשרת ה-proxy הספציפי של ה-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>
    
  3. קובעים את ערך המשתנה שמשמש לפרמטר <MessageWeight> במדיניות המכסה שזוהו. ניתן לחלץ את הערך של משתנה הזרימה מכותרות HTTP, מפרמטרים של שאילתות או ממטען ייעודי של בקשת XML או JSON, או מהגדרה במדיניות אחרת:

    1. יש לאתר את הקוד בחבילה של שרת ה-API של שרת ה-API, במקום שבו המשתנה הוגדר קודם.
    2. אחרי שמבינים מהי המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לבדוק איך מוגדר הערך של המשתנה.
    3. אם הערך של משתנה הזרימה תואם לערך שזוהה בשלב 1 למעלה, זו הסיבה לשגיאה.

    לדוגמה, נניח שמדיניות 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 שצוין על ידי משתנה הזרימה הוא ערך חוקי (ערך של מספר שלם).

כדי לתקן את הדוגמה שלמעלה, אפשר לשנות את הערך של המשתנה message_weight ב-JavaScript למספר שלם.

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>לא מוגדר במדיניות המכסה. הרכיב הזה הוא חובה ומשמש לציון פרק הזמן שרלוונטי למכסה. מרווח הזמן יכול להיות דקות, שעות, ימים, שבועות או חודשים, כפי שמוגדר ברכיב <TimeUnit>.

אבחון

  1. יש לבדוק כל אחד מכללי מדיניות המכסה בשרת ה-proxy של ה-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>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    רכיב החובה <TimeUnit> לא מוגדר במדיניות המכסה שלמעלה, לכן יוצג קוד השגיאה:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

רזולוציה

צריך לוודא שבכל מדיניות המכסה של שרת proxy נתון ב-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. יש לבדוק כל אחד מכללי מדיניות המכסה בשרת ה-proxy של ה-API שבו אירעה הכשל. אם יש מדיניות מכסה שבה רכיב החובה <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
    

רזולוציה

צריך לוודא שבכל מדיניות המכסה של שרת proxy נתון ל-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>