คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X info

อะไร
ใช้นโยบายโควต้าเพื่อกำหนดค่าจำนวนข้อความคำขอที่พร็อกซี API อนุญาตในช่วงเวลาหนึ่งๆ เช่น นาที ชั่วโมง วัน สัปดาห์ หรือเดือน คุณสามารถตั้งค่าโควต้าให้เหมือนกันสำหรับแอปทั้งหมดที่เข้าถึงพร็อกซี API หรือจะตั้งค่าโควต้าตามเกณฑ์ต่อไปนี้ก็ได้
- ผลิตภัณฑ์ที่มีพร็อกซี API
- แอปที่ขอ API
- นักพัฒนาแอป
- เกณฑ์อื่นๆ อีกมากมาย
อย่าใช้โควต้าเพื่อปกป้องจากปริมาณการเข้าชมโดยรวมที่เพิ่มขึ้นอย่างรวดเร็ว โปรดใช้นโยบายการหยุดการเพิ่มขึ้นอย่างฉับพลัน ดูนโยบายการหยุดการเพิ่มขึ้นอย่างฉับพลัน
วิดีโอ
วิดีโอเหล่านี้จะแนะนำการจัดการโควต้าด้วยนโยบายโควต้า
บทนำ (Edge เวอร์ชันใหม่)
อินโทร (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 ไม่ได้บังคับให้ใช้ในพร็อกซี API นอกจากนี้ คุณยังต้องเพิ่มนโยบายโควต้าลงในพร็อกซี API ที่อ่านค่าเหล่านี้ด้วย ดูข้อมูลเพิ่มเติมได้ที่สร้างผลิตภัณฑ์ API
ในตัวอย่างข้างต้น พารามิเตอร์การเรียก API ที่มีนโยบายโควต้าใช้นโยบาย VerifyAPIKey ชื่อ verify-api-key
เพื่อตรวจสอบคีย์ API ที่ส่งมาในคําขอ จากนั้นนโยบายโควต้าจะเข้าถึงตัวแปรของโฟลว์จากนโยบาย VerifyAPIKey เพื่ออ่านค่าโควต้าที่ตั้งไว้ในผลิตภัณฑ์ API ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรของขั้นตอน VerifyAPIKey ได้ที่นโยบายการยืนยันคีย์ API
อีกทางเลือกหนึ่งคือการตั้งค่าแอตทริบิวต์ที่กำหนดเองสำหรับนักพัฒนาแอปหรือแอปแต่ละราย แล้วอ่านค่าเหล่านั้นในนโยบายโควต้า เช่น คุณต้องการกำหนดค่าโควต้าที่แตกต่างกันสำหรับนักพัฒนาแอปแต่ละราย ในกรณีนี้ คุณต้องตั้งค่าแอตทริบิวต์ที่กำหนดเองในนักพัฒนาแอปซึ่งมีขีดจํากัด หน่วยเวลา และช่วงเวลา จากนั้นคุณอ้างอิงค่าเหล่านี้ในนโยบายโควต้าดังที่แสดงด้านล่าง
<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>
สำหรับโควต้าที่มีการตั้งค่า type
เป็น calendar
คุณต้องกำหนดค่า <StartTime>
ที่ชัดเจน ค่าเวลาคือเวลา GMT ไม่ใช่เวลาท้องถิ่น หากคุณไม่ได้ระบุค่า <StartTime>
สำหรับนโยบายประเภท calendar
ทาง Edge จะแสดงข้อผิดพลาด
ระบบจะรีเฟรชตัวนับโควต้าสําหรับแต่ละแอปตามค่า <StartTime>
, <Interval>
และ <TimeUnit>
ในตัวอย่างนี้ โควต้าจะเริ่มนับเวลา 10:30 น. GMT ของวันที่ 18 กุมภาพันธ์ 2017 และรีเฟรชทุก 5 ชั่วโมง ดังนั้น การรีเฟรชครั้งถัดไปจะเป็นเวลา 15:30 น. GMT ของวันที่ 18 กุมภาพันธ์ 2017
ตัวนับการเข้าถึง
<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 ต่อไปนี้เพื่อแสดงค่าของตัวแปรการไหลของโควต้าเป็นส่วนหัวของคำตอบ
<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 ครั้งต่อ 1 ชั่วโมง นโยบายจะรีเซ็ตตัวนับโควต้าที่ด้านบนของทุกชั่วโมง หากตัวนับถึงโควต้าการโทร 10,000 สายก่อนหมดเวลา 1 ชั่วโมง ระบบจะปฏิเสธสายที่เกิน 10,000 สาย
เช่น หากตัวนับเริ่มต้นที่ 2017-07-08 07:00:00
ระบบจะรีเซ็ตเป็น 0 ที่ 2017-07-08 08:00:00
(1 ชั่วโมงนับจากเวลาเริ่มต้น) หากได้รับข้อความแรกเมื่อเวลา 2017-07-08 07:35:28
และข้อความมีจำนวนถึง 10,000 รายการก่อนเวลา 2017-07-08 08:00:00
ระบบจะปฏิเสธสายโทรเข้าเกินจำนวนดังกล่าวจนกว่าระบบจะรีเซ็ตจำนวนใหม่เมื่อถึงเวลา 00:00 น.
เวลารีเซ็ตตัวนับจะอิงตามชุดค่าผสมของ <Interval>
และ <TimeUnit>
ตัวอย่างเช่น หากคุณตั้งค่า <Interval>
เป็น 12 สำหรับ <TimeUnit>
ชั่วโมง ตัวนับจะรีเซ็ตทุก 12 ชั่วโมง
คุณสามารถตั้งค่า <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 เพื่อกำหนดตัวนับแต่ละรายการสำหรับนโยบายโควต้าเดียวกันได้ ตัวอย่างเช่น แท็ก <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 ที่แอปทําในช่วงเวลาหนึ่ง การใช้นโยบายโควต้าช่วยให้คุณจำกัดแอปให้มีคำขอได้ 1 คำขอต่อนาที หรือ 10,000 คำขอต่อเดือน เป็นต้น
เช่น หากกำหนดโควต้าเป็น 10,000 ข้อความต่อเดือน การจำกัดอัตราการส่งจะเริ่มขึ้นหลังจากข้อความที่ 10,001 ไม่ว่าระบบจะนับข้อความ 10,000 รายการในวันแรกหรือวันสุดท้ายของระยะเวลาดังกล่าว ระบบจะไม่อนุญาตให้ส่งคำขอเพิ่มเติมจนกว่าตัวนับโควต้าจะรีเซ็ตโดยอัตโนมัติเมื่อสิ้นสุดช่วงเวลาที่ระบุ หรือจนกว่าจะมีการรีเซ็ตโควต้าอย่างชัดเจนโดยใช้นโยบายรีเซ็ตโควต้า
รูปแบบหนึ่งของโควต้าที่เรียกว่า SpikeArrest จะป้องกันไม่ให้มีการเข้าชมเพิ่มขึ้นอย่างรวดเร็ว (หรือเพิ่มขึ้นอย่างฉับพลัน) ซึ่งอาจเกิดจากการใช้งานที่เพิ่มขึ้นอย่างฉับพลัน ไคลเอ็นต์ที่มีข้อบกพร่อง หรือการโจมตีที่เป็นอันตราย ดูข้อมูลเพิ่มเติมเกี่ยวกับ SpikeArrest ได้ที่นโยบาย SpikeArrest
โควต้าจะมีผลกับพร็อกซี API แต่ละรายการและจะไม่กระจายไปยังพร็อกซี API อื่นๆ ตัวอย่างเช่น หากคุณมีพร็อกซี API 3 ตัวในผลิตภัณฑ์ API หนึ่งๆ ระบบจะไม่ใช้โควต้าเดียวกันกับทั้ง 3 ตัว แม้ว่าทั้ง 3 ตัวจะใช้การกำหนดค่านโยบายโควต้าเดียวกันก็ตาม
ประเภทนโยบายโควต้า
นโยบายโควต้ารองรับนโยบายหลายประเภท ได้แก่ เริ่มต้น, calendar
, flexi
และ rollingwindow
แต่ละประเภทจะกำหนดว่าตัวนับโควต้าจะเริ่มทำงานเมื่อใดและรีเซ็ตเมื่อใด ดังที่แสดงในตารางต่อไปนี้
หน่วยเวลา | รีเซ็ตเป็นค่าเริ่มต้น (หรือค่า Null) | รีเซ็ตปฏิทิน | flexi reset |
---|---|---|---|
นาที | ต้นของนาทีถัดไป | 1 นาทีหลังจาก<StartTime> |
1 นาทีหลังจากคําขอแรก |
ชั่วโมง | ต้นชั่วโมงถัดไป | 1 ชั่วโมงหลังจาก<StartTime> |
1 ชั่วโมงหลังจากคําขอแรก |
วัน | เที่ยงคืนตามเขตเวลา GMT ของวันปัจจุบัน | 24 ชั่วโมงหลังจาก<StartTime> |
24 ชั่วโมงหลังจากคำขอแรก |
สัปดาห์ | เที่ยงคืน GMT วันอาทิตย์ ซึ่งเป็นวันสุดท้ายของสัปดาห์ | 1 สัปดาห์หลังจาก<StartTime> |
1 สัปดาห์หลังจากคำขอแรก |
เดือน | เวลาเที่ยงคืน GMT ของวันสุดท้ายของเดือน | 1 เดือน (28 วัน) หลังจาก<StartTime> |
1 เดือน (28 วัน) หลังจากส่งคำขอครั้งแรก |
สําหรับ type="calendar"
คุณต้องระบุค่าของ <StartTime>
ตารางไม่ได้แสดงค่าสำหรับประเภท rollingwindow
โควต้าแบบเลื่อนไปเรื่อยๆ
โควต้าจะทํางานโดยกําหนดขนาดของ "กรอบเวลา" ของโควต้า เช่น กรอบเวลา 1 ชั่วโมงหรือ 1 วัน เมื่อได้รับคำขอใหม่ นโยบายจะระบุว่ามีการใช้โควต้าเกิน "กรอบเวลา" ที่ผ่านมาหรือไม่
เช่น คุณกำหนดกรอบเวลา 2 ชั่วโมงที่อนุญาตคำขอ 1, 000 รายการ คำขอใหม่เข้ามาเวลา 16:45 น.นโยบายจะคำนวณจำนวนโควต้าสำหรับกรอบเวลา 2 ชั่วโมงที่ผ่านมา ซึ่งก็คือจํานวนคําขอนับตั้งแต่ 14:45 น. หากไม่ได้ใช้โควต้าเกินขีดจํากัดในกรอบเวลา 2 ชั่วโมงดังกล่าว ระบบจะอนุญาตคําขอ
1 นาทีต่อมา เวลา 16:46 น. มีคำขออีกรายการเข้ามา ตอนนี้นโยบายจะคํานวณจํานวนโควต้านับตั้งแต่เวลา 14:46 น. เพื่อพิจารณาว่าเกินขีดจํากัดหรือไม่
สําหรับประเภท rollingwindow
ตัวนับจะไม่รีเซ็ต แต่จะคํานวณใหม่ในคําขอแต่ละรายการ
ทำความเข้าใจตัวนับโควต้า
โดยค่าเริ่มต้น นโยบายโควต้าจะเก็บรักษาตัวนับรายการเดียว ไม่ว่าคุณจะอ้างอิงนโยบายในพร็อกซี API กี่ครั้งก็ตาม ชื่อตัวนับโควต้าจะอิงตามแอตทริบิวต์ name
ของนโยบาย
เช่น คุณสร้างนโยบายโควต้าชื่อ MyQuotaPolicy
ที่มีขีดจํากัด 5 คำขอ และวางไว้ในหลายเวิร์กโฟลว์ (เวิร์กโฟลว์ ก, ข และ ค) ในพร็อกซี API แม้ว่าจะใช้ในหลายขั้นตอน แต่ก็มีตัวนับเดียวที่อินสแตนซ์ทั้งหมดของนโยบายจะอัปเดต
- โฟลว์ ก ทำงาน -> MyQuotaPolicy ทำงานและตัวนับ = 1
- โฟลว์ ข ทำงาน -> MyQuotaPolicy ทำงานและตัวนับ = 2
- โฟลว์ ก ทำงาน -> MyQuotaPolicy ทำงานและตัวนับ = 3
- โฟลว์ C ทำงาน -> MyQuotaPolicy ทำงานและตัวนับ = 4
- โฟลว์ ก ทำงาน -> MyQuotaPolicy ทำงานและตัวนับ = 5
ระบบจะปฏิเสธคำขอถัดไปสำหรับโฟลว์ใดโฟลว์หนึ่งเนื่องจากตัวนับโควต้าถึงขีดจำกัดแล้ว
การใช้นโยบายโควต้าเดียวกันในหลายตำแหน่งในเวิร์กโฟลว์พร็อกซี API ซึ่งอาจทำให้โควต้าหมดเร็วกว่าที่คาดไว้โดยไม่ตั้งใจ เป็นรูปแบบที่ไม่แนะนำที่อธิบายไว้ในสมุดรูปแบบที่ไม่แนะนำของ Apigee Edge
หรือจะกําหนดนโยบายโควต้าหลายรายการในพร็อกซี API และใช้นโยบายที่แตกต่างกันในแต่ละเวิร์กโฟลว์ก็ได้ นโยบายโควต้าแต่ละรายการจะมีตัวนับของตัวเอง โดยอิงตามแอตทริบิวต์ name
ของนโยบาย
หรือใช้องค์ประกอบ <Class>
หรือ <Identifier>
ในนโยบายโควต้าเพื่อกำหนดตัวนับที่ไม่ซ้ำกันหลายรายการในนโยบายเดียว การใช้องค์ประกอบเหล่านี้จะช่วยให้นโยบายเดียวสามารถเก็บรักษาตัวนับที่แตกต่างกันตามแอปที่ส่งคำขอ นักพัฒนาแอปที่ส่งคำขอ รหัสไคลเอ็นต์หรือตัวระบุไคลเอ็นต์อื่นๆ และอื่นๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้องค์ประกอบ <Class>
หรือ <Identifier>
ได้จากตัวอย่างด้านบน
การเขียนเวลา
ระบบจะตั้งค่าเวลาโควต้าทั้งหมดเป็นเขตเวลาเวลาสากลเชิงพิกัด (UTC)
รูปแบบเวลาโควต้าเป็นไปตามรูปแบบวันที่มาตรฐานสากลที่ระบุไว้ในมาตรฐานสากล ISO 8601
วันที่จะกำหนดเป็นปี เดือน และวันในรูปแบบ YYYY-MM-DD
เช่น 2015-02-04
แสดงถึงวันที่ 4 กุมภาพันธ์ 2015
เวลาของวันจะกำหนดเป็นชั่วโมง นาที และวินาทีในรูปแบบต่อไปนี้
hours:minutes:seconds
ตัวอย่างเช่น 23:59:59
แสดงเวลา 1 วินาทีก่อนเที่ยงคืน
โปรดทราบว่ามีเครื่องหมาย 2 แบบ ได้แก่ 00:00:00
และ 24:00:00
เพื่อแยกแยะเวลาเที่ยงคืน 2 ครั้งที่เชื่อมโยงกับวันที่เดียวกันได้ ดังนั้น 2015-02-04
24:00:00
จึงเป็นวันและเวลาเดียวกับ 2015-02-05 00:00:00
โดยปกติแล้ว รูปแบบหลังจะเป็นรูปแบบที่แนะนำ
การรับการตั้งค่าโควต้าจากการกําหนดค่าผลิตภัณฑ์ API
คุณสามารถกำหนดขีดจำกัดโควต้าในการกำหนดค่าผลิตภัณฑ์ API ขีดจํากัดเหล่านั้นจะไม่บังคับใช้โควต้าโดยอัตโนมัติ แต่คุณสามารถอ้างอิงการตั้งค่าโควต้าผลิตภัณฑ์ในนโยบายโควต้าแทนได้ ต่อไปนี้คือข้อดีบางส่วนของการตั้งโควต้าในผลิตภัณฑ์เพื่อให้นโยบายโควต้าอ้างอิง
- นโยบายโควต้าสามารถใช้การตั้งค่าแบบเดียวกันกับพร็อกซี API ทั้งหมดในผลิตภัณฑ์ API
- คุณทำการเปลี่ยนแปลงรันไทม์ในการตั้งค่าโควต้าในผลิตภัณฑ์ API ได้ และนโยบายโควต้าที่อ้างอิงค่าจะมีค่าโควต้าที่อัปเดตโดยอัตโนมัติ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้การตั้งค่าโควต้าจากผลิตภัณฑ์ API ได้ที่ตัวอย่าง "โควต้าแบบไดนามิก" ด้านบน
ดูข้อมูลเกี่ยวกับการกำหนดค่าผลิตภัณฑ์ API ที่มีขีดจำกัดโควต้าได้ที่สร้างผลิตภัณฑ์ API
การอ้างอิงองค์ประกอบ
ต่อไปนี้คือองค์ประกอบและแอตทริบิวต์ที่คุณกำหนดค่าในนโยบายนี้ได้ โปรดทราบว่าการผสมองค์ประกอบบางอย่างจะแยกกันใช้ไม่ได้หรือไม่จำเป็น ดูตัวอย่างการใช้งานที่เฉพาะเจาะจง ตัวแปร verifyapikey.VerifyAPIKey.apiproduct.*
ด้านล่างจะพร้อมใช้งานโดยค่าเริ่มต้นเมื่อใช้นโยบาย "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">
แอตทริบิวต์ต่อไปนี้ใช้กับนโยบายนี้โดยเฉพาะ
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
ประเภท |
ใช้เพื่อกำหนดเวลาและวิธีการทำงานของตัวนับโควต้าในการตรวจสอบการใช้โควต้า ดูข้อมูลเพิ่มเติมได้ในประเภทนโยบายโควต้า หากคุณละเว้นค่า ค่าที่ใช้ได้มีดังนี้
|
ปฏิทิน | ไม่บังคับ |
The following table describes attributes that are common to all policy parent elements:
Attribute | Description | Default | Presence |
---|---|---|---|
name |
The internal name of the policy. The value of the Optionally, use the |
N/A | Required |
continueOnError |
Set to Set to |
false | Optional |
enabled |
Set to Set to |
true | Optional |
async |
This attribute is deprecated. |
false | Deprecated |
<DisplayName> element
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, natural-language name.
<DisplayName>Policy Display Name</DisplayName>
Default |
N/A If you omit this element, the value of the policy's |
---|---|
Presence | Optional |
Type | String |
องค์ประกอบ <Allow>
ระบุขีดจํากัดจํานวนสำหรับโควต้า หากตัวนับของนโยบายถึงค่าขีดจํากัดนี้ ระบบจะปฏิเสธการเรียกใช้ครั้งต่อๆ ไปจนกว่าตัวนับจะรีเซ็ต
ด้านล่างนี้คือ 3 วิธีในการตั้งค่าองค์ประกอบ <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
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: | จำนวนเต็ม |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
จำนวน |
ใช้เพื่อระบุจำนวนข้อความสำหรับโควต้า เช่น ค่าแอตทริบิวต์ |
2000 | ไม่บังคับ |
countRef |
ใช้เพื่อระบุตัวแปรโฟลว์ที่มีจํานวนข้อความสําหรับโควต้า
|
ไม่มี | ไม่บังคับ |
องค์ประกอบ <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
หากพารามิเตอร์การค้นหามีค่าที่ไม่ถูกต้อง นโยบายจะแสดงข้อผิดพลาดการละเมิดโควต้า
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: | ไม่มี |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
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>
ในตัวอย่างนี้ นโยบายโควต้าจะดูแลเคาน์เตอร์โควต้า 2 รายการที่มีชื่อว่า peak_time
และ off_peak_time
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: | ไม่มี |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
คลาส |
กําหนดชื่อตัวนับโควต้า |
ไม่มี | ต้องระบุ |
จำนวน | ระบุขีดจํากัดโควต้าสําหรับตัวนับ | ไม่มี | ต้องระบุ |
องค์ประกอบ <Interval>
ใช้เพื่อระบุจำนวนเต็ม (เช่น 1, 2, 5, 60 และอื่นๆ) ที่จะจับคู่กับ TimeUnit
ที่คุณระบุ (นาที ชั่วโมง วัน สัปดาห์ หรือเดือน) เพื่อกำหนดระยะเวลาที่ Edge จะคำนวณการใช้โควต้า
เช่น Interval
ของ 24
ที่มี TimeUnit
ของ hour
หมายความว่าระบบจะคำนวณโควต้าในช่วง 24 ชั่วโมง
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ต้องระบุ |
ประเภท: | จำนวนเต็ม |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
ref |
ใช้เพื่อระบุตัวแปรการไหลที่มีช่วงเวลาสำหรับโควต้า |
ไม่มี | ไม่บังคับ |
องค์ประกอบ <TimeUnit>
ใช้เพื่อระบุหน่วยเวลาที่ใช้กับโควต้า
เช่น Interval
ของ 24
ที่มี TimeUnit
ของ hour
หมายความว่าระบบจะคำนวณโควต้าในช่วง 24 ชั่วโมง
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ต้องระบุ |
ประเภท: |
สตริง เลือกจาก |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
ref | ใช้เพื่อระบุตัวแปรการไหลที่มีหน่วยเวลาสำหรับโควต้า ref
จะมีความสำคัญเหนือกว่าค่าของรอบที่ชัดเจน หาก ref ไม่สามารถแก้ไขได้เมื่อรันไทม์ ระบบจะใช้ค่านั้น |
ไม่มี | ไม่บังคับ |
องค์ประกอบ <StartTime>
เมื่อตั้งค่า type
เป็น calendar,
จะระบุวันที่และเวลาที่ตัวนับโควต้าจะเริ่มนับ ไม่ว่าจะได้รับคําขอจากแอปใดก็ตาม
เช่น
<StartTime>2017-7-16 12:00:00</StartTime>
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ต้องระบุเมื่อตั้งค่า type เป็น calendar |
ประเภท: |
สตริงในรูปแบบวันที่และเวลา ISO 8601 |
องค์ประกอบ <Distributed>
การติดตั้ง Edge สามารถใช้โปรแกรมประมวลผลข้อความอย่างน้อย 1 รายการเพื่อประมวลผลคำขอ ตั้งค่าองค์ประกอบนี้เป็น true
เพื่อระบุว่านโยบายควรรักษาตัวนับส่วนกลางและซิงค์กับตัวประมวลผลข้อความทั้งหมดอย่างต่อเนื่อง โปรแกรมประมวลผลข้อความอาจอยู่ในโซนความพร้อมให้บริการและ/หรือภูมิภาคต่างๆ
หากคุณใช้ค่าเริ่มต้น false
คุณอาจใช้โควต้าเกินเนื่องจากระบบจะไม่แชร์จํานวนสำหรับตัวประมวลผลข้อความแต่ละรายการ ดังนี้
<Distributed>true</Distributed>
หากต้องการให้ตัวนับมีการซิงค์และอัปเดตในคําขอทุกรายการ ให้ตั้งค่า <Distributed>
และ <Synchronous>
เป็น "จริง"
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
ค่าเริ่มต้น: | เท็จ |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: | บูลีน |
องค์ประกอบ <Synchronous>
ตั้งค่าเป็น true
เพื่ออัปเดตตัวนับโควต้าแบบกระจายพร้อมกัน ซึ่งหมายความว่าการอัปเดตตัวนับจะดำเนินการพร้อมกันกับการตรวจสอบโควต้าในคำขอไปยัง API ตั้งค่าเป็น true
หากไม่อนุญาตให้มีการเรียก API เกินโควต้า
ตั้งค่าเป็น false
เพื่ออัปเดตตัวนับโควต้าแบบไม่พร้อมกัน ซึ่งหมายความว่าการเรียก API บางรายการที่เกินโควต้าอาจดำเนินการได้ ทั้งนี้ขึ้นอยู่กับเวลาที่ตัวนับโควต้าในที่เก็บข้อมูลส่วนกลางได้รับการอัปเดตแบบไม่พร้อมกัน อย่างไรก็ตาม คุณจะไม่ต้องเผชิญกับผลกระทบด้านประสิทธิภาพที่อาจเกิดขึ้นซึ่งเชื่อมโยงกับการอัปเดตแบบพร้อมกัน
ช่วงเวลาการอัปเดตแบบไม่พร้อมกันเริ่มต้นคือ 10 วินาที ใช้องค์ประกอบ 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 วินาทีตามที่อธิบายไว้ในหัวข้อขีดจํากัด
ค่าเริ่มต้น: | 10 |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: |
จำนวนเต็ม |
<AsynchronousConfiguration>/<SyncMessageCount> element
ระบุจํานวนคําขอในโปรแกรมประมวลผลข้อความ Apigee ทั้งหมดระหว่างการอัปเดตโควต้า
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
ตัวอย่างนี้ระบุว่าระบบจะอัปเดตจำนวนโควต้าทุกๆ 5 คำขอในเครื่องประมวลผลข้อความ Apigee Edge แต่ละเครื่อง
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: |
จำนวนเต็ม |
องค์ประกอบ <Identifier>
ใช้องค์ประกอบ <Identifier>
เพื่อกําหนดค่านโยบายเพื่อสร้างตัวนับที่ไม่ซ้ำกันตามตัวแปรการไหล
หากคุณไม่ได้ใช้องค์ประกอบนี้ นโยบายจะใช้ตัวนับเดียวกับโควต้า
องค์ประกอบนี้ยังกล่าวถึงในโพสต์ชุมชน 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"/>
ค่าเริ่มต้น: | ไม่มี |
การแสดงข้อมูล: | ไม่บังคับ |
ประเภท: |
สตริง |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
ref |
ระบุตัวแปรการไหลที่ระบุตัวนับที่จะใช้กับคําขอ ตัวระบุอาจเป็นส่วนหัว HTTP, พารามิเตอร์การค้นหา, พารามิเตอร์แบบฟอร์ม หรือเนื้อหาข้อความที่ไม่ซ้ำกันสำหรับแต่ละแอป ผู้ใช้แอป นักพัฒนาแอป ผลิตภัณฑ์ API หรือลักษณะอื่นๆ
ในบางกรณี คุณต้องเรียกข้อมูลการตั้งค่าโควต้าในกรณีที่ไม่มี |
ไม่มี | ไม่บังคับ |
องค์ประกอบ <MessageWeight>
ใช้เพื่อระบุน้ำหนักที่กำหนดให้กับข้อความแต่ละรายการ ใช้น้ำหนักข้อความเพื่อเพิ่มผลลัพธ์ของข้อความคำขอ เช่น ข้อความที่ต้องใช้ทรัพยากรการประมวลผลมากกว่าข้อความอื่นๆ
เช่น คุณต้องการนับข้อความ POST ว่า "หนัก" หรือมีค่าใช้จ่ายมากกว่าข้อความ GET 2 เท่า ดังนั้น คุณจึงตั้งค่า MessageWeight
เป็น 2 สําหรับ POST และ 1 สําหรับ GET คุณยังตั้งค่า MessageWeight
เป็น 0 ได้ด้วยเพื่อให้คำขอไม่ส่งผลต่อตัวนับ ในตัวอย่างนี้ หากโควต้าคือ 10 ข้อความต่อนาที และ MessageWeight
สำหรับคำขอ POST คือ 2
โควต้าจะอนุญาตคำขอ POST 5 รายการในระยะ 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 เป็นมิลลิวินาทีซึ่งจะเป็นตัวกำหนดว่าโควต้าจะหมดอายุเมื่อใดและช่วงเวลาโควต้าใหม่จะเริ่มขึ้นเมื่อใด เมื่อประเภทนโยบายโควต้าเป็น |
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 | บูลีน | อ่านอย่างเดียว |
ระบุว่านโยบายดำเนินการไม่สำเร็จหรือไม่ (จริงหรือเท็จ) |
ข้อมูลอ้างอิงข้อผิดพลาด
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 | Occurs if the <Interval> element is not defined within the Quota policy. This element
is mandatory and used to specify the interval of time applicable to the quota. The time interval
can be minutes, hours, days, weeks, or months as defined with the <TimeUnit> element. |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 | Occurs if the <TimeUnit> element is not defined within the Quota policy. This element
is mandatory and used to specify the unit of time applicable to the quota. The time interval
can be in minutes, hours, days, weeks, or months. |
build |
policies.ratelimit.InvalidMessageWeight |
500 | Occurs if the value of the <MessageWeight> element specified through a flow variable
is invalid (a non-integer value). |
build |
policies.ratelimit.QuotaViolation |
500 | The quota limit was exceeded. | N/A |
Deployment errors
Error name | Cause | Fix |
---|---|---|
InvalidQuotaInterval |
If the quota interval specified in the <Interval> element is not
an integer, then the deployment of the API proxy fails. For example, if the quota interval
specified is 0.1 in the <Interval> element, then the deployment of the
API proxy fails.
|
build |
InvalidQuotaTimeUnit |
If the time unit specified in the <TimeUnit> element is unsupported,
then the deployment of the API proxy fails. The supported time units are minute ,
hour , day , week , and month .
|
build |
InvalidQuotaType |
If the type of the quota specified by the type attribute in the <Quota>
element is invalid, then the deployment of the API proxy fails. The
supported quota types are default , calendar , flexi , and rollingwindow .
|
build |
InvalidStartTime |
If the format of the time specified in the <StartTime> element is
invalid, then the deployment of the API proxy fails. The valid format is yyyy-MM-dd HH:mm:ss ,
which is the ISO 8601 date and time format. For
example, if the time specified in the <StartTime> element is
7-16-2017 12:00:00 then the deployment of the API proxy fails.
|
build |
StartTimeNotSupported |
If the <StartTime> element is specified whose quota type is not
calendar type, then the deployment of the API proxy fails. The <StartTime> element is
supported only for the calendar quota type. For example, if the type attribute is set
to flexi or rolling window in the <Quota> element, then the
deployment of the API proxy fails.
|
build |
InvalidTimeUnitForDistributedQuota |
If the <Distributed> element is set to true and the <TimeUnit> element is set to
second then the deployment of the API proxy fails. The timeunit second is invalid for
a distributed quota. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
If the value specified for the <SyncIntervalInSeconds> element within the
<AsynchronousConfiguration> element in a Quota policy is less than zero, then the
deployment of the API proxy fails. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
If the value of the <AsynchronousConfiguration> element is set to true in a Quota policy, which also
has asynchronous configuration defined using the <AsynchronousConfiguration> element, then
the deployment of the API proxy fails. |
build |
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | ratelimit.QT-QuotaPolicy.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Example fault rule
<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>
สคีมา
หัวข้อที่เกี่ยวข้อง
การเปรียบเทียบนโยบายโควต้า การหยุดการเพิ่มขึ้นอย่างฉับพลัน และขีดจำกัดอัตราพร้อมกัน