นโยบายโควต้า

คุณกําลังดูเอกสารประกอบของ 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">

แอตทริบิวต์ต่อไปนี้ใช้กับนโยบายนี้โดยเฉพาะ

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ประเภท

ใช้เพื่อกำหนดเวลาและวิธีการทำงานของตัวนับโควต้าในการตรวจสอบการใช้โควต้า ดูข้อมูลเพิ่มเติมได้ในประเภทนโยบายโควต้า

หากคุณละเว้นค่า type ตัวนับจะเริ่มที่จุดเริ่มต้นของนาที/ชั่วโมง/วัน/สัปดาห์/เดือน

ค่าที่ใช้ได้มีดังนี้

  • calendar: กําหนดค่าโควต้าตามเวลาเริ่มต้นที่ชัดเจน ระบบจะรีเฟรชตัวนับโควต้าของแอปแต่ละแอปตามค่า <StartTime>, <Interval> และ <TimeUnit> ที่คุณตั้งไว้
  • rollingwindow: กําหนดค่าโควต้าที่ใช้ "กรอบเวลาแบบเลื่อน" เพื่อระบุปริมาณการใช้โควต้า เมื่อใช้ rollingwindow คุณจะกําหนดขนาดของกรอบเวลาด้วยองค์ประกอบ <Interval> และ <TimeUnit> เช่น 1 วัน เมื่อได้รับคําขอ Edge จะดูเวลาของคําขอที่แน่นอน (เช่น 17:01 น.) นับจํานวนคําขอที่ได้รับระหว่างนั้นจนถึง 17:01 น. ของวันก่อนหน้า (1 วัน) และพิจารณาว่ามีการเกินโควต้าหรือไม่ในช่วงดังกล่าว
  • flexi: กําหนดโควต้าที่จะทําให้ตัวนับเริ่มต้นเมื่อได้รับข้อความคําขอแรกจากแอป และรีเซ็ตตามค่า <Interval>, และ <TimeUnit>
ปฏิทิน ไม่บังคับ

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 name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

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 name attribute is used.

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

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
จำนวน

ใช้เพื่อระบุจำนวนข้อความสำหรับโควต้า

เช่น ค่าแอตทริบิวต์ count เป็น 100, Interval เป็น 1 และ TimeUnit เป็น month จะระบุโควต้าข้อความ 100 ข้อความต่อเดือน

2000 ไม่บังคับ
countRef

ใช้เพื่อระบุตัวแปรโฟลว์ที่มีจํานวนข้อความสําหรับโควต้า countRef จะมีความสำคัญเหนือแอตทริบิวต์ count

ไม่มี ไม่บังคับ

องค์ประกอบ <Allow>/<Class>

องค์ประกอบ <Class> ช่วยให้คุณกำหนดค่าขององค์ประกอบ <Allow> ตามเงื่อนไขโดยอิงตามค่าของตัวแปรการไหลได้ นโยบายจะเก็บตัวนับที่แตกต่างกันสำหรับ<Allow>แท็กย่อยแต่ละรายการของ <Class>

หากต้องการใช้องค์ประกอบ <Class> ให้ระบุตัวแปรการไหลโดยใช้แอตทริบิวต์ ref กับแท็ก <Class> จากนั้น Edge จะใช้ค่าของตัวแปรโฟลว์เพื่อเลือกแท็กย่อย <Allow> รายการใดรายการหนึ่งเพื่อระบุจํานวนแท็กที่อนุญาตของนโยบาย Edge จะจับคู่ค่าของตัวแปรการไหลกับแอตทริบิวต์ class ของแอตทริบิวต์ <Allow> ดังที่แสดงด้านล่าง

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

ในตัวอย่างนี้ ตัวนับโควต้าปัจจุบันจะกำหนดโดยค่าของพารามิเตอร์การค้นหา time_variable ที่ส่งพร้อมกับคำขอแต่ละรายการ ตัวแปรดังกล่าวอาจมีค่าเป็น peak_time หรือ off_peak_time หากพารามิเตอร์การค้นหามีค่าที่ไม่ถูกต้อง นโยบายจะแสดงข้อผิดพลาดการละเมิดโควต้า

ค่าเริ่มต้น: ไม่มี
การแสดงข้อมูล: ไม่บังคับ
ประเภท: ไม่มี

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

ใช้เพื่อระบุตัวแปรการไหลที่มีช่วงเวลาสำหรับโควต้า ref จะมีความสำคัญเหนือกว่าค่าของรอบที่ชัดเจน หากระบุทั้งการอ้างอิงและค่า การอ้างอิงจะมีลำดับความสำคัญเหนือกว่า หาก ref ไม่สามารถแก้ไขได้ในรันไทม์ ระบบจะใช้ค่านั้น

ไม่มี ไม่บังคับ

องค์ประกอบ <TimeUnit>

ใช้เพื่อระบุหน่วยเวลาที่ใช้กับโควต้า

เช่น Interval ของ 24 ที่มี TimeUnit ของ hour หมายความว่าระบบจะคำนวณโควต้าในช่วง 24 ชั่วโมง

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
ค่าเริ่มต้น: ไม่มี
การแสดงข้อมูล: ต้องระบุ
ประเภท:

สตริง เลือกจาก minute, hour, day, week หรือ month

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> เพื่อกําหนดค่านโยบายเพื่อสร้างตัวนับที่ไม่ซ้ำกันตามตัวแปรการไหล

