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