מדיניות מכסה

אתם צופים במסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

מה

אפשר להשתמש במדיניות המכסות כדי להגדיר את מספר הודעות הבקשה ששרת proxy ל-API מאפשר לשלוח בפרק זמן מסוים, כמו דקה, שעה, יום, שבוע או חודש. אפשר להגדיר את המכסה כך שתהיה זהה לכל האפליקציות שגולשות לשרת ה-proxy של ה-API, או להגדיר את המכסה על סמך:

  • המוצר שמכיל את שרת ה-API המחובר
  • האפליקציה שמבקשת את ה-API
  • מפַתח האפליקציה
  • קריטריונים רבים אחרים

אל תשתמשו במכסות כדי להגן מפני עליות חדות במספר הבקשות הכולל. לשם כך, משתמשים במדיניות Spike Arrest. המדיניות בנושא מניעת עליות חדות בביקוש

סרטונים

בסרטונים האלה נסביר איך מנהלים את המכסות באמצעות מדיניות המכסות:

פתיח (Edge החדש)

פתיח (Classic Edge)

מכסה דינמית

מבוזר וסינכרוני

משקל ההודעה

יומן

חלון נע

Flexi

מכסה מותנית

משתני תהליך

טיפול בשגיאות

דוגמאות

דוגמאות הקוד האלה למדיניות ממחישות איך מתחילים ומסיימים תקופות מכסות באמצעות:

מכסות דינמיות נוספות

<Quota name="CheckQuota"> 
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
  <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/>
</Quota>

מכסות דינמיות מאפשרות להגדיר מדיניות מכסות אחת שמפעילה הגדרות מכסות שונות על סמך מידע שמוענק למדיניות המכסות. מונח נוסף להגדרות המכסות בהקשר הזה הוא 'תוכנית שירות'. המכסה הדינמית בודקת את 'תוכנית השירות' של האפליקציות, ואז אוכפת את ההגדרות האלה.

הערה: אם מציינים ערך וגם הפניה לרכיב, ההפניה מקבלת את העדיפות. אם ההפניה לא תיפתר בזמן הריצה, המערכת תשתמש בערך.

לדוגמה, כשיוצרים מוצר API, אפשר להגדיר את המגבלה, יחידת הזמן והמרווח הזמנים של המכסה המותרת. עם זאת, הגדרת הערכים האלה במוצר ה-API לא אוכפת את השימוש בהם בשרת proxy של API. צריך גם להוסיף מדיניות מכסות לשרת ה-proxy של ה-API שקורא את הערכים האלה. מידע נוסף זמין במאמר יצירת מוצרים של API.

בדוגמה שלמעלה, שרת ה-API המחובר לשרת ה-proxy שמכיל את מדיניות המכסות משתמש במדיניות VerifyAPIKey בשם verify-api-key כדי לאמת את מפתח ה-API שמוענק בבקשה. לאחר מכן, מדיניות המכסות ניגשת למשתני התהליך מהמדיניות VerifyAPIKey כדי לקרוא את ערכי המכסות שהוגדרו במוצר ה-API. מידע נוסף על משתני התהליך של VerifyAPIKey זמין במאמר מדיניות של Verify API Key.

אפשרות אחרת היא להגדיר מאפיינים מותאמים אישית למפתחים או לאפליקציות ספציפיים, ואז לקרוא את הערכים האלה במדיניות המכסות. לדוגמה, אתם רוצים להגדיר ערכי מכסות שונים לכל מפתח. במקרה כזה, מגדירים מאפיינים מותאמים אישית למפתח שמכילים את המגבלה, יחידת הזמן והמרווח. לאחר מכן, צריך להפנות לערכים האלה במדיניות המכסות, כפי שמתואר בהמשך:

<Quota name="DeveloperQuota"> 
  <Identifier ref="verifyapikey.verify-api-key.client_id"/> 
  <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> 
  <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> 
  <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> 
</Quota>

הדוגמה הזו משתמשת גם במשתני התהליך של VerifyAPIKey כדי להפנות למאפיינים המותאמים אישית שהוגדרו למפתח.

אפשר להשתמש בכל משתנה כדי להגדיר את הפרמטרים של מדיניות המכסות. המשתנים האלה יכולים להגיע מהמקורות הבאים:

  • משתני תהליך
  • מאפיינים במוצר ה-API, באפליקציה או במפתח
  • מפת מפתח/ערך (KVM)
  • כותרת, פרמטר של שאילתה, פרמטר של טופס וכו'

לכל שרת proxy של API אפשר להוסיף מדיניות מכסות שמפנה לאותו משתנה כמו כל כללי מדיניות המכסות האחרים בכל שרת ה-proxy האחר, או שמדיניות המכסות יכולה להפנות למשתנים ייחודיים למדיניות ולשרת ה-proxy האלה.

שעת ההתחלה

<Quota name="QuotaPolicy" type="calendar">
  <StartTime>2017-02-18 10:30:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

למכסה עם type שמוגדר לערך calendar, צריך להגדיר ערך <StartTime> מפורש. ערך הזמן הוא לפי שעון GMT, ולא לפי הזמן המקומי. אם לא מציינים ערך <StartTime> למדיניות מסוג calendar, תופיע שגיאה ב-Edge.

מונה המכסות של כל אפליקציה מתעדכן על סמך הערכים של <StartTime>,‏ <Interval> ו-<TimeUnit>. בדוגמה הזו, המכסה מתחילה להיספר ב-10:30 (שעון גריניץ') ב-18 בפברואר 2017, והיא מתעדכנת כל 5 שעות. לכן, הרענון הבא יתבצע בשעה 15:30 (שעון גריניץ') ב-18 בפברואר 2017.