คุณสร้างตัวนับที่ไม่ซ้ำกันสำหรับลักษณะที่กําหนดโดยตัวแปรการไหลได้ เช่น คุณอาจใช้อีเมลของนักพัฒนาแอปเพื่อเชื่อมโยงโควต้ากับนักพัฒนาแอปที่เฉพาะเจาะจง คุณใช้ตัวแปรที่หลากหลายเพื่อระบุโควต้าได้ ไม่ว่าจะใช้ตัวแปรที่กําหนดเองหรือตัวแปรที่กําหนดไว้ล่วงหน้า เช่น ตัวแปรที่มีให้ในนโยบายการยืนยันคีย์ API โปรดดูการอ้างอิงตัวแปรด้วย

หากคุณไม่ได้ใช้องค์ประกอบนี้ นโยบายจะใช้ตัวนับเดียวกับโควต้า

องค์ประกอบนี้ยังกล่าวถึงในโพสต์ชุมชน Apigee ต่อไปนี้ด้วย http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
ค่าเริ่มต้น: ไม่มี
การแสดงข้อมูล: ไม่บังคับ
ประเภท:

สตริง

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ref

ระบุตัวแปรการไหลที่ระบุตัวนับที่จะใช้กับคําขอ ตัวระบุอาจเป็นส่วนหัว HTTP, พารามิเตอร์การค้นหา, พารามิเตอร์แบบฟอร์ม หรือเนื้อหาข้อความที่ไม่ซ้ำกันสำหรับแต่ละแอป ผู้ใช้แอป นักพัฒนาแอป ผลิตภัณฑ์ API หรือลักษณะอื่นๆ

<Identifier> ที่พบบ่อยที่สุดซึ่งใช้ในการระบุแอปที่ไม่ซ้ำกันคือ client_id client_id เป็นชื่อเรียกคีย์ API หรือคีย์ผู้บริโภคอีกชื่อหนึ่ง ซึ่งสร้างขึ้นสําหรับแอปเมื่อลงทะเบียนในองค์กรใน Apigee Edge คุณสามารถใช้ตัวระบุนี้ได้หากเปิดใช้นโยบายการให้สิทธิ์ OAuth หรือคีย์ API สำหรับ API

ในบางกรณี คุณต้องเรียกข้อมูลการตั้งค่าโควต้าในกรณีที่ไม่มีclient_id เช่น เมื่อไม่มีนโยบายความปลอดภัย ในกรณีดังกล่าว คุณสามารถใช้นโยบาย Access Entity เพื่อดึงข้อมูลการตั้งค่าผลิตภัณฑ์ API ที่เหมาะสม จากนั้นดึงค่าโดยใช้ ExtractVariables แล้วใช้ตัวแปรบริบทที่ดึงมานี้ในนโยบายโควต้า ดูข้อมูลเพิ่มเติมได้ที่นโยบาย Access Entity

ไม่มี ไม่บังคับ

องค์ประกอบ <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 เป็นมิลลิวินาทีซึ่งจะเป็นตัวกำหนดว่าโควต้าจะหมดอายุเมื่อใดและช่วงเวลาโควต้าใหม่จะเริ่มขึ้นเมื่อใด

เมื่อประเภทนโยบายโควต้าเป็น rollingwindow ค่านี้จะใช้งานไม่ได้เนื่องจากช่วงเวลาของโควต้าจะไม่มีวันหมดอายุ

ratelimit.{policy_name}.identifier สตริง อ่านอย่างเดียว แสดงข้อมูลอ้างอิงตัวระบุ (ไคลเอ็นต์) ที่แนบอยู่กับนโยบาย
ratelimit.{policy_name}.class สตริง อ่านอย่างเดียว แสดงคลาสที่เชื่อมโยงกับตัวระบุไคลเอ็นต์
ratelimit.{policy_name}.class.allowed.count ยาว อ่านอย่างเดียว แสดงผลจํานวนโควต้าที่อนุญาตซึ่งกําหนดไว้ในคลาส
ratelimit.{policy_name}.class.used.count ยาว อ่านอย่างเดียว แสดงผลโควต้าที่ใช้ภายในชั้นเรียน
ratelimit.{policy_name}.class.available.count ยาว อ่านอย่างเดียว แสดงผลจํานวนโควต้าที่ใช้ได้ในชั้นเรียน
ratelimit.{policy_name}.class.exceed.count ยาว อ่านอย่างเดียว แสดงผลจํานวนคําขอที่เกินขีดจํากัดในชั้นเรียนในช่วงโควต้าปัจจุบัน
ratelimit.{policy_name}.class.total.exceed.count ยาว อ่านอย่างเดียว แสดงจํานวนคําขอทั้งหมดที่เกินขีดจํากัดในชั้นเรียนตลอดช่วงเวลาโควต้าทั้งหมด ดังนั้นค่านี้คือผลรวมของ class.exceed.count สําหรับช่วงเวลาโควต้าทั้งหมด
ratelimit.{policy_name}.failed บูลีน อ่านอย่างเดียว

ระบุว่านโยบายดำเนินการไม่สำเร็จหรือไม่ (จริงหรือเท็จ)

ข้อมูลอ้างอิงข้อผิดพลาด

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.
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.
policies.ratelimit.InvalidMessageWeight 500 Occurs if the value of the <MessageWeight> element specified through a flow variable is invalid (a non-integer value).
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.
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.
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.
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.
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.
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.
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.
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.

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>

สคีมา

หัวข้อที่เกี่ยวข้อง

นโยบาย ResetQuota

SpikeArrest policy

การเปรียบเทียบนโยบายโควต้า การหยุดการเพิ่มขึ้นอย่างฉับพลัน และขีดจำกัดอัตราพร้อมกัน