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

คุณกําลังดูเอกสารประกอบของ 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>
ปฏิทิน ไม่บังคับ

ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

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

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name สามารถ ประกอบด้วยตัวอักษร ตัวเลข การเว้นวรรค ขีดกลางสั้น ขีดล่าง และจุด ค่านี้ไม่สามารถ เกิน 255 อักขระ

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

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

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

องค์ประกอบ <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 บูลีน อ่านอย่างเดียว

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

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

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 เกิดขึ้นเมื่อไม่ได้กำหนดองค์ประกอบ <Interval> ภายในนโยบายโควต้า องค์ประกอบนี้ เป็นข้อมูลบังคับและใช้เพื่อระบุช่วงเวลาที่ใช้กับโควต้า ช่วงเวลา อาจเป็นนาที ชั่วโมง วัน สัปดาห์ หรือเดือนตามที่กำหนดไว้ในองค์ประกอบ <TimeUnit>
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 เกิดขึ้นเมื่อไม่ได้กำหนดองค์ประกอบ <TimeUnit> ภายในนโยบายโควต้า องค์ประกอบนี้ เป็นข้อมูลบังคับและใช้เพื่อระบุหน่วยเวลาที่ใช้กับโควต้า ช่วงเวลา อาจเป็นนาที ชั่วโมง วัน สัปดาห์ หรือเดือน
policies.ratelimit.InvalidMessageWeight 500 เกิดขึ้นเมื่อค่าขององค์ประกอบ <MessageWeight> ที่ระบุผ่านตัวแปรโฟลว์ ไม่ถูกต้อง (ค่าที่ไม่ใช่จำนวนเต็ม)
policies.ratelimit.QuotaViolation 500 เกินโควต้าแล้ว ไม่มี

ข้อผิดพลาดในการทำให้ใช้งานได้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
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 เป็น flexi หรือ rolling window ในองค์ประกอบ <Quota> แล้วตามด้วยค่า การทำให้พร็อกซี API ใช้งานได้ล้มเหลว
InvalidTimeUnitForDistributedQuota หากตั้งค่าองค์ประกอบ <Distributed> เป็น true และตั้งค่าองค์ประกอบ <TimeUnit> เป็น second การทำให้พร็อกซี API ใช้งานได้ล้มเหลว หน่วยเวลา second ไม่ถูกต้องสำหรับ โควต้าแบบกระจาย
InvalidSynchronizeIntervalForAsyncConfiguration หากค่าที่ระบุสำหรับองค์ประกอบ <SyncIntervalInSeconds> ภายในองค์ประกอบ องค์ประกอบ <AsynchronousConfiguration> ในนโยบายโควต้ามีค่าน้อยกว่า 0 ดังนั้นค่า การทำให้พร็อกซี API ใช้งานได้ล้มเหลว
InvalidAsynchronizeConfigurationForSynchronousQuota หากค่าขององค์ประกอบ <AsynchronousConfiguration> ได้รับการตั้งค่าเป็น true ในนโยบายโควต้า ซึ่ง มีการกำหนดค่าอะซิงโครนัสโดยใช้องค์ประกอบ <AsynchronousConfiguration> แล้ว การทำให้พร็อกซี API ใช้งานได้ล้มเหลว

ตัวแปรความผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name Matches "QuotaViolation"
ratelimit.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด ratelimit.QT-QuotaPolicy.failed = true

ตัวอย่างการตอบสนองข้อผิดพลาด

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

ตัวอย่างกฎข้อผิดพลาด

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

สคีมา

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

นโยบาย ResetQuota

SpikeArrest policy

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