מונה גישה

<Quota name="QuotaPolicy">
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

לשרת proxy של API יש גישה למשתני הזרימה שהוגדרו על ידי מדיניות המכסות. אפשר לגשת למשתני התהליך האלה בשרת ה-proxy של ה-API כדי לבצע עיבוד מותנה, לעקוב אחרי המדיניות כשהיא מתקרבת למגבלת המכסה, להחזיר לאפליקציה את מונה המכסה הנוכחי או למטרות אחרות.

מכיוון שהגישה למשתני הזרימה של המדיניות מבוססת על המאפיין name של המדיניות, כדי לגשת למשתני הזרימה של המדיניות QuotaPolicy שמופיעה למעלה, צריך להשתמש בפורמט הבא:

  • ratelimit.QuotaPolicy.allowed.count: מספר ההרשאות.
  • ratelimit.QuotaPolicy.used.count: הערך הנוכחי של המונה.
  • ratelimit.QuotaPolicy.expiry.time: שעון UTC שבו המונה מתאפס.

יש עוד הרבה משתני תהליך שאפשר לגשת אליהם, כפי שמתואר בהמשך.

לדוגמה, אפשר להשתמש במדיניות AssignMessage הבאה כדי להחזיר את הערכים של משתני תהליך המכסה ככותרות תגובה:

<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars">
    <AssignTo createNew="false" type="response"/>
    <Set>
        <Headers>
            <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header>
            <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header>
            <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

הבקשה הראשונה

<Quota name="MyQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="10000"/>
</Quota>

אפשר להשתמש בקוד לדוגמה הזה כדי לאכוף מכסה של 10,000 קריאות לשעה. המדיניות מתאפסת את ספירת המכסות בתחילת כל שעה. אם המונה מגיע למכסת 10,000 השיחות לפני סוף השעה, שיחות מעבר למכסה נדחות.

לדוגמה, אם המונה מתחיל ב-2017-07-08 07:00:00, הוא מתאפס ל-0 ב-2017-07-08 08:00:00 (שעה אחת ממועד ההתחלה). אם ההודעה הראשונה מתקבלת בשעה 2017-07-08 07:35:28 ומספר ההודעות מגיע ל-10,000 לפני השעה 2017-07-08 08:00:00, שיחות מעבר למספר הזה נדחות עד שהמספר יתאפס בתחילת השעה.

מועד האיפוס של המונה מבוסס על השילוב של <Interval> ו-<TimeUnit>. לדוגמה, אם מגדירים את <Interval> לערך 12 עבור <TimeUnit> של שעה, המונה מתאפס כל 12 שעות. אפשר להגדיר את <TimeUnit> כ'דקה', 'שעה', 'יום', 'שבוע' או 'חודש'.

אפשר להפנות למדיניות הזו בכמה מקומות בשרתי ה-API שלכם. לדוגמה, אפשר למקם אותו בתהליך המקדים של שרת ה-Proxy כדי שהוא יבוצע בכל בקשה. לחלופין, אפשר להציב אותו במספר תהליכים בשרתי proxy של ה-API. אם משתמשים במדיניות הזו במספר מקומות בשרת proxy, הוא שומר על מונה יחיד שמתעדכן על ידי כל המופעים של המדיניות.

לחלופין, אפשר להגדיר כמה כללי מדיניות מכסות בשרת ה-proxy של ה-API. לכל מדיניות מכסה יש מונה משלה, שמבוסס על המאפיין name של המדיניות.

הגדרת מזהה

<Quota name="QuotaPolicy" type="calendar">
  <Identifier ref="request.header.clientId"/> 
  <StartTime>2017-02-18 10:00:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

כברירת מחדל, מדיניות מכסות מגדירה מונה יחיד לשרת ה-proxy של ה-API, ללא קשר למקור של הבקשה. לחלופין, אפשר להשתמש במאפיין <Identifier> עם מדיניות מכסות כדי לשמור על ספירה נפרדת של אירועים על סמך הערך של המאפיין <Identifier>.

לדוגמה, אפשר להשתמש בתג <Identifier> כדי להגדיר ספירות נפרדות לכל מזהה לקוח. בבקשה לשרת ה-proxy, אפליקציית הלקוח מעבירה כותרת שמכילה את הערך clientID, כפי שמוצג בדוגמה שלמעלה.

אפשר לציין כל משתנה תהליך למאפיין <Identifier>. לדוגמה, אפשר לציין שפרמטר של שאילתה בשם id מכיל את המזהה הייחודי:

<Identifier ref="request.queryparam.id"/>

אם משתמשים במדיניות VerifyAPIKey כדי לאמת את מפתח ה-API, או במדיניות OAuthV2 עם אסימוני OAuth, אפשר להשתמש במידע במפתח ה-API או באסימון כדי להגדיר מונים נפרדים לאותה מדיניות מכסות. לדוגמה, התג <Identifier> הבא משתמש במשתנה התהליך client_id של מדיניות VerifyAPIKey בשם verify-api-key:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

עכשיו, לכל ערך client_id ייחודי מוגדר מונה משלו במדיניות המכסות.

מחלקה

<Quota name="QuotaPolicy">
  <Interval>1</Interval>
  <TimeUnit>day</TimeUnit>
  <Allow>
    <Class ref="request.header.developer_segment">
      <Allow class="platinum" count="10000"/>
      <Allow class="silver" count="1000" />
    </Class>
  </Allow>
</Quota>

אפשר להגדיר מגבלות מכסה באופן דינמי באמצעות ספירת מכסות מבוססת-סיווג. בדוגמה הזו, מגבלת המכסה נקבעת לפי הערך של הכותרת developer_segment שמועברת עם כל בקשה. הערך של המשתנה הזה יכול להיות platinum או silver. אם לכותרת יש ערך לא תקין, המדיניות מחזירה שגיאה של הפרת מכסה.


מידע על המדיניות בנושא מכסות

מכסה היא הקצאה של הודעות בקשה ששרת proxy ל-API יכול לטפל בהן במהלך תקופת זמן, כמו דקה, שעה, יום, שבוע או חודש. המדיניות כוללת ספירה של מספר הבקשות שהתקבלו על ידי שרת ה-API. היכולת הזו מאפשרת לספקים של ממשקי API לאכוף מגבלות על מספר הקריאות ל-API שמבוצעות על ידי אפליקציות במרווח זמן מסוים. באמצעות מדיניות המכסות אפשר, למשל, להגביל אפליקציות לבקשה אחת בדקה או ל-10,000 בקשות בחודש.

לדוגמה, אם המכסה מוגדרת כ-10,000 הודעות בחודש, הגבלת הקצב תתחיל אחרי ההודעה ה-10,000. לא משנה אם 10,000 ההודעות נספרות ביום הראשון או ביום האחרון של התקופה הזו. לא ניתן לשלוח בקשות נוספות עד שמונה המכסה מתאפסת באופן אוטומטי בסוף מרווח הזמן שצוין, או עד שמאפסים את המכסה באופן מפורש באמצעות מדיניות האיפוס של המכסה.

וריאציה של מכסת השימוש שנקראת SpikeArrest מונעת עליות חדות (או התפרצויות) בנפח התנועה, שיכולות לנבוע מעלייה פתאומית בשימוש, מלקוחות עם באגים או מתקפות זדוניות. מידע נוסף על SpikeArrest זמין במאמר מדיניות Spike Arrest.

המכסות חלות על שרתי proxy נפרדים ל-API, ולא מתחלקות בין שרתי proxy ל-API. לדוגמה, אם יש לכם שלושה שרתי proxy ל-API במוצר API, מכסה אחת לא משותפת בין שלושתם, גם אם כל השלושה משתמשים באותה הגדרה של מדיניות המכסות.

סוגי כללי מדיניות המכסות

מדיניות המכסות תומכת בכמה סוגים שונים של מדיניות: ברירת מחדל, calendar,‏ flexi ו-rollingwindow. כל סוג מגדיר מתי מתחיל ספירת המכסה ומתי היא מתאפסת, כפי שמתואר בטבלה הבאה:

יחידת זמן איפוס לברירת מחדל (או לאפס) איפוס היומן איפוס גמיש
דקה תחילת הדקה הבאה דקה אחת אחרי <StartTime> דקה אחת אחרי הבקשה הראשונה
hour בתחילת השעה הבאה שעה אחת אחרי <StartTime> שעה אחת אחרי הבקשה הראשונה
יום חצות לפי שעון גריניץ' ביום הנוכחי 24 שעות אחרי <StartTime> 24 שעות אחרי הבקשה הראשונה
שבוע חצות (00:00) שעון גריניץ' ביום ראשון בסוף השבוע שבוע אחרי <StartTime> שבוע לאחר הבקשה הראשונה
חודש חצות (שעון החוף המערבי) ביום האחרון בחודש חודש (28 ימים) אחרי <StartTime> חודש (28 ימים) אחרי הבקשה הראשונה

עבור type="calendar", צריך לציין את הערך של <StartTime>.

הערך של הסוג rollingwindow לא מופיע בטבלה. מכסות בחלון נע פועלות על ידי הגדרת גודל 'חלון' של מכסה, למשל חלון של שעה אחת או יום אחד. כשמגיעה בקשה חדשה, המדיניות קובעת אם חרגתם מהמכסה ב'חלון' הזמן הקודם.

לדוגמה, אפשר להגדיר חלון של שעתיים שמאפשר 1,000 בקשות. בקשה חדשה נכנסת בשעה 16:45.המדיניות מחשבת את מספר המכסות בחלון של שעתיים האחרונות, כלומר מספר הבקשות מאז השעה 14:45. אם לא חרגתם ממגבלת המכסה בחלון הזמן של שעתיים, הבקשה תאושר.

דקה לאחר מכן, בשעה 16:46, נכנסת בקשה נוספת. עכשיו המדיניות מחשבת את מספר המכסות שנצברו מאז השעה 14:46 כדי לקבוע אם חלה חריגה מהמגבלה.

עבור הסוג rollingwindow, המונה אף פעם לא מתאפס, אלא מחושב מחדש בכל בקשה.

הסבר על ספירת המכסות

כברירת מחדל, מדיניות מכסות שומרת על מונה יחיד, ללא קשר למספר הפעמים שמפנים אליה בשרת proxy ל-API. השם של מונה המכסות מבוסס על המאפיין name של המדיניות.

לדוגמה, יוצרים מדיניות מכסות בשם MyQuotaPolicy עם מגבלה של 5 בקשות וממקמים אותה במספר תהליכים (תהליך א', ב' וג') בשרת ה-proxy של ה-API. למרות שהיא משמשת בכמה תהליכים, היא שומרת על מונה יחיד שמתעדכן על ידי כל המופעים של המדיניות:

  • תהליך א' מופעל –> MyQuotaPolicy מופעל ומונה ההתקדמות שלו = 1
  • תהליך B מופעל –> MyQuotaPolicy מופעל ומונה ההתקדמות שלו = 2
  • תהליך א' מופעל –> MyQuotaPolicy מופעל ומונה שלו = 3
  • תהליך C מופעל –> MyQuotaPolicy מופעל ומונה ההתקדמות שלו = 4
  • תהליך א' מופעל –> MyQuotaPolicy מופעל ומונה ההתקדמות שלו = 5

הבקשה הבאה לכל אחד משלושת הזרמים נדחית כי מונה המכסות הגיע למגבלה שלו.

שימוש באותה מדיניות מכסות ביותר ממקום אחד בתהליך של שרת proxy ל-API, שעלול לגרום בטעות למכסה להיגמר מהר יותר מהצפוי, הוא דפוס שלילי שמתואר בספר הדפוסים השליליים של Apigee Edge.

לחלופין, אפשר להגדיר כמה מדיניות מכסות בשרת ה-proxy של ה-API ולהשתמש בכל מדיניות בנפרד לכל תהליך. לכל מדיניות מכסה יש מונה משלה, שמבוסס על המאפיין name של המדיניות.

לחלופין, אפשר להשתמש ברכיבים <Class> או <Identifier> במדיניות המכסות כדי להגדיר מספר ספירות ייחודיות במדיניות אחת. באמצעות הרכיבים האלה, מדיניות אחת יכולה לשמור על ספירה של מודדים שונים על סמך האפליקציה שמגישה את הבקשה, מפתח האפליקציה שמגיש את הבקשה, מזהה לקוח או מזהה לקוח אחר ועוד. למידע נוסף על השימוש ברכיבים <Class> או <Identifier>, אפשר לעיין בדוגמאות שלמעלה.

סימון זמן

כל השעות של המכסות מוגדרות לפי אזור הזמן זמן אוניברסלי מתואם (UTC).

הסימון של זמן המכסה עוקב אחרי הסימון הסטנדרטי הבינלאומי של תאריכים, כפי שמוגדר בתקן הבינלאומי ISO 8601.

תאריכים מוגדרים כשנה, חודש ויום, בפורמט הבא: YYYY-MM-DD. לדוגמה, הערך 2015-02-04 מייצג את 4 בפברואר 2015.

השעה ביום מוגדרת לפי שעות, דקות ושניות בפורמט הבא: hours:minutes:seconds. לדוגמה, הערך 23:59:59 מייצג את השעה שניות ספורות לפני חצות.

חשוב לדעת שיש שתי שיטות סימון, 00:00:00 ו-24:00:00, כדי להבדיל בין שתי חצות שאפשר לשייך לתאריך אחד. לכן, התאריך והשעה של 2015-02-04 24:00:00 זהים לתאריך ולשעה של 2015-02-05 00:00:00. בדרך כלל עדיף להשתמש באפשרות השנייה.

אחזור הגדרות המכסות מהגדרת המוצר של ה-API

אפשר להגדיר מגבלות מכסות בהגדרות של מוצרי ה-API. המגבלות האלה לא אוכפות את המכסה באופן אוטומטי. במקום זאת, אפשר להפנות להגדרות המכסות של המוצרים במדיניות המכסות. ריכזנו כאן כמה יתרונות של הגדרת מכסה למוצר לצורך הפנייה למדיניות המכסות:

  • אפשר להשתמש בהגדרה אחידה בכללי המדיניות של המכסות בכל שרתי ה-proxy ל-API במוצר ה-API.
  • אפשר לבצע שינויים בסביבת זמן הריצה בהגדרת המכסה במוצר API, ומדיניות המכסות שמפנה לערך תתעדכן באופן אוטומטי.

למידע נוסף על שימוש בהגדרות מכסות ממוצר API, ראו את הדוגמה 'מכסה דינמית' למעלה.

מידע נוסף על הגדרת מוצרי API עם מגבלות מכסות זמין במאמר יצירת מוצרי API.

הפניה לרכיב

בהמשך מפורטים הרכיבים והמאפיינים שאפשר להגדיר במדיניות הזו. חשוב לדעת שחלק משילובי הרכיבים הם בלתי ניתנים לשימוש בו-זמנית או לא נדרשים. בדוגמאות אפשר לראות שימוש ספציפי. המשתנים verifyapikey.VerifyAPIKey.apiproduct.* שמפורטים בהמשך זמינים כברירת מחדל כשמשתמשים במדיניות Verify API Key‏ (אימות מפתח API) שנקראת VerifyAPIKey כדי לבדוק את מפתח ה-API של האפליקציה בבקשה. ערכי המשתנים מגיעים מהגדרות המכסה במוצר ה-API שאליו המפתח משויך, כפי שמתואר בקטע קבלת הגדרות המכסה מהגדרת מוצר ה-API.

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
   <DisplayName>Quota 3</DisplayName>
   <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
   <Allow>
      <Class ref="request.queryparam.time_variable">
        <Allow class="peak_time" count="5000"/>
        <Allow class="off_peak_time" count="1000"/>
      </Class>
   </Allow>
   <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> 
   <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
   <StartTime>2017-7-16 12:00:00</StartTime> 
   <Distributed>false</Distributed> 
   <Synchronous>false</Synchronous> 
   <AsynchronousConfiguration> 
      <SyncIntervalInSeconds>20</SyncIntervalInSeconds> 
      <SyncMessageCount>5</SyncMessageCount> 
   </AsynchronousConfiguration> 
   <Identifier/> 
   <MessageWeight/> 
</Quota>

מאפייני <Quota>

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

המאפיינים הבאים ספציפיים למדיניות הזו.

מאפיין תיאור ברירת מחדל נוכחות
סוג

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

אם משמיטים ערך של type, המונה מתחיל בתחילת הדקה/השעה/היום/השבוע/החודש.

הערכים החוקיים כוללים:

  • calendar: הגדרת מכסה על סמך זמן התחלה מפורש. המונה של המכסות לכל אפליקציה מתעדכן על סמך הערכים של <StartTime>,‏ <Interval> ו-<TimeUnit> שהגדרתם.
  • rollingwindow: הגדרת מכסה שמשתמשת ב'חלון נע' כדי לקבוע את השימוש במכסה. בעזרת rollingwindow, קובעים את גודל החלון באמצעות הרכיבים <Interval> ו-<TimeUnit>. לדוגמה, יום אחד. כשמגיעה בקשה, Edge בודק את השעה המדויקת של הבקשה (נניח 17:01), סופר את מספר הבקשות שהתקבלו מאותה שעה ועד 17:01 ביום הקודם (יום אחד) ומחליט אם חרגתם מהמכסה במהלך החלון הזה.
  • flexi: מגדירים מכסה שגורמת למונה להתחיל כשמתקבלת הודעה ראשונה עם בקשה מאפליקציה, ומאפסת אותו על סמך הערכים של <Interval>, ו-<TimeUnit>.
יומן, קלנדר, קאלנדר אופציונלי

בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:

מאפיין תיאור ברירת מחדל נוכחות
name

השם הפנימי של המדיניות. הערך של המאפיין name יכול לכלול אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול ארוך מ-255 תווים.

אפשר להשתמש ברכיב <DisplayName> כדי להוסיף תווית למדיניות עורך ה-Proxy של ממשק המשתמש לניהול בעל שם אחר בשפה טבעית.

לא רלוונטי חובה
continueOnError

צריך להגדיר את הערך false כדי להחזיר שגיאה כשמדיניות נכשלת. המצב הזה צפוי של רוב כללי המדיניות.

יש להגדיר ל-true כדי שביצוע התהליך יימשך גם לאחר המדיניות נכשל.

false אופציונלי
enabled

צריך להגדיר את הערך true כדי לאכוף את המדיניות.

צריך להגדיר את הערך false כדי להשבית את המדיניות. המדיניות לא תהיה אכיפה גם אם היא ממשיכה להיות מחוברת לזרימה.

true אופציונלי
async

המאפיין הזה הוצא משימוש.

false הוצא משימוש

&lt;DisplayName&gt; רכיב

צריך להשתמש בנוסף למאפיין name כדי להוסיף תווית למדיניות עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

אם משמיטים את הרכיב הזה, הערך של המאפיין name של המדיניות הוא בשימוש.

נוכחות אופציונלי
סוג מחרוזת

אלמנט <Allow>

מציין את מגבלת המספר של המכסה. אם המונה של המדיניות מגיע לערך המגבלה הזה, הקריאות הבאות נדחות עד שהמספר יתאפס.

בהמשך מפורטות שלוש דרכים להגדרת הרכיב <Allow>:

<Allow count="2000"/> 
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> 
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> 

אם מציינים גם את count וגם את countRef, הערך countRef מקבל את העדיפות. אם countRef לא נפתר בזמן הריצה, המערכת תשתמש בערך של count.

ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: מספר שלם

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ספירה

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

לדוגמה, ערך המאפיין count של 100,‏ Interval של 1 ו-TimeUnit של month מציינים מכסה של 100 הודעות בחודש.

2000 אופציונלי
countRef

משמש לציון משתנה תהליך שמכיל את מספר ההודעות במכסה. countRef מקבל עדיפות על פני המאפיין count.

אין אופציונלי

אלמנט <Allow>/<Class>

הרכיב <Class> מאפשר להגדיר תנאי לערך של הרכיב <Allow> על סמך הערך של משתנה תהליך. לכל תג צאצא <Allow> שונה של <Class>, המדיניות שומרת על מונה שונה.

כדי להשתמש ברכיב <Class>, מציינים משתנה תהליך באמצעות המאפיין ref בתג <Class>. לאחר מכן, Edge משתמש בערך של משתנה התהליך כדי לבחור אחד מתגי הצאצאים <Allow> כדי לקבוע את המספר המותאם של המדיניות. Edge מתאים את הערך של משתנה הזרימה למאפיין class של התג <Allow>, כפי שמוצג בהמשך:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

בדוגמה הזו, מונה המכסה הנוכחי נקבע לפי הערך של פרמטר השאילתה time_variable שמוענק עם כל בקשה. הערך של המשתנה הזה יכול להיות peak_time או off_peak_time. אם הפרמטר של השאילתה מכיל ערך לא חוקי, המדיניות מחזירה שגיאה של הפרת מכסה.

ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ref

משמש לציון משתנה תהליך שמכיל את סיווג המכסה של מכסה.

אין חובה

אלמנט <Allow>/<Class>/<Allow>

הרכיב <Allow> מציין את המגבלה של מונה המכסה שמוגדר על ידי הרכיב <Class>. לכל תג צאצא <Allow> שונה של <Class>, המדיניות שומרת על מונה שונה.

לדוגמה:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

בדוגמה הזו, מדיניות המכסות שומרת על שני ספירי מכסות בשם peak_time ו-off_peak_time.

ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
כיתה

מגדיר את השם של מונה המכסה.

אין חובה
ספירה מציין את מגבלת המכסה של המונה. אין חובה

אלמנט <Interval>

משמש לציון מספר שלם (לדוגמה, 1, 2, 5, 60 וכו') שיתווסף ל-TimeUnit שציינתם (דקה, שעה, יום, שבוע או חודש) כדי לקבוע את פרק הזמן שבו Edge מחשב את השימוש במכסה.

לדוגמה, אם הערך של Interval הוא 24 ו-TimeUnit הוא hour, המשמעות היא שהמכסה מחושבת במהלך 24 שעות.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
ברירת מחדל: אין
נוכחות: חובה
סוג: מספר שלם

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ref

משמש לציון משתנה תהליך שמכיל את מרווח הזמן של מכסה. הערך ref מקבל עדיפות על פני ערך מרווח מפורש. אם מציינים גם את ההפניה וגם את הערך, ההפניה מקבלת עדיפות. אם ref לא נפתר בזמן הריצה, המערכת תשתמש בערך.

אין אופציונלי

האלמנט <TimeUnit>

משמש לציון יחידת הזמן הרלוונטית למכסה.

לדוגמה, אם הערך של Interval הוא 24 ו-TimeUnit הוא hour, המשמעות היא שהמכסה מחושבת במהלך 24 שעות.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
ברירת מחדל: אין
נוכחות: חובה
סוג:

מחרוזת. בוחרים מתוך minute, hour, day, week או month.

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ref משמש לציון משתנה תהליך שמכיל את יחידת הזמן של מכסה. הערך ref מקבל עדיפות על פני ערך מרווח מפורש. אם הערך של ref לא יפתר בזמן הריצה, המערכת תשתמש בערך. אין אופציונלי

אלמנט <StartTime>

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

לדוגמה:

<StartTime>2017-7-16 12:00:00</StartTime>
ברירת מחדל: אין
נוכחות: חובה אם הערך של type מוגדר כ-calendar.
סוג:

מחרוזת בפורמט תאריך ושעה לפי ISO 8601.

האלמנט <Distributed>

התקנה של Edge יכולה להשתמש במעבד הודעות אחד או יותר כדי לעבד בקשות. מגדירים את האלמנט הזה לערך true כדי לציין שהמדיניות צריכה לכלול מונה מרכזי ולסנכרן אותו באופן רציף עם כל מעבדי ההודעות. מעבדי ההודעות יכולים להיות באזורי זמינות ו/או באזורים שונים.

אם משתמשים בערך ברירת המחדל false, יכול להיות שתחרגו מהמכסה כי המספר של כל מעבד הודעות לא משותף:

<Distributed>true</Distributed>

כדי להבטיח שהמספרים יסונכרנו ויעודכנו בכל בקשה, מגדירים את <Distributed> ו-<Synchronous> כ-true:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
ברירת מחדל: FALSE
נוכחות: אופציונלי
סוג: בוליאני

אלמנט <Synchronous>

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

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

מרווח הזמן שמוגדרת לו ברירת המחדל לעדכון אסינכרוני הוא 10 שניות. כדי להגדיר את ההתנהגות האסינכרונית הזו, משתמשים ברכיב AsynchronousConfiguration.

<Synchronous>false</Synchronous>
ברירת מחדל: FALSE
נוכחות: אופציונלי
סוג: בוליאני

האלמנט <AsynchronousConfiguration>

מגדיר את מרווח הסנכרון בין ספקי המכסות המפוזרים, כשרכיב ההגדרה של המדיניות <Synchronous> לא נמצא או נמצא ומוגדר לערך false.

אפשר לבצע סנכרון אחרי פרק זמן מסוים או אחרי מספר הודעות מסוים, באמצעות הרכיבים הצאצאים SyncIntervalInSeconds או SyncMessageCount. הן בלעדיות זו לזו. לדוגמה,

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

או

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
ברירת מחדל: SyncIntervalInSeconds = 10 שניות
נוכחות: אופציונלי. המערכת מתעלמת מהערך הזה כשהערך של <Synchronous> מוגדר כ-true.
סוג:

מתחם

האלמנט <AsynchronousConfiguration>/<SyncIntervalInSeconds>

אפשר להשתמש באפשרות הזו כדי לשנות את התנהגות ברירת המחדל, שבה עדכונים אסינכררוניים מתבצעים אחרי מרווח של 10 שניות.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

מרווח הסנכרון צריך להיות 10 שניות לפחות, כפי שמתואר בנושא מגבלות.

ברירת מחדל: 10
נוכחות: אופציונלי
סוג:

מספר שלם

<AsynchronousConfiguration>/<SyncMessageCount> element

מספר הבקשות בכל מעבדי ההודעות של Apigee בין עדכוני המכסות.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

בדוגמה הזו מצוין שמספר המכסות מתעדכן כל 5 בקשות בכל מעבד הודעות של Apigee Edge.

ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג:

מספר שלם

אלמנט <Identifier>

משתמשים ברכיב <Identifier> כדי להגדיר את המדיניות כך שתיווצרו ספירות ייחודיות על סמך משתנה תהליך.

אפשר ליצור ספירות ייחודיות למאפיינים שמוגדרים על ידי משתנה תהליך. לדוגמה, אפשר להשתמש בכתובת האימייל של המפתח כדי לשייך מכסה למפתח ספציפי. אפשר להשתמש במגוון משתנים כדי לזהות מכסה, בין אם משתמשים במשתנים מותאמים אישית ובין אם משתמשים במשתנים מוגדרים מראש, כמו אלה שזמינים במדיניות האימות של מפתחות API. אפשר לעיין גם במאמר העזרה בנושא משתנים.

אם לא משתמשים ברכיב הזה, המדיניות משתמשת בספירה אחת שחלה על המכסה.

הרכיב הזה מתואר גם בפוסט הבא בקהילה של Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג:

מחרוזת

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ref

מציין משתנה תהליך שמזהה את המונה שישמש לבקשה. המזהה יכול להיות כותרת HTTP, פרמטר של שאילתה, פרמטר של טופס או תוכן הודעה שיהיו ייחודיים לכל אפליקציה, משתמש באפליקציה, מפתח אפליקציה, מוצר API או מאפיין אחר.

<Identifier> הנפוץ ביותר לזיהוי ייחודי של אפליקציות הוא client_id. השדה client_id הוא שם נוסף למפתח ה-API, או למפתח הצרכן, שנוצר לאפליקציה כשהיא רשומה בארגון ב-Apigee Edge. אפשר להשתמש במזהה הזה אם הפעלתם ב-API שלכם מדיניות הרשאות של מפתח API או של OAuth.

בנסיבות מסוימות, צריך לאחזר את הגדרות המכסות במקרים שבהם client_id לא זמין, למשל כשאין מדיניות אבטחה. במקרים כאלה, אפשר להשתמש במדיניות של ישות הגישה כדי לאחזר את ההגדרות המתאימות של מוצרי ה-API, ואז לחלץ ערכים באמצעות ExtractVariables, ולאחר מכן להשתמש במשתנה ההקשר שחולץ במדיניות המכסות. מידע נוסף זמין במאמר מדיניות של ישות גישה.

לא רלוונטי אופציונלי

האלמנט <MessageWeight>

משמש לציון המשקל שהוקצה לכל הודעה. משתמשים במשקל ההודעה כדי להגביר את ההשפעה של הודעות בקשה, למשל, הודעות שצורכות יותר משאבי מחשוב בהשוואה להודעות אחרות.

לדוגמה, אתם רוצים לספור הודעות POST כ'כבדות' או יקרות פי שניים מהודעות GET. לכן, צריך להגדיר את MessageWeight ל-2 עבור POST ול-1 עבור GET. אפשר גם להגדיר את MessageWeight ל-0 כדי שהבקשה לא תשפיע על המונה. בדוגמה הזו, אם המכסה היא 10 הודעות לדקה ו-MessageWeight לבקשות POST הוא 2, המכסה תאפשר 5 בקשות POST בכל מרווח של 10 דקות. כל בקשה נוספת, POST או GET, שנשלחת לפני האיפוס של המונה תידחה.

צריך לציין ערך שמייצג את MessageWeight באמצעות משתנה תהליך, וניתן לחלץ אותו מכותרות HTTP, מפרמטרים של שאילתות, מטען נתונים של בקשה מסוג XML או JSON או מכל משתנה תהליך אחר. לדוגמה, אפשר להגדיר אותו בכותרת בשם weight:

<MessageWeight ref="message_weight"/>
ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג:

מספר שלם

משתני תהליך

משתני Flow המוגדרים מראש הבאים מאוכלסים באופן אוטומטי כשמדיניות המכסות מופעלת. מידע נוסף על משתני Flow זמין במאמר חומר עזר בנושא משתנים.

משתנים סוג הרשאות תיאור
ratelimit.{policy_name}.allowed.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את מספר המכסות המותרות
ratelimit.{policy_name}.used.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את המכסה הנוכחית בשימוש במרווח הזמן של המכסה
ratelimit.{policy_name}.available.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את מספר המכסות הזמינות במרווח הזמן של המכסה
ratelimit.{policy_name}.exceed.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את הערך 1 אחרי חריגה מהמכסה.
ratelimit.{policy_name}.total.exceed.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את הערך 1 אחרי חריגה מהמכסה.
ratelimit.{policy_name}.expiry.time ארוך הרשאת קריאה בלבד

הפונקציה מחזירה את שעון UTC באלפיות שנייה, שמגדיר מתי יפוג התוקף של המכסה ומתי מתחיל מרווח הזמן החדש של המכסה.

כשסוג מדיניות המכסה הוא rollingwindow, הערך הזה לא תקף כי תוקף מרווח המכסה לא פג.

ratelimit.{policy_name}.identifier מחרוזת הרשאת קריאה בלבד הפונקציה מחזירה את ההפניה למזהה (הלקוח) שמצורף למדיניות
ratelimit.{policy_name}.class מחרוזת הרשאת קריאה בלבד הפונקציה מחזירה את הכיתה שמשויכת למזהה הלקוח
ratelimit.{policy_name}.class.allowed.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את מספר המכסות המותרות שהוגדרו בכיתה
ratelimit.{policy_name}.class.used.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את המכסה שנעשה בה שימוש בכיתה
ratelimit.{policy_name}.class.available.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את מספר המכסות הזמינות בכיתה
ratelimit.{policy_name}.class.exceed.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את מספר הבקשות שחורגות מהמגבלה בכיתה בטווח המכסה הנוכחי
ratelimit.{policy_name}.class.total.exceed.count ארוך הרשאת קריאה בלבד הפונקציה מחזירה את המספר הכולל של הבקשות שחורגות מהמגבלה בכיתה בכל מרווחי הזמן של המכסות, כלומר סכום הערכים של class.exceed.count בכל מרווחי הזמן של המכסות.
ratelimit.{policy_name}.failed בוליאני הרשאת קריאה בלבד

מציין אם המדיניות נכשלה או לא (true או false).

הפניה לשגיאה

בקטע הזה מתוארים קודי השגיאה והודעות השגיאה שהוחזרו, ומשתני התקלה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בתקלות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.

שגיאות זמן ריצה

השגיאות האלה עשויות להתרחש כשהמדיניות מופעלת.

קוד תקלה סטטוס HTTP סיבה תיקון
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 קורה אם הרכיב <Interval> לא מוגדר במדיניות Quota. הרכיב הזה חובה ומשמש לציון מרווח הזמן שרלוונטי למכסה. מרווח הזמן הערך יכול להיות דקות, שעות, ימים, שבועות או חודשים, כפי שמוגדר באמצעות הרכיב <TimeUnit>.
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 קורה אם הרכיב <TimeUnit> לא מוגדר במדיניות Quota. הרכיב הזה חובה ומשמש לציון יחידת הזמן הרלוונטית למכסה. מרווח הזמן יכול להיות בדקות, שעות, ימים, שבועות או חודשים.
policies.ratelimit.InvalidMessageWeight 500 מתרחש אם הערך של הרכיב <MessageWeight> צוין באמצעות משתנה זרימה לא חוקי (ערך שאינו מספר שלם).
policies.ratelimit.QuotaViolation 500 חרגת מהמיכסה. לא רלוונטי

שגיאות פריסה

שם השגיאה סיבה תיקון
InvalidQuotaInterval אם מרווח המכסה שצוין ברכיב <Interval> הוא לא מספר שלם, הפריסה של שרת ה-proxy ל-API נכשלת. לדוגמה, אם מרווח הזמן במכסה שצוין הוא 0.1 ברכיב <Interval>, אז הפריסה של ה-Proxy ל-API נכשל.
InvalidQuotaTimeUnit אם יחידת הזמן שצוינה ברכיב <TimeUnit> אינה נתמכת, הפריסה של שרת ה-proxy ל-API נכשלת. יחידות הזמן הנתמכות הן minute, hour, day, week וגם month.
InvalidQuotaType אם סוג המכסה שצוין על ידי המאפיין type ב<Quota> לא חוקי, אז הפריסה של שרת ה-proxy ל-API נכשלת. המכסות הנתמכות הן default, calendar, flexi ו-rollingwindow.
InvalidStartTime אם פורמט השעה שצוין ברכיב <StartTime> הוא לא, הפריסה של שרת ה-proxy ל-API נכשלת. הפורמט החוקי הוא yyyy-MM-dd HH:mm:ss, שהוא פורמט תאריך ושעה ב-ISO 8601. עבור לדוגמה, אם השעה שצוינה ברכיב <StartTime> היא 7-16-2017 12:00:00, הפריסה של שרת ה-proxy ל-API נכשלת.
StartTimeNotSupported אם צוין הרכיב <StartTime> שסוג המכסה שלו לא צוין סוג calendar, הפריסה של שרת ה-proxy ל-API נכשלת. הרכיב <StartTime> הוא רק למכסה מסוג calendar. לדוגמה, אם המאפיין type מוגדר אל flexi או rolling window ברכיב <Quota>, ואז אל הפריסה של שרת ה-proxy ל-API נכשלה.
InvalidTimeUnitForDistributedQuota אם הרכיב <Distributed> מוגדר לערך true והרכיב <TimeUnit> מוגדר לערך second – הפריסה של שרת ה-proxy ל-API נכשלת. יחידת הזמן second אינה חוקית עבור מכסה מבוזרת.
InvalidSynchronizeIntervalForAsyncConfiguration אם הערך שצוין לרכיב <SyncIntervalInSeconds> בתוך הרכיב <AsynchronousConfiguration> במדיניות מכסה קטן מאפס, ואז הפריסה של שרת ה-proxy ל-API נכשלה.
InvalidAsynchronizeConfigurationForSynchronousQuota אם הערך של הרכיב <AsynchronousConfiguration> מוגדר כ-true במדיניות מכסה, שגם בהגדרה אסינכרונית באמצעות הרכיב <AsynchronousConfiguration>, לאחר מכן הפריסה של שרת ה-proxy ל-API נכשלה.

משתני כשל

המשתנים האלה מוגדרים כשהמדיניות הזו גורמת לשגיאה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.

משתנים איפה דוגמה
fault.name="fault_name" fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. fault.name Matches "QuotaViolation"
ratelimit.policy_name.failed policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. ratelimit.QT-QuotaPolicy.failed = true

דוגמה לתגובת שגיאה

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.QuotaViolation"
      },
      "faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default"
   }
}

דוגמה לכלל שגוי

<FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "QuotaViolation") </Condition>
        </Step>
        <Condition>ratelimit.Quota-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

סכימות

נושאים קשורים

מדיניות ResetQuota

מדיניות SpikeArrest

השוואה בין מדיניות המכסות, מדיניות מניעת התקפי נתונים (Spike Arrest) ומדיניות הגבלת הקצב בו-זמנית