سیاست سهمیه بندی

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

چه

از سیاست سهمیه‌بندی برای پیکربندی تعداد پیام‌های درخواستی که یک پروکسی API در یک دوره زمانی، مانند دقیقه، ساعت، روز، هفته یا ماه، اجازه می‌دهد، استفاده کنید. می‌توانید سهمیه را برای همه برنامه‌هایی که به پروکسی API دسترسی دارند، یکسان تنظیم کنید، یا می‌توانید سهمیه را بر اساس موارد زیر تنظیم کنید:

  • محصولی که حاوی پروکسی API است
  • برنامه‌ای که API را درخواست می‌کند
  • توسعه دهنده برنامه
  • بسیاری از معیارهای دیگر

از سهمیه برای محافظت در برابر افزایش ناگهانی ترافیک استفاده نکنید. برای این کار، از سیاست Spike Arrest استفاده کنید. به سیاست Spike Arrest مراجعه کنید.

ویدیوها

این ویدیوها مدیریت سهمیه را با سیاست سهمیه‌بندی معرفی می‌کنند:

مقدمه (لبه جدید)

مقدمه (لبه کلاسیک)

سهمیه پویا

توزیع‌شده و همزمان

وزن پیام

تقویم

پنجره غلتان

فلکسی

سهمیه مشروط

متغیرهای جریان

مدیریت خطا

نمونه‌ها

این نمونه‌های کد سیاست، نحوه شروع و پایان دوره‌های سهمیه‌بندی را با موارد زیر نشان می‌دهند:

سهمیه پویای بیشتر

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

در مثال بالا، پروکسی API حاوی سیاست سهمیه‌بندی از یک سیاست 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)
  • یک هدر، پارامتر پرس و جو، پارامتر فرم و غیره

برای هر پروکسی API، می‌توانید یک سیاست سهمیه‌بندی اضافه کنید که یا به متغیری مشابه با تمام سیاست‌های سهمیه‌بندی دیگر در تمام پروکسی‌های دیگر اشاره کند، یا سیاست سهمیه‌بندی می‌تواند به متغیرهای منحصر به فرد برای آن سیاست و پروکسی اشاره کند.

زمان شروع

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

برای یک Quota با type تنظیم شده روی calendar ، باید یک مقدار <StartTime> صریح تعریف کنید. مقدار زمان، زمان GMT است، نه زمان محلی. اگر برای یک policy از نوع calendar مقدار <StartTime> ارائه ندهید، Edge خطا می‌دهد.

شمارنده سهمیه برای هر برنامه بر اساس مقادیر <StartTime> ، <Interval> و <TimeUnit> به‌روزرسانی می‌شود. برای این مثال، سهمیه در ساعت ۱۰:۳۰ صبح به وقت گرینویچ در ۱۸ فوریه ۲۰۱۷ شروع به شمارش می‌کند و هر ۵ ساعت به‌روزرسانی می‌شود. بنابراین، به‌روزرسانی بعدی در ساعت ۳:۳۰ بعد از ظهر به وقت گرینویچ در ۱۸ فوریه ۲۰۱۷ خواهد بود.

شمارنده دسترسی

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

یک پروکسی API به متغیرهای جریان تعیین‌شده توسط سیاست سهمیه دسترسی دارد. شما می‌توانید به این متغیرهای جریان در پروکسی API دسترسی داشته باشید تا پردازش شرطی انجام دهید، سیاست را هنگام نزدیک شدن به حد سهمیه نظارت کنید، شمارنده سهمیه فعلی را به یک برنامه برگردانید یا به دلایل دیگر.

از آنجا که دسترسی به متغیرهای جریان برای این سیاست بر اساس ویژگی name سیاست‌ها است، برای سیاست فوق با نام QuotaPolicy به متغیرهای جریان آن به شکل زیر دسترسی پیدا می‌کنید:

  • ratelimit.QuotaPolicy.allowed.count : تعداد مجاز.
  • ratelimit.QuotaPolicy.used.count : مقدار شمارنده فعلی.
  • ratelimit.QuotaPolicy.expiry.time : زمان UTC زمانی که شمارنده ریست می‌شود.

متغیرهای جریان بسیار دیگری نیز وجود دارند که می‌توانید به آنها دسترسی داشته باشید، همانطور که در زیر توضیح داده شده است.

برای مثال، می‌توانید از سیاست AssignMessage زیر برای بازگرداندن مقادیر متغیرهای Quota flow به عنوان هدرهای پاسخ استفاده کنید:

<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>

از این نمونه کد برای اعمال سهمیه ۱۰،۰۰۰ تماس در هر ساعت استفاده کنید. این خط‌مشی، شمارنده سهمیه را در ابتدای هر ساعت مجدداً تنظیم می‌کند. اگر شمارنده قبل از پایان ساعت به سهمیه ۱۰،۰۰۰ تماس برسد، تماس‌های فراتر از ۱۰،۰۰۰ رد می‌شوند.

برای مثال، اگر شمارنده از 2017-07-08 07:00:00 شروع شود، در ساعت 2017-07-08 08:00:00 (1 ساعت از زمان شروع) به 0 بازنشانی می‌شود. اگر اولین پیام در 2017-07-08 07:35:28 دریافت شود و تعداد پیام‌ها قبل از 2017-07-08 08:00:00 به 10000 برسد، تماس‌های فراتر از آن تعداد تا زمانی که شمارش در ابتدای ساعت بازنشانی شود، رد می‌شوند.

زمان بازنشانی شمارنده بر اساس ترکیب <Interval> و <TimeUnit> است. برای مثال، اگر <Interval> برای <TimeUnit> ساعت روی ۱۲ تنظیم کنید، شمارنده هر دوازده ساعت بازنشانی می‌شود. می‌توانید <TimeUnit> روی دقیقه، ساعت، روز، هفته یا ماه تنظیم کنید.

شما می‌توانید این سیاست را در چندین جای پروکسی API خود ارجاع دهید. برای مثال، می‌توانید آن را روی Proxy PreFlow قرار دهید تا در هر درخواست اجرا شود. یا می‌توانید آن را روی چندین جریان در پروکسی API قرار دهید. اگر از این سیاست در چندین جای پروکسی استفاده کنید، یک شمارنده واحد را حفظ می‌کند که توسط همه نمونه‌های این سیاست به‌روزرسانی می‌شود.

به عنوان یک روش جایگزین، می‌توانید چندین سیاست سهمیه‌بندی را در پروکسی 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>

به طور پیش‌فرض، یک سیاست سهمیه‌بندی، صرف نظر از مبدا درخواست، یک شمارنده واحد برای پروکسی API تعریف می‌کند. به طور جایگزین، می‌توانید از ویژگی <Identifier> به همراه یک سیاست سهمیه‌بندی برای حفظ شمارنده‌های جداگانه بر اساس مقدار ویژگی <Identifier> استفاده کنید.

برای مثال، از تگ <Identifier> برای تعریف شمارنده‌های جداگانه برای هر شناسه کلاینت استفاده کنید. در صورت درخواست به پروکسی شما، برنامه کلاینت یک هدر حاوی clientID ارسال می‌کند، همانطور که در مثال بالا نشان داده شده است.

شما می‌توانید هر متغیر جریانی را به ویژگی <Identifier> مشخص کنید. برای مثال، می‌توانید مشخص کنید که یک پارامتر پرس‌وجو به نام id حاوی شناسه منحصر به فرد باشد:

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

اگر از سیاست VerifyAPIKey برای اعتبارسنجی کلید API یا از سیاست‌های OAuthV2 با توکن‌های OAuth استفاده می‌کنید، می‌توانید از اطلاعات موجود در کلید یا توکن API برای تعریف شمارنده‌های جداگانه برای همان سیاست Quota استفاده کنید. برای مثال، تگ <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 داشته باشد. اگر هدر مقدار نامعتبری داشته باشد، این خط‌مشی خطای نقض سهمیه را برمی‌گرداند.


درباره سیاست سهمیه‌بندی

سهمیه، سهمیه‌ای از پیام‌های درخواست است که یک پروکسی API می‌تواند در یک بازه زمانی، مانند دقیقه، ساعت، روز، هفته یا ماه، مدیریت کند. این سیاست، شمارنده‌هایی را نگهداری می‌کند که تعداد درخواست‌های دریافتی توسط پروکسی API را محاسبه می‌کنند. این قابلیت، ارائه‌دهندگان API را قادر می‌سازد تا محدودیت‌هایی را بر تعداد فراخوانی‌های API انجام شده توسط برنامه‌ها در یک بازه زمانی اعمال کنند. با استفاده از سیاست‌های سهمیه، می‌توانید، به عنوان مثال، برنامه‌ها را به ۱ درخواست در دقیقه یا به ۱۰۰۰۰ درخواست در ماه محدود کنید.

برای مثال، اگر سهمیه به صورت ۱۰،۰۰۰ پیام در ماه تعریف شود، محدود کردن سرعت پس از ۱۰،۰۰۰مین پیام شروع می‌شود. فرقی نمی‌کند که ۱۰،۰۰۰ پیام در روز اول یا آخرین روز آن دوره شمارش شده باشند؛ هیچ ناحیه درخواست اضافی مجاز نیست تا زمانی که شمارنده سهمیه به طور خودکار در پایان بازه زمانی مشخص شده بازنشانی شود، یا تا زمانی که سهمیه به طور صریح با استفاده از سیاست بازنشانی سهمیه بازنشانی شود.

نوعی از سهمیه‌بندی به نام SpikeArrest از افزایش ناگهانی (یا انفجار) ترافیک که می‌تواند ناشی از افزایش ناگهانی استفاده، کلاینت‌های دارای باگ یا حملات مخرب باشد، جلوگیری می‌کند. برای اطلاعات بیشتر در مورد SpikeArrest، به سیاست Spike Arrest مراجعه کنید.

سهمیه‌ها به پروکسی‌های API منفرد اعمال می‌شوند و بین پروکسی‌های API توزیع نمی‌شوند. برای مثال، اگر در یک محصول API سه پروکسی API داشته باشید، یک سهمیه واحد بین هر سه به اشتراک گذاشته نمی‌شود، حتی اگر هر سه از پیکربندی سیاست سهمیه‌بندی یکسانی استفاده کنند.

انواع سیاست سهمیه‌بندی

سیاست سهمیه‌بندی از چندین نوع سیاست مختلف پشتیبانی می‌کند: پیش‌فرض، calendar ، flexi و rollingwindow . هر نوع، زمان شروع و پایان شمارنده‌ی سهمیه‌بندی را مشخص می‌کند، همانطور که در جدول زیر نشان داده شده است:

واحد زمان تنظیم مجدد پیش‌فرض (یا تهی) تنظیم مجدد تقویم تنظیم مجدد فلکسی
دقیقه شروع دقیقه بعدی یک دقیقه پس از <StartTime> یک دقیقه پس از اولین درخواست
ساعت حداکثر تا یک ساعت آینده یک ساعت پس از <StartTime> یک ساعت پس از اولین درخواست
روز نیمه شب به وقت گرینویچ روز جاری ۲۴ ساعت پس از <StartTime> ۲۴ ساعت پس از اولین درخواست
هفته نیمه شب به وقت گرینویچ، یکشنبه در پایان هفته یک هفته پس از <StartTime> یک هفته پس از اولین درخواست
ماه نیمه شب به وقت گرینویچ آخرین روز ماه یک ماه (۲۸ روز) پس از <StartTime> یک ماه (۲۸ روز) پس از اولین درخواست

برای type="calendar" ، باید مقدار <StartTime> را مشخص کنید.

جدول مقدار مربوط به نوع rollingwindow را فهرست نمی‌کند. سهمیه‌بندی پنجره‌ی غلتان با تنظیم اندازه‌ی یک «پنجره» سهمیه، مانند یک پنجره‌ی یک ساعته یا یک روزه، کار می‌کند. وقتی درخواست جدیدی می‌رسد، این سیاست تعیین می‌کند که آیا سهمیه در «پنجره» زمانی گذشته فراتر رفته است یا خیر.

برای مثال، شما یک بازه زمانی دو ساعته تعریف می‌کنید که ۱۰۰۰ درخواست را مجاز می‌داند. یک درخواست جدید ساعت ۴:۴۵ بعد از ظهر می‌رسد. این سیاست تعداد سهمیه را برای بازه زمانی دو ساعت گذشته محاسبه می‌کند، به این معنی که تعداد درخواست‌ها از ساعت ۲:۴۵ بعد از ظهر به بعد. اگر محدودیت سهمیه در آن بازه زمانی دو ساعته تجاوز نکرده باشد، درخواست مجاز است.

یک دقیقه بعد، ساعت ۴:۴۶ بعد از ظهر، درخواست دیگری می‌رسد. اکنون این خط‌مشی تعداد سهمیه را از ساعت ۲:۴۶ بعد از ظهر محاسبه می‌کند تا مشخص شود که آیا از حد مجاز فراتر رفته است یا خیر.

برای نوع rollingwindow ، شمارنده هرگز بازنشانی نمی‌شود، بلکه در هر درخواست دوباره محاسبه می‌شود.

درک شمارنده‌های سهمیه

به طور پیش‌فرض، یک سیاست سهمیه‌بندی، صرف نظر از اینکه چند بار در یک پروکسی API به آن ارجاع می‌دهید، یک شمارنده واحد را نگهداری می‌کند. نام شمارنده سهمیه‌بندی بر اساس ویژگی name سیاست تعیین می‌شود.

برای مثال، شما یک سیاست سهمیه‌بندی با نام MyQuotaPolicy با محدودیت ۵ درخواست ایجاد می‌کنید و آن را روی چندین جریان (جریان A، B و C) در پروکسی API قرار می‌دهید. اگرچه در چندین جریان استفاده می‌شود، اما یک شمارنده واحد را حفظ می‌کند که توسط همه نمونه‌های این سیاست به‌روزرسانی می‌شود:

  • جریان A اجرا می‌شود -> MyQuotaPolicy اجرا می‌شود و شمارنده آن برابر با ۱ است.
  • جریان B اجرا می‌شود -> MyQuotaPolicy اجرا می‌شود و شمارنده آن برابر با ۲ است.
  • جریان A اجرا می‌شود -> MyQuotaPolicy اجرا می‌شود و شمارنده آن برابر با ۳ است.
  • جریان C اجرا می‌شود -> MyQuotaPolicy اجرا می‌شود و شمارنده آن برابر با ۴ می‌شود.
  • جریان A اجرا می‌شود -> MyQuotaPolicy اجرا می‌شود و شمارنده آن برابر با ۵ است.

درخواست بعدی به هر یک از سه جریان رد می‌شود زیرا شمارنده سهمیه به حد مجاز خود رسیده است.

استفاده از یک سیاست سهمیه‌بندی یکسان در بیش از یک مکان در جریان پروکسی API، که می‌تواند ناخواسته باعث شود سهمیه‌بندی سریع‌تر از آنچه انتظار دارید تمام شود، یک ضدالگو است که در کتاب ضدالگوهای Apigee Edge شرح داده شده است.

به عنوان یک روش جایگزین، می‌توانید چندین سیاست سهمیه‌بندی را در پروکسی API خود تعریف کنید و در هر جریان از یک سیاست متفاوت استفاده کنید. هر سیاست سهمیه‌بندی، بر اساس ویژگی name سیاست، شمارنده مخصوص به خود را حفظ می‌کند.

یا، از عناصر <Class> یا <Identifier> در سیاست Quota برای تعریف چندین شمارنده منحصر به فرد در یک سیاست واحد استفاده کنید. با استفاده از این عناصر، یک سیاست واحد می‌تواند شمارنده‌های مختلفی را بر اساس برنامه‌ای که درخواست را انجام می‌دهد، توسعه‌دهنده برنامه‌ای که درخواست را انجام می‌دهد، شناسه کلاینت یا شناسه کلاینت دیگر و موارد دیگر، حفظ کند. برای اطلاعات بیشتر در مورد استفاده از عناصر <Class> یا <Identifier> به مثال‌های بالا مراجعه کنید.

نمادگذاری زمان

تمام زمان‌های سهمیه‌بندی بر اساس منطقه زمانی هماهنگ جهانی (UTC) تنظیم شده‌اند.

نمادگذاری زمان سهمیه‌بندی از نمادگذاری تاریخ استاندارد بین‌المللی تعریف‌شده در استاندارد بین‌المللی ISO 8601 پیروی می‌کند.

تاریخ‌ها به صورت سال، ماه و روز و با فرمت زیر تعریف می‌شوند: YYYY-MM-DD . برای مثال، 2015-02-04 ‎ نشان دهنده ۴ فوریه ۲۰۱۵ است.

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

  • سیاست‌های سهمیه‌بندی می‌توانند از یک تنظیم یکسان در تمام پروکسی‌های API در محصول API استفاده کنند.
  • شما می‌توانید در زمان اجرا، تنظیمات سهمیه‌بندی را روی یک محصول API تغییر دهید، و سیاست‌های سهمیه‌بندی که به طور خودکار به مقدار اشاره می‌کنند، مقادیر سهمیه‌بندی به‌روزرسانی‌شده‌ای دارند.

برای اطلاعات بیشتر در مورد استفاده از تنظیمات سهمیه از یک محصول API، به مثال "سهمیه پویا" در بالا مراجعه کنید .

برای اطلاعات بیشتر در مورد پیکربندی محصولات API با محدودیت‌های سهمیه، به بخش ایجاد محصولات API مراجعه کنید.

مرجع عنصر

در ادامه عناصر و ویژگی‌هایی که می‌توانید در این خط‌مشی پیکربندی کنید، آمده است. توجه داشته باشید که برخی از ترکیبات عناصر متقابلاً منحصر به فرد هستند یا مورد نیاز نیستند. برای کاربرد خاص، به نمونه‌ها مراجعه کنید. متغیرهای verifyapikey.VerifyAPIKey.apiproduct.* زیر به طور پیش‌فرض در دسترس هستند، زمانی که از یک خط‌مشی Verify API Key به نام "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 به زمان دقیق درخواست (مثلاً ۵:۰۱ بعد از ظهر) نگاه می‌کند، تعداد درخواست‌هایی را که بین آن زمان و ۵:۰۱ بعد از ظهر روز قبل (۱ روز) آمده‌اند، می‌شمارد و تعیین می‌کند که آیا سهمیه در طول آن پنجره تجاوز کرده است یا خیر.
  • flexi : سهمیه‌ای را پیکربندی می‌کند که باعث می‌شود شمارنده با دریافت اولین پیام درخواست از یک برنامه شروع به کار کند و بر اساس مقادیر <Interval>, و <TimeUnit> تنظیم مجدد شود.
تقویم اختیاری

جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:

صفت توضیحات پیش فرض حضور
name

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <مجاز>

محدودیت تعداد برای سهمیه را مشخص می‌کند. اگر شمارنده‌ی سیاست به این مقدار محدود برسد، فراخوانی‌های بعدی تا زمان تنظیم مجدد شمارنده رد می‌شوند.

در زیر سه روش برای تنظیم عنصر <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 ۱۰۰، Interval ۱ و واحد TimeUnit ماه، سهمیه ۱۰۰ پیام در ماه را مشخص می‌کند.

۲۰۰۰ اختیاری
تعداد مرجع

برای مشخص کردن یک متغیر جریان حاوی تعداد پیام برای سهمیه استفاده کنید. 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>

در این مثال، شمارنده سهمیه فعلی توسط مقدار پارامتر query مربوط به time_variable که با هر درخواست ارسال می‌شود، تعیین می‌شود. آن متغیر می‌تواند مقدار peak_time یا off_peak_time داشته باشد. اگر پارامتر query حاوی مقدار نامعتبری باشد، این خط‌مشی خطای نقض سهمیه را برمی‌گرداند.

پیش‌فرض: ناموجود
حضور: اختیاری
نوع: ناموجود

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع

برای مشخص کردن یک متغیر جریان حاوی کلاس quota برای یک quota استفاده کنید.

هیچ کدام مورد نیاز

عنصر <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 را نگهداری می‌کند.

پیش‌فرض: ناموجود
حضور: اختیاری
نوع: ناموجود

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
کلاس

نام شمارنده سهمیه را تعریف می‌کند.

هیچ کدام مورد نیاز
بشمار محدودیت سهمیه برای شمارنده را مشخص می‌کند. هیچ کدام مورد نیاز

عنصر <فاصله>

برای مشخص کردن یک عدد صحیح (مثلاً ۱، ۲، ۵، ۶۰ و غیره) که با TimeUnit که مشخص می‌کنید (دقیقه، ساعت، روز، هفته یا ماه) جفت می‌شود تا یک دوره زمانی را تعیین کند که در طی آن Edge سهمیه استفاده را محاسبه می‌کند، استفاده کنید.

برای مثال، یک Interval 24 با TimeUnit hour به این معنی است که سهمیه در طول ۲۴ ساعت محاسبه خواهد شد.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
پیش‌فرض: هیچ کدام
حضور: مورد نیاز
نوع: عدد صحیح

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع

برای مشخص کردن یک متغیر جریان حاوی بازه برای سهمیه استفاده می‌شود. ref نسبت به یک مقدار بازه صریح اولویت دارد. اگر هم مرجع و هم مقدار مشخص شده باشند، مرجع اولویت دارد. اگر ref در زمان اجرا حل نشود، از مقدار استفاده می‌شود.

هیچ کدام اختیاری

عنصر <TimeUnit>

برای مشخص کردن واحد زمانی مربوط به سهمیه استفاده کنید.

برای مثال، یک Interval 24 با TimeUnit hour به این معنی است که سهمیه در طول ۲۴ ساعت محاسبه خواهد شد.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
پیش‌فرض: هیچ کدام
حضور: مورد نیاز
نوع:

رشته. از بین minute ، hour ، day ، week یا month انتخاب کنید.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع برای مشخص کردن یک متغیر جریان حاوی واحد زمانی برای سهمیه استفاده می‌شود. ref بر یک مقدار بازه صریح اولویت دارد. اگر ref در زمان اجرا حل نشود، از مقدار آن استفاده می‌شود. هیچ کدام اختیاری

عنصر <زمان شروع>

وقتی type روی calendar, تاریخ و زمانی را مشخص می‌کند که شمارنده سهمیه شروع به شمارش می‌کند، صرف نظر از اینکه آیا درخواستی از هر برنامه‌ای دریافت شده است یا خیر.

برای مثال:

<StartTime>2017-7-16 12:00:00</StartTime>
پیش‌فرض: هیچ کدام
حضور: وقتی type روی calendar تنظیم شده باشد، الزامی است.
نوع:

رشته‌ای با فرمت تاریخ و زمان ISO 8601 .

عنصر <توزیع‌شده>

نصب Edge می‌تواند از یک یا چند پردازنده پیام برای پردازش درخواست‌ها استفاده کند. این عنصر را روی true تنظیم کنید تا مشخص شود که این سیاست باید یک شمارنده مرکزی را حفظ کند و به طور مداوم آن را در تمام پردازنده‌های پیام همگام‌سازی کند. پردازنده‌های پیام می‌توانند در مناطق و/یا مناطق مختلف در دسترس باشند.

اگر از مقدار پیش‌فرض false استفاده کنید، ممکن است از سهمیه خود تجاوز کنید زیرا تعداد برای هر پردازنده پیام به اشتراک گذاشته نمی‌شود:

<Distributed>true</Distributed>

برای تضمین همگام‌سازی و به‌روزرسانی شمارنده‌ها در هر درخواست، <Distributed> و <Synchronous> را روی true تنظیم کنید:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
پیش‌فرض: نادرست
حضور: اختیاری
نوع: بولی

عنصر <همزمان>

برای به‌روزرسانی همزمان شمارنده سهمیه توزیع‌شده، روی true تنظیم کنید. این بدان معناست که به‌روزرسانی شمارنده همزمان با بررسی سهمیه در درخواستی به API انجام می‌شود. اگر ضروری است که هیچ فراخوانی API روی سهمیه مجاز نباشد، روی true تنظیم کنید.

برای به‌روزرسانی غیرهمزمان شمارنده سهمیه، آن را روی false تنظیم کنید. این بدان معناست که بسته به زمان به‌روزرسانی غیرهمزمان شمارنده سهمیه در مخزن مرکزی، ممکن است برخی از فراخوانی‌های API که از سهمیه تجاوز می‌کنند، انجام شوند. با این حال، با تأثیرات بالقوه عملکرد مرتبط با به‌روزرسانی‌های همزمان مواجه نخواهید شد.

فاصله زمانی پیش‌فرض به‌روزرسانی ناهمزمان ۱۰ ثانیه است. از عنصر AsynchronousConfiguration برای پیکربندی این رفتار ناهمزمان استفاده کنید.

<Synchronous>false</Synchronous>
پیش‌فرض: نادرست
حضور: اختیاری
نوع: بولی

عنصر <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 ثانیه باشد، همانطور که در مبحث محدودیت‌ها توضیح داده شده است.

پیش‌فرض: ۱۰
حضور: اختیاری
نوع:

عدد صحیح

عنصر <AsynchronousConfiguration>/<SyncMessageCount>

تعداد درخواست‌ها در تمام پردازنده‌های پیام Apigee بین به‌روزرسانی‌های سهمیه را مشخص می‌کند.

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

این مثال مشخص می‌کند که تعداد سهمیه هر 5 درخواست در هر پردازنده پیام Apigee Edge به‌روزرسانی می‌شود.

پیش‌فرض: ناموجود
حضور: اختیاری
نوع:

عدد صحیح

عنصر <شناسه>

از عنصر <Identifier> برای پیکربندی سیاست ایجاد شمارنده‌های منحصر به فرد بر اساس یک متغیر جریان استفاده کنید.

شما می‌توانید شمارنده‌های منحصر به فردی برای ویژگی‌های تعریف شده توسط یک متغیر جریان ایجاد کنید. به عنوان مثال، می‌توانید از آدرس ایمیل توسعه‌دهنده برای مرتبط کردن یک سهمیه به یک توسعه‌دهنده خاص استفاده کنید. می‌توانید از متغیرهای متنوعی برای شناسایی یک سهمیه استفاده کنید، چه از متغیرهای سفارشی استفاده کنید و چه از متغیرهای از پیش تعریف شده، مانند متغیرهای موجود در خط‌مشی تأیید کلید API . همچنین به مرجع متغیرها مراجعه کنید.

اگر از این عنصر استفاده نکنید، این سیاست از یک شمارنده واحد استفاده می‌کند که بر اساس سهمیه اعمال می‌شود.

این عنصر همچنین در پست زیر از انجمن Apigee با عنوان «شناسه سهمیه در سیاست‌های مختلف» مورد بحث قرار گرفته است.

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
پیش‌فرض: ناموجود
حضور: اختیاری
نوع:

رشته

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع

یک متغیر جریان را مشخص می‌کند که شمارنده مورد استفاده برای درخواست را مشخص می‌کند. این شناسه می‌تواند یک هدر HTTP، پارامتر پرس‌وجو، پارامتر فرم یا محتوای پیام باشد که برای هر برنامه، کاربر برنامه، توسعه‌دهنده برنامه، محصول API یا سایر ویژگی‌ها منحصر به فرد است.

<Identifier> که معمولاً برای شناسایی منحصر به فرد برنامه‌ها استفاده می‌شود، client_id است. client_id نام دیگری برای کلید API یا کلید مصرف‌کننده است که هنگام ثبت یک برنامه در یک سازمان در Apigee Edge برای آن ایجاد می‌شود. در صورتی که سیاست‌های کلید API یا مجوز OAuth را برای API خود فعال کرده باشید، می‌توانید از این شناسه استفاده کنید.

در برخی شرایط، تنظیمات سهمیه باید در جایی که هیچ client_id در دسترس نیست، بازیابی شوند، مانند زمانی که هیچ سیاست امنیتی وجود ندارد. در این شرایط، می‌توانید از سیاست Access Entity برای بازیابی تنظیمات محصول API مناسب استفاده کنید، سپس با استفاده از ExtractVariables مقادیر را استخراج کنید و سپس از متغیر زمینه استخراج شده در سیاست Quota استفاده کنید. برای اطلاعات بیشتر، به سیاست Access Entity مراجعه کنید.

ناموجود اختیاری

عنصر <وزن پیام>

برای تعیین وزن اختصاص داده شده به هر پیام استفاده کنید. از وزن پیام برای افزایش تأثیر پیام‌های درخواستی که، برای مثال، منابع محاسباتی بیشتری نسبت به سایرین مصرف می‌کنند، استفاده کنید.

برای مثال، می‌خواهید پیام‌های POST را دو برابر "سنگین" یا گران‌تر از پیام‌های GET بشمارید. بنابراین، MessageWeight را برای POST روی ۲ و برای GET روی ۱ تنظیم می‌کنید. حتی می‌توانید MessageWeight را روی ۰ تنظیم کنید تا درخواست روی شمارنده تأثیر نگذارد. در این مثال، اگر سهمیه ۱۰ پیام در دقیقه باشد و MessageWeight برای درخواست‌های POST برابر 2 باشد، سهمیه اجازه ۵ درخواست POST را در هر فاصله ۱۰ دقیقه‌ای می‌دهد. هر درخواست اضافی، POST یا GET، قبل از تنظیم مجدد شمارنده رد می‌شود.

مقداری که نشان‌دهنده‌ی MessageWeight است باید توسط یک متغیر جریان مشخص شود و می‌تواند از هدرهای HTTP، پارامترهای پرس‌وجو، یک درخواست XML یا JSON یا هر متغیر جریان دیگری استخراج شود. برای مثال، شما آن را در یک هدر به نام weight تنظیم می‌کنید:

<MessageWeight ref="message_weight"/>
پیش‌فرض: ناموجود
حضور: اختیاری
نوع:

عدد صحیح

متغیرهای جریان

متغیرهای جریان از پیش تعریف شده زیر هنگام اجرای سیاست سهمیه بندی به طور خودکار پر می شوند. برای اطلاعات بیشتر در مورد متغیرهای جریان، به مرجع متغیرها مراجعه کنید.

متغیرها نوع مجوزها توضیحات
‎ratelimit.{policy_name}.allowed.count‎‏ بلند فقط خواندنی تعداد سهمیه مجاز را برمی‌گرداند
ratelimit.{policy_name}.used.count بلند فقط خواندنی سهمیه فعلی استفاده شده در یک بازه سهمیه را برمی‌گرداند.
تعداد در دسترس.{ratelimit.{policy_name}} بلند فقط خواندنی تعداد سهمیه موجود در بازه سهمیه را برمی‌گرداند.
ratelimit.{policy_name}.exceed.count بلند فقط خواندنی پس از عبور از سهمیه، عدد ۱ را برمی‌گرداند.
ratelimit.{policy_name}.total.exceed.count بلند فقط خواندنی پس از عبور از سهمیه، عدد ۱ را برمی‌گرداند.
محدودیت نرخ {policy_name}.expiry.time بلند فقط خواندنی

زمان UTC را بر حسب میلی‌ثانیه برمی‌گرداند که تعیین می‌کند سهمیه چه زمانی منقضی می‌شود و بازه سهمیه جدید شروع می‌شود.

وقتی نوع سیاست سهمیه‌بندی rollingwindow باشد، این مقدار معتبر نیست زیرا بازه سهمیه‌بندی هرگز منقضی نمی‌شود.

شناسه‌ی ‎{policy_name}‎ با محدودیت نرخ رشته فقط خواندنی مرجع شناسه (کلاینت) متصل به سیاست را برمی‌گرداند.
کلاس ratelimit.{policy_name} رشته فقط خواندنی کلاس مرتبط با شناسه کلاینت را برمی‌گرداند.
‎{policy_name}.class.allowed.count‎‏ ‎میزان محدودیت تعداد بلند فقط خواندنی تعداد سهمیه مجاز تعریف شده در کلاس را برمی‌گرداند.
ratelimit.{policy_name}.class.used.count بلند فقط خواندنی سهمیه استفاده شده در یک کلاس را برمی‌گرداند.
تعداد.کلاس.موجود.حد_نرخ{policy_name} بلند فقط خواندنی تعداد سهمیه‌های موجود در کلاس را برمی‌گرداند.
ratelimit.{policy_name}.class.exceed.count بلند فقط خواندنی تعداد درخواست‌هایی را که از حد مجاز کلاس در بازه سهمیه فعلی تجاوز می‌کنند، برمی‌گرداند.
ratelimit.{policy_name}.class.total.exceed.count بلند فقط خواندنی تعداد کل درخواست‌هایی را که از حد مجاز کلاس در تمام بازه‌های سهمیه تجاوز می‌کنند، برمی‌گرداند، بنابراین مجموع class.exceed.count برای تمام بازه‌های سهمیه است.
محدودیت نرخ.{policy_name}.شکست خورد بولی فقط خواندنی

نشان می‌دهد که آیا سیاست شکست خورده است یا خیر (درست یا نادرست).

مرجع خطا

این بخش کدهای خطا و پیام‌های خطایی را که برگردانده می‌شوند و متغیرهای خطا را که توسط Edge تنظیم می‌شوند، هنگامی که این خط‌مشی خطا را راه‌اندازی می‌کند، توضیح می‌دهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.

خطاهای زمان اجرا

این خطاها ممکن است هنگام اجرای سیاست رخ دهند.

کد خطا وضعیت HTTP علت رفع کنید
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 اگر عنصر <Interval> در خط مشی Quota تعریف نشده باشد رخ می دهد. این عنصر اجباری است و برای تعیین فاصله زمانی قابل اعمال برای سهمیه استفاده می شود. فاصله زمانی می تواند دقیقه، ساعت، روز، هفته یا ماه باشد که با عنصر <TimeUnit> تعریف شده است.
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 اگر عنصر <TimeUnit> در خط مشی Quota تعریف نشده باشد رخ می دهد. این عنصر اجباری است و برای تعیین واحد زمان قابل اعمال در سهمیه استفاده می شود. فاصله زمانی می تواند بر حسب دقیقه، ساعت، روز، هفته یا ماه باشد.
policies.ratelimit.InvalidMessageWeight 500 اگر مقدار عنصر <MessageWeight> مشخص شده از طریق متغیر جریان نامعتبر باشد (مقدار غیر صحیح) رخ می دهد.
policies.ratelimit.QuotaViolation 500 از حد مجاز فراتر رفت. N/A

خطاهای استقرار

نام خطا علت رفع کنید
InvalidQuotaInterval اگر بازه سهمیه مشخص شده در عنصر <Interval> یک عدد صحیح نباشد، در آن صورت استقرار پراکسی API با شکست مواجه می شود. به عنوان مثال، اگر بازه سهمیه مشخص شده 0.1 در عنصر <Interval> باشد، در آن صورت استقرار پروکسی API با شکست مواجه می شود.
InvalidQuotaTimeUnit اگر واحد زمانی مشخص شده در عنصر <TimeUnit> پشتیبانی نشود، استقرار پروکسی API با شکست مواجه می شود. واحدهای زمانی پشتیبانی شده عبارتند از minute ، hour ، day ، week و month .
InvalidQuotaType اگر نوع سهمیه مشخص شده توسط ویژگی type در عنصر <Quota> نامعتبر باشد، در این صورت استقرار پراکسی API ناموفق است. انواع سهمیه پشتیبانی شده default , calendar , flexi و rollingwindow هستند .
InvalidStartTime اگر قالب زمان مشخص شده در عنصر <StartTime> نامعتبر باشد، استقرار پروکسی API با شکست مواجه می شود. قالب معتبر yyyy-MM-dd HH:mm:ss است که فرمت تاریخ و زمان ISO 8601 است. به عنوان مثال، اگر زمان مشخص شده در عنصر <StartTime> 7-16-2017 12:00:00 باشد، استقرار پراکسی API با شکست مواجه می شود.
StartTimeNotSupported اگر عنصر <StartTime> مشخص شده باشد که نوع سهمیه آن از نوع calendar نیست، در این صورت استقرار پراکسی API با شکست مواجه می شود. عنصر <StartTime> فقط برای نوع سهمیه calendar پشتیبانی می شود. به عنوان مثال، اگر ویژگی type در عنصر <Quota> روی پنجره flexi یا rolling window تنظیم شده باشد، استقرار پراکسی API با شکست مواجه می‌شود.
InvalidTimeUnitForDistributedQuota اگر عنصر <Distributed> روی true و عنصر <TimeUnit> روی second تنظیم شود، استقرار پراکسی API با شکست مواجه می شود. واحد زمانی second برای سهمیه توزیع شده نامعتبر است.
InvalidSynchronizeIntervalForAsyncConfiguration اگر مقدار تعیین‌شده برای عنصر <SyncIntervalInSeconds> در عنصر <AsynchronousConfiguration> در یک خط‌مشی Quota کمتر از صفر باشد، در آن صورت استقرار پراکسی API با شکست مواجه می‌شود.
InvalidAsynchronizeConfigurationForSynchronousQuota اگر مقدار عنصر <AsynchronousConfiguration> در یک خط مشی Quota روی true تنظیم شود، که همچنین دارای پیکربندی ناهمزمان است که با استفاده از عنصر <AsynchronousConfiguration> تعریف شده است، در این صورت استقرار پراکسی API با شکست مواجه می شود.

متغیرهای خطا

این متغیرها زمانی تنظیم می شوند که این خط مشی خطایی را ایجاد کند. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.

متغیرها کجا مثال
fault.name=" fault_name " fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. 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>

طرحواره‌ها

مباحث مرتبط

سیاست بازنشانی سهمیه

سیاست SpikeArrest

مقایسه سیاست‌های سهمیه‌بندی، توقف ناگهانی و محدودیت نرخ همزمان

،

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

چه

از سیاست سهمیه‌بندی برای پیکربندی تعداد پیام‌های درخواستی که یک پروکسی API در یک دوره زمانی، مانند دقیقه، ساعت، روز، هفته یا ماه، اجازه می‌دهد، استفاده کنید. می‌توانید سهمیه را برای همه برنامه‌هایی که به پروکسی API دسترسی دارند، یکسان تنظیم کنید، یا می‌توانید سهمیه را بر اساس موارد زیر تنظیم کنید:

  • محصولی که حاوی پروکسی API است
  • برنامه‌ای که API را درخواست می‌کند
  • توسعه دهنده برنامه
  • بسیاری از معیارهای دیگر

از سهمیه برای محافظت در برابر افزایش ناگهانی ترافیک استفاده نکنید. برای این کار، از سیاست Spike Arrest استفاده کنید. به سیاست Spike Arrest مراجعه کنید.

ویدیوها

این ویدیوها مدیریت سهمیه را با سیاست سهمیه‌بندی معرفی می‌کنند:

مقدمه (لبه جدید)

مقدمه (لبه کلاسیک)

سهمیه پویا

توزیع‌شده و همزمان

وزن پیام

تقویم

پنجره غلتان

فلکسی

سهمیه مشروط

متغیرهای جریان

مدیریت خطا

نمونه‌ها

این نمونه‌های کد سیاست، نحوه شروع و پایان دوره‌های سهمیه‌بندی را با موارد زیر نشان می‌دهند:

سهمیه پویای بیشتر

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

در مثال بالا، پروکسی API حاوی سیاست سهمیه‌بندی از یک سیاست 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)
  • یک هدر، پارامتر پرس و جو، پارامتر فرم و غیره

For each API proxy, you can add a Quota policy that either references the same variable as all the other Quota policies in all the other proxies, or the Quota policy can reference variables unique for that policy and proxy.

زمان شروع

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

For a Quota with type set to calendar , you must define an explicit <StartTime> value. The time value is the GMT time, not local time. If you do not provide a <StartTime> value for a policy of type calendar , Edge issues an error.

The Quota counter for each app is refreshed based on the <StartTime> , <Interval> , and <TimeUnit> values. For this example, the Quota begins counting at 10:30 am GMT on February 18, 2017, and refreshes every 5 hours. Therefore, the next refresh is at 3:30 pm GMT on February 18, 2017.

شمارنده دسترسی

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

An API proxy has access to the flow variables set by the Quota policy. You can access these flow variables in the API proxy to perform conditional processing, monitor the policy as it gets close to the quota limit, return the current quota counter to an app, or for other reasons.

Because access the flow variables for the policy is based on the policies name attribute, for the policy above named QuotaPolicy you access its flow variables in the form:

  • ratelimit.QuotaPolicy.allowed.count : Allowed count.
  • ratelimit.QuotaPolicy.used.count : Current counter value.
  • ratelimit.QuotaPolicy.expiry.time : UTC time when the counter resets.

There are many other flow variables that you can access, as described below.

For example, you can use the following AssignMessage policy to return the values of Quota flow variables as response headers:

<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>

First Request

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

Use this sample code to enforce a quota of 10,000 calls per one hour. The policy resets the quota counter at the top of each hour. If the counter reaches the 10,000-call quota before the end of the hour, calls beyond 10,000 are rejected.

For example, if the counter starts at 2017-07-08 07:00:00 , then it resets to 0 at 2017-07-08 08:00:00 (1 hour from the start time). If the first message is received at 2017-07-08 07:35:28 and the message count reaches 10,000 before 2017-07-08 08:00:00 , calls beyond that count are rejected until the count resets at the top of the hour.

The counter reset time is based on the combination of <Interval> and <TimeUnit> . For example, if you set <Interval> to 12 for a <TimeUnit> of hour, then the counter resets every twelve hours. You can set <TimeUnit> to minute, hour, day, week, or month.

You can reference this policy in multiple places in your API proxy. For example, you could place it on the Proxy PreFlow so it is executed on on every request. Or, you could place it on multiple flows in the API proxy. If you use this policy in multiple places in the proxy, it maintains a single counter that is updated by all instances of the policy.

Alternatively, you can define multiple Quota policies in your API proxy. Each Quota policy maintains its own counter, based on the name attribute of the policy.

Set identifier

<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>

By default, a Quota policy defines a single counter for the API proxy, regardless of the origin of a request. Alternatively, you can use the <Identifier> attribute with a Quota policy to maintain separate counters based on the value of the <Identifier> attribute.

For example, use the <Identifier> tag to define separate counters for every client ID. On a request to your proxy, the client app then passes a header containing the clientID , as shown in the example above.

You can specify any flow variable to the <Identifier> attribute. For example, you could specify that a query param named id contains the unique identifier:

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

If you use the VerifyAPIKey policy to validate the API key, or the OAuthV2 policies with OAuth tokens, you can use information in the API key or token to define individual counters for the same Quota policy. For example, the following <Identifier> tag uses the client_id flow variable of a VerifyAPIKey policy named verify-api-key :

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

Each unique client_id value now defines its own counter in the Quota policy.

کلاس

<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>

You can set Quota limits dynamically by using a class-based Quota count. In this example, the quota limit is determined by the value of the developer_segment header passed with each request. That variable can have a value of platinum or silver . If the header has an invalid value, the policy returns a quota violation error.


About the Quota policy

A Quota is an allotment of request messages that an API proxy can handle over a time period, such as minute, hour, day, week, or month. The policy maintains counters that tally the number of requests received by the API proxy. This capability enables API providers to enforce limits on the number of API calls made by apps over an interval of time. Using Quota policies you can, for example, limit apps to 1 request per minute, or to 10,000 requests per month.

For example, if a Quota is defined as 10,000 messages per month, rate-limiting begins after the 10,000th message. It doesn't matter whether 10,000 messages were counted on the first day or the last day of that period; no additional requests area allowed until the Quota counter automatically resets at the end of the specified time interval, or until the Quota is explicitly reset using Reset Quota policy .

A variation on Quota called SpikeArrest prevents traffic spikes (or bursts) that can be caused by a sudden increase in usage, buggy clients, or malicious attacks. For more information on SpikeArrest, see Spike Arrest policy .

Quotas apply to individual API proxies and are not distributed among API proxies. For example, if you have three API proxies in an API product, a single quota is not shared across all three even if all three use the same quota policy configuration.

Quota policy types

The Quota policy supports several different types of policies: default, calendar , flexi , and rollingwindow . Each type defines when the quota counter starts and when it resets, as shown in the following table:

واحد زمان Default (or null) reset calendar reset flexi reset
دقیقه Start of next minute One minute after <StartTime> One minute after first request
ساعت Top of next hour One hour after <StartTime> One hour after first request
روز Midnight GMT of the current day 24 hours after <StartTime> 24 hours after first request
هفته Midnight GMT Sunday at the end of the week One week after <StartTime> One week after first request
ماه Midnight GMT of the last day of the month One month (28 days) after <StartTime> One month (28 days) after first request

For type="calendar" , you must specify the value of <StartTime> .

The table does not list the value for the rollingwindow type. Rolling window quotas work by setting the size of a quota "window", such as a one hour or one day window. When a new request comes in, the policy determines if the quota has been exceeded in the past "window" of time.

For example, you define a two hour window that allows 1000 requests. A new request comes in at 4:45 PM.The policy calculates the quota count for the past two hour window, meaning the number of requests since 2:45 PM. If the quota limit has not been exceeded in that two-hour window, then the request is allowed.

One minute later, at 4:46 PM, another request comes in. Now the policy calculates the quota count since 2:46 PM to determine if the limit has been exceeded.

For the rollingwindow type, the counter never resets, but is recalculated on each request.

Understanding quota counters

By default, a Quota policy maintains a single counter, regardless of how many times you reference it in an API proxy. The name of the quota counter is based on the name attribute of the policy.

For example, you create a Quota policy named MyQuotaPolicy with a limit of 5 requests and place it on multiple flows (Flow A, B, and C) in the API proxy. Even though it is used in multiple flows, it maintains a single counter that is updated by all instances of the policy:

  • Flow A is executed -> MyQuotaPolicy is executed and its counter = 1
  • Flow B is executed -> MyQuotaPolicy is executed and its counter = 2
  • Flow A is executed -> MyQuotaPolicy is executed and its counter = 3
  • Flow C is executed -> MyQuotaPolicy is executed and its counter = 4
  • Flow A is executed -> MyQuotaPolicy is executed and its counter = 5

The next request to any of the three flows is rejected because the quota counter has reached its limit.

Using the same Quota policy in more than one place in an API proxy flow, which can unintentionally cause Quota to run out faster than you expected, is an anti-pattern described in The Book of Apigee Edge Antipatterns .

Alternatively, you can define multiple Quota policies in your API proxy and use a different policy in each flow. Each Quota policy maintains its own counter, based on the name attribute of the policy.

Or, use the <Class> or <Identifier> elements in the Quota policy to define multiple, unique counters in a single policy. By using these elements, a single policy can maintain different counters based on the app making the request, the app developer making the request, a client ID or other client identifier, and more. See the examples above for more information on using the <Class> or <Identifier> elements.

نمادگذاری زمان

All Quota times are set to the Coordinated Universal Time (UTC) time zone.

Quota time notation follows the international standard date notation defined in International Standard ISO 8601 .

Dates are defined as year, month, and day, in the following format: YYYY-MM-DD . For example, 2015-02-04 represents February 4, 2015.

Time of day is defined as hours, minutes, and seconds in the following format: hours:minutes:seconds . For example, 23:59:59 represents the time one second before midnight.

Note that two notations, 00:00:00 and 24:00:00 , are available to distinguish the two midnights that can be associated with one date. Therefore 2015-02-04 24:00:00 is the same date and time as 2015-02-05 00:00:00 . The latter is usually the preferred notation.

Getting quota settings from the API product configuration

You can set quota limits in API product configurations. Those limits don't automatically enforce quota. Instead, you can reference product quota settings in a quota policy. Here are some advantages of setting a quota on the product for quota policies to reference:

  • Quota policies can use a uniform setting across all API proxies in the API product.
  • You can make runtime changes to the quota setting on an API product, and quota policies that reference the value automatically have updated quota values.

For more information on using quota settings from an API product, see the "Dynamic Quota" example above. .

For info on configuring API products with quota limits, see Create API products .

مرجع عنصر

Following are elements and attributes you can configure on this policy. Note that some element combinations are mutually exclusive or not required. See the samples for specific usage. The verifyapikey.VerifyAPIKey.apiproduct.* variables below are available by default when a Verify API Key policy called "VerifyAPIKey" is used to check the app's API key in the request. The variable values come from the quota settings on the API product that the key is associated with, as described in Getting quota settings from the API product configuration .

<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> attributes

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

The following attributes are specific to this policy.

ویژگی توضیحات پیش‌فرض حضور
نوع

Use to determine when and how the quota counter checks quota usage. See Quota policy types for more information.

If you omit a type value, the counter begins at the beginning of the minute/hour/day/week/month.

مقادیر معتبر عبارتند از:

  • calendar : Configure a quota based on an explicit start time. The Quota counter for each app is refreshed based on the <StartTime> , <Interval> , and <TimeUnit> values that you set.
  • rollingwindow : Configure a quota that uses a "rolling window" to determine quota usage. With rollingwindow , you determine the size of the window with the <Interval> and <TimeUnit> elements; for example, 1 day. When a request comes in, Edge looks at the exact time of the request (say 5:01pm), counts the number of requests that came in between then and 5:01pm the previous day (1 day), and determines whether or not quota has been exceeded during that window.
  • flexi : Configure a quota that causes the counter to begin when the first request message is received from an app, and resets based on the <Interval>, and <TimeUnit> values.
تقویم اختیاری

جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:

صفت توضیحات پیش فرض حضور
name

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

<Allow> element

Specifies the count limit for the quota. If the counter for the policy reaches this limit value, subsequent calls are rejected until the counter resets.

Shown below are three ways to set the <Allow> element:

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

If you specify both count and countRef , then countRef gets the priority. If countRef does not resolve at runtime, then the value of count is used.

پیش‌فرض: ناموجود
حضور: اختیاری
نوع: عدد صحیح

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
بشمار

Use to specify a message count for the quota.

For example, a count attribute value of 100, Interval of 1, and a TimeUnit of month specify a quota of 100 messages per month.

۲۰۰۰ اختیاری
countRef

Use to specify a flow variable containing the message count for a quota. countRef takes precedence over the count attribute.

هیچ کدام اختیاری

<Allow>/<Class> element

The <Class> element lets you conditionalize the value of the <Allow> element based on the value of a flow variable. For each different <Allow> child tag of <Class> , the policy maintains a different counter.

To use the <Class> element, specify a flow variable using the ref attribute to the <Class> tag. Edge then uses the value of the flow variable to select one of the <Allow> child tags to determine the allowed count of the policy. Edge matches the value of the flow variable to the class attribute of the <Allow> tag, as shown below:

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

In this example, the current quota counter is determined by the value of the time_variable query param passed with each request. That variable can have a value of peak_time or off_peak_time . If the query param contains an invalid value, the policy returns a quota violation error.

پیش‌فرض: ناموجود
حضور: اختیاری
نوع: ناموجود

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع

Use to specify a flow variable containing the quota class for a quota.

هیچ کدام مورد نیاز

<Allow>/<Class>/<Allow> element

The <Allow> element specifies the limit for a quota counter defined by the <Class> element. For each different <Allow> child tag of <Class> , the policy maintains a different counter.

برای مثال:

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

In this example, the Quota policy maintains two quota counters named of peak_time and off_peak_time .

پیش‌فرض: ناموجود
حضور: اختیاری
نوع: ناموجود

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
کلاس

Defines the name of the quota counter.

هیچ کدام مورد نیاز
بشمار Specifies the quota limit for the counter. هیچ کدام مورد نیاز

<Interval> element

Use to specify an integer (for example, 1, 2, 5, 60, and so on) that will be paired with the TimeUnit you specify (minute, hour, day, week, or month) to determine a time period during which Edge calculates quota use.

For example, an Interval of 24 with a TimeUnit of hour means that the quota will be calculated over the course of 24 hours.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
پیش‌فرض: هیچ کدام
حضور: مورد نیاز
نوع: عدد صحیح

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع

Use to specify a flow variable containing the interval for a quota. ref takes precedence over an explicit interval value. If both reference and value are specified, then reference gets the priority. If ref does not resolve at runtime, then the value is used.

هیچ کدام اختیاری

<TimeUnit> element

Use to specify the unit of time applicable to the quota.

For example, an Interval of 24 with a TimeUnit of hour means that the quota will be calculated over the course of 24 hours.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
پیش‌فرض: هیچ کدام
حضور: مورد نیاز
نوع:

String. Select from minute , hour , day , week , or month .

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع Use to specify a flow variable containing the time unit for a quota. ref takes precedence over an explicit interval value. If the ref does not resolve at runtime, then the value is used. هیچ کدام اختیاری

<StartTime> element

When type is set to calendar, specifies the date and time when the quota counter will begin counting, regardless of whether any requests have been received from any apps.

برای مثال:

<StartTime>2017-7-16 12:00:00</StartTime>
پیش‌فرض: هیچ کدام
حضور: Required when type is set to calendar .
نوع:

String in ISO 8601 date and time format.

<Distributed> element

An installation of Edge can use one or more Message Processors to process requests. Set this element to true to specify that the policy should maintain a central counter and continuously synchronize it across all Message Processors. The message processors can be across availability zones and/or regions.

If you use the default value of false , then you might exceed your quota because the count for each Message Processor is not shared:

<Distributed>true</Distributed>

To guarantee that the counters are synchronized, and updated on every request, set <Distributed> and <Synchronous> to true:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
پیش‌فرض: نادرست
حضور: اختیاری
نوع: بولی

<Synchronous> element

Set to true to update a distributed quota counter synchronously. This means that the update to the counter are made at the same time the quota is checked on a request to the API. Set to true if it is essential that you not allow any API calls over the quota.

Set to false to update the quota counter asynchronously. This means that it is possible that some API calls exceeding the quota will go through, depending on when the quota counter in the central repository is asynchronously updated. However, you will not face the potential performance impacts associated with synchronous updates.

The default asynchronous update interval is 10 seconds. Use the AsynchronousConfiguration element to configure this asynchronous behavior.

<Synchronous>false</Synchronous>
پیش‌فرض: نادرست
حضور: اختیاری
نوع: بولی

<AsynchronousConfiguration> element

Configures the synchronization interval amongst distributed quota counters when the policy configuration element <Synchronous> is either not present or present and set to false .

You can synchronize either after a time period or a message count, using either the SyncIntervalInSeconds or SyncMessageCount child elements. They are mutually exclusive. For example,

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

یا

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
پیش‌فرض: SyncIntervalInSeconds = 10 seconds
حضور: Optional; ignored when <Synchronous> is set to true .
نوع:

مرکب

<AsynchronousConfiguration>/<SyncIntervalInSeconds> element

Use this to override the default behavior in which asynchronous updates are performed after an interval of 10 seconds.

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

The sync interval must be >= 10 seconds as described in the Limits topic.

پیش‌فرض: ۱۰
حضور: اختیاری
نوع:

عدد صحیح

<AsynchronousConfiguration>/<SyncMessageCount> element

Specifies the number of requests across all Apigee message processors between quota updates.

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

This example specifies that the quota count is updated every 5 requests across each Apigee Edge message processor.

پیش‌فرض: ناموجود
حضور: اختیاری
نوع:

عدد صحیح

<Identifier> element

Use the <Identifier> element to configure the policy to create unique counters based on a flow variable.

You can create unique counters for characteristics defined by a flow variable. For example, you might use the developer email address to tie a quota to a specific developer. You can use a variety of variables to identify a quota, whether you're using custom variables or predefined variables, such as those available with the Verify API Key policy . See also the Variables reference .

If you don't use this element, the policy uses a single counter that is applied against the quota.

This element is also discussed in the following Apigee Community post: Quota identifier across different policies .

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
پیش‌فرض: ناموجود
حضور: اختیاری
نوع:

رشته

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور
مرجع

Specifies a flow variable that identifies the counter to use for the request. The identifier can be an HTTP header, query parameter, form parameter, or message content that is unique to each app, app user, app developer, API product, or other characteristic.

The <Identifier> most commonly used to uniquely identify apps is the client_id . The client_id is another name for the API key, or consumer key, that is generated for an app when it is registered in an organization on Apigee Edge. You can use this identifier if you have enabled API key or OAuth authorization policies for your API.

In some circumstances, Quota settings must be retrieved where no client_id is available, such as when no security policy is in place. In those situations, you can use the Access Entity policy to retrieve the appropriate API product settings, then extract values using ExtractVariables, and then used the extracted context variable in the Quota policy. For more information, see Access Entity policy .

ناموجود اختیاری

<MessageWeight> element

Use to specify the weight assigned to each message. Use message weight to increase impact of request messages that, for example, consume more computational resources than others.

For example, you want to count POST messages as being twice as "heavy" or expensive, as GET messages. Therefore, you set the MessageWeight to 2 for a POST and 1 for a GET. You can even set the MessageWeight to 0 so the request does not affect the counter. In this example, if the quota is 10 messages per minute and the MessageWeight for POST requests is 2 , then the quota will permits 5 POST requests in any 10 minute interval. Any additional request, POST or GET, before the counter resets are rejected.

A value representing MessageWeight must be specified by a flow variable, and can be extracted from HTTP headers, query parameters, an XML or JSON request payload, or any other flow variable. For example, you set it in a header named weight :

<MessageWeight ref="message_weight"/>
پیش‌فرض: ناموجود
حضور: اختیاری
نوع:

عدد صحیح

متغیرهای جریان

The following predefined Flow variables are automatically populated when a Quota policy executes. For more information about Flow variables, see Variables reference .

متغیرها نوع مجوزها توضیحات
ratelimit.{policy_name}.allowed.count بلند فقط خواندنی Returns the allowed quota count
ratelimit.{policy_name}.used.count بلند فقط خواندنی Returns the current quota used within a quota interval
ratelimit.{policy_name}.available.count بلند فقط خواندنی Returns the available quota count in the quota interval
ratelimit.{policy_name}.exceed.count بلند فقط خواندنی Returns 1 after the quota is exceeded.
ratelimit.{policy_name}.total.exceed.count بلند فقط خواندنی Returns 1 after the quota is exceeded.
ratelimit.{policy_name}.expiry.time بلند فقط خواندنی

Returns the UTC time in milliseconds which determines when the quota expires and new quota interval starts.

When the Quota policy type is rollingwindow , this value is not valid because the quota interval never expires.

ratelimit.{policy_name}.identifier رشته فقط خواندنی Returns the (client) identifier reference attached to the policy
ratelimit.{policy_name}.class رشته فقط خواندنی Returns the class associated with the client identifier
ratelimit.{policy_name}.class.allowed.count بلند فقط خواندنی Returns the allowed quota count defined in the class
ratelimit.{policy_name}.class.used.count بلند فقط خواندنی Returns the used quota within a class
ratelimit.{policy_name}.class.available.count بلند فقط خواندنی Returns the available quota count in the class
ratelimit.{policy_name}.class.exceed.count بلند فقط خواندنی Returns the count of requests that exceeds the limit in the class in the current quota interval
ratelimit.{policy_name}.class.total.exceed.count بلند فقط خواندنی Returns the total count of requests that exceeds the limit in the class across all quota intervals, so it is the sum of class.exceed.count for all quota intervals.
ratelimit.{policy_name}.failed بولی فقط خواندنی

Indicates whether or not the policy failed (true or 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 از حد مجاز فراتر رفت. N/A

خطاهای استقرار

نام خطا علت رفع کنید
InvalidQuotaInterval اگر بازه سهمیه مشخص شده در عنصر <Interval> یک عدد صحیح نباشد، در آن صورت استقرار پراکسی API با شکست مواجه می شود. به عنوان مثال، اگر بازه سهمیه مشخص شده 0.1 در عنصر <Interval> باشد، در آن صورت استقرار پروکسی API با شکست مواجه می شود.
InvalidQuotaTimeUnit اگر واحد زمانی مشخص شده در عنصر <TimeUnit> پشتیبانی نشود، استقرار پروکسی API با شکست مواجه می شود. واحدهای زمانی پشتیبانی شده عبارتند از minute ، hour ، day ، week و month .
InvalidQuotaType اگر نوع سهمیه مشخص شده توسط ویژگی type در عنصر <Quota> نامعتبر باشد، در این صورت استقرار پراکسی API ناموفق است. انواع سهمیه پشتیبانی شده default , calendar , flexi و rollingwindow هستند .
InvalidStartTime اگر قالب زمان مشخص شده در عنصر <StartTime> نامعتبر باشد، استقرار پروکسی API با شکست مواجه می شود. قالب معتبر yyyy-MM-dd HH:mm:ss است که فرمت تاریخ و زمان ISO 8601 است. به عنوان مثال، اگر زمان مشخص شده در عنصر <StartTime> 7-16-2017 12:00:00 باشد، استقرار پراکسی API با شکست مواجه می شود.
StartTimeNotSupported اگر عنصر <StartTime> مشخص شده باشد که نوع سهمیه آن از نوع calendar نیست، در این صورت استقرار پراکسی API با شکست مواجه می شود. عنصر <StartTime> فقط برای نوع سهمیه calendar پشتیبانی می شود. به عنوان مثال، اگر ویژگی type در عنصر <Quota> روی پنجره flexi یا rolling window تنظیم شده باشد، استقرار پراکسی API با شکست مواجه می‌شود.
InvalidTimeUnitForDistributedQuota اگر عنصر <Distributed> روی true و عنصر <TimeUnit> روی second تنظیم شود، استقرار پراکسی API با شکست مواجه می شود. واحد زمانی second برای سهمیه توزیع شده نامعتبر است.
InvalidSynchronizeIntervalForAsyncConfiguration اگر مقدار تعیین‌شده برای عنصر <SyncIntervalInSeconds> در عنصر <AsynchronousConfiguration> در یک خط‌مشی Quota کمتر از صفر باشد، در آن صورت استقرار پراکسی API با شکست مواجه می‌شود.
InvalidAsynchronizeConfigurationForSynchronousQuota اگر مقدار عنصر <AsynchronousConfiguration> در یک خط مشی Quota روی true تنظیم شود، که همچنین دارای پیکربندی ناهمزمان است که با استفاده از عنصر <AsynchronousConfiguration> تعریف شده است، در این صورت استقرار پراکسی API با شکست مواجه می شود.

متغیرهای خطا

این متغیرها زمانی تنظیم می شوند که این خط مشی خطایی را ایجاد کند. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.

متغیرها کجا مثال
fault.name=" fault_name " fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. 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 policy

SpikeArrest policy

Comparing Quota, Spike Arrest, and Concurrent Rate Limit Policies