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

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

อะไร

ใช้นโยบายโควต้าเพื่อกำหนดค่าจำนวนข้อความคำขอที่พร็อกซี API อนุญาต ช่วงเวลา เช่น นาที ชั่วโมง วัน สัปดาห์ หรือเดือน คุณสามารถตั้งค่าโควต้าเป็น เหมือนกันสำหรับแอปทั้งหมดที่เข้าถึงพร็อกซี API หรือคุณอาจตั้งค่าโควต้าตามข้อมูลต่อไปนี้

  • ผลิตภัณฑ์ที่มีพร็อกซี API
  • แอปที่ขอ API
  • นักพัฒนาแอป
  • เกณฑ์อื่นๆ อีกมากมาย

อย่าใช้โควต้าเพื่อป้องกันการเพิ่มขึ้นของการเข้าชมโดยรวม สำหรับการเล่นแบบนั้น ให้ใช้เครื่องหมาย Spike Arrest ดู Spike Arrest

วิดีโอ

วิดีโอเหล่านี้จะแนะนำการจัดการโควต้าด้วยนโยบายโควต้า

บทนำ (New 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 Google อื่นๆเพิ่มเติม

ในตัวอย่างด้านบน พร็อกซี 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 ชั่วโมง ด้วยเหตุนี้ จะมีการรีเฟรชครั้งต่อไปในวันที่ 18 กุมภาพันธ์ 2017 เวลา 15.30 น. GMT

ตัวนับการเข้าถึง

<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 ครั้งต่อชั่วโมง นโยบายจะรีเซ็ต ตัวนับโควต้าที่ด้านบนของแต่ละชั่วโมง หากตัวนับถึงโควต้าการโทร 10,000 ครั้ง ก่อนสิ้นสุดชั่วโมง สายที่เกิน 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 การโทรที่เกินจากจำนวนดังกล่าวจะถูกปฏิเสธจนกว่า จำนวนจะรีเซ็ตที่ด้านบนของชั่วโมง

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

รูปแบบของโควต้าที่เรียกว่า SpikeArrest ช่วยป้องกันการเพิ่มขึ้นของการเข้าชม (หรือจำนวนพุ่งสูงขึ้น) ที่อาจเป็นไปได้ เกิดจากการใช้งานที่เพิ่มขึ้นอย่างฉับพลัน ไคลเอ็นต์ที่มีข้อบกพร่อง หรือการโจมตีที่เป็นอันตราย สำหรับข้อมูลเพิ่มเติม ข้อมูลเกี่ยวกับ SpikeArrest โปรดดูนโยบายเกี่ยวกับ SpikeArrest

โควต้าจะมีผลกับพร็อกซี API แต่ละรายการ และจะไม่กระจายไปยังพร็อกซี API ตัวอย่างเช่น หากคุณมีพร็อกซี API 3 รายการในผลิตภัณฑ์ API โควต้าเดียวจะไม่มีการใช้ร่วมกันในทั้ง 3 รายการ แม้ว่าผลิตภัณฑ์ทั้ง 3 ประเภทจะใช้การกำหนดค่านโยบายโควต้าเดียวกัน

ประเภทนโยบายโควต้า

นโยบายโควต้ารองรับนโยบายหลายประเภท ได้แก่ ค่าเริ่มต้น calendar flexi และ rollingwindow แต่ละประเภทจะกำหนดเวลาที่ตัวนับโควต้า จะเริ่มต้นและรีเซ็ตเมื่อใด ดังที่แสดงในตารางต่อไปนี้

หน่วยเวลา รีเซ็ตเป็นค่าเริ่มต้น (หรือ Null) รีเซ็ตปฏิทิน รีเซ็ตแบบยืดหยุ่น
นาที เริ่มนาทีถัดไป 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 น. หากไม่ได้เกินขีดจำกัดโควต้า สองชั่วโมง คำขอจะได้รับอนุญาต

1 นาทีต่อมา เวลา 16:46 น. คำขอใหม่เข้ามา ตอนนี้นโยบายจะคำนวณ จำนวนโควต้าตั้งแต่ 14:46 น. เพื่อดูว่าเกินขีดจำกัดหรือไม่

สำหรับประเภท rollingwindow ตัวนับจะไม่รีเซ็ต แต่ ระบบจะคำนวณใหม่ในคำขอแต่ละรายการ

การทำความเข้าใจตัวนับโควต้า

โดยค่าเริ่มต้น นโยบายโควต้าจะใช้ตัวนับเพียงตัวเดียว โดยไม่คำนึงถึงจำนวนครั้งที่ อ้างอิงในพร็อกซี API ชื่อของตัวนับโควต้าจะอิงตาม แอตทริบิวต์ name ของนโยบาย

เช่น คุณสร้างนโยบายโควต้าชื่อ MyQuotaPolicy ที่มีขีดจำกัด 5 แล้วนำไปวางในหลายโฟลว์ (โฟลว์ A, B และ C) ในพร็อกซี API แม้ว่าจะเป็น ซึ่งใช้ในหลายๆ ขั้นตอน ตัวนับจะเป็นตัวเดียวที่มีการอัปเดตโดยอินสแตนซ์ทุกรายการ นโยบาย:

  • ดำเนินการโฟลว์ A แล้ว -> ดำเนินการ MyBidPolicy ดําเนินการและตัวนับ = 1
  • ดำเนินการขั้นตอน B -> ดำเนินการตาม MyBidPolicy แล้วตัวนับ = 2
  • ดำเนินการโฟลว์ A แล้ว -> ดำเนินการตาม MyBidPolicy ดําเนินการและตัวนับ = 3
  • ดำเนินการโฟลว์ C แล้ว -> ดำเนินการ MyBidPolicy ดําเนินการและตัวนับ = 4
  • ดำเนินการโฟลว์ A แล้ว -> ดำเนินการ MyBidPolicy ดําเนินการและตัวนับ = 5

คำขอถัดไปจาก 3 ขั้นตอนถูกปฏิเสธเนื่องจากใช้ตัวนับโควต้าแล้ว ขีดจำกัด

การใช้นโยบายโควต้าเดียวกันมากกว่า 1 ที่ในขั้นตอนพร็อกซี API ซึ่งสามารถ ทำให้โควต้าหมดเร็วกว่าที่คาดไว้โดยไม่ได้ตั้งใจ ซึ่งเป็นรูปแบบที่แก้ไขไม่ได้ที่อธิบายไว้ใน หนังสือของ Apigee Edge Antipatterns

หรือจะกำหนดนโยบายโควต้าหลายรายการในพร็อกซี API และใช้ ในแต่ละขั้นตอน นโยบายโควต้าแต่ละรายการจะรักษาตัวนับของตนเอง โดยขึ้นอยู่กับ แอตทริบิวต์ name ของนโยบาย

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

หมายเหตุเวลา

กำหนดเวลาของโควต้าทั้งหมดเป็นสากลเชิงพิกัด เขตเวลา (UTC)

ค่าเวลาของโควต้าเป็นไปตามค่าวันที่มาตรฐานสากลที่กำหนดไว้ใน International มาตรฐาน ISO 8601

วันที่จะกำหนดเป็นปี เดือน และวันในรูปแบบต่อไปนี้: YYYY-MM-DD เช่น 2015-02-04 แสดงถึงวันที่ 4 กุมภาพันธ์ 2015

เวลาของวันระบุเป็นชั่วโมง นาที และวินาทีในรูปแบบต่อไปนี้ hours:minutes:seconds เช่น 23:59:59 จะแสดงเวลาหนึ่ง วินาที ก่อนเที่ยงคืน

โปรดทราบว่าสัญกรณ์ 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.* ตัวแปรด้านล่างจะใช้งานได้โดยค่าเริ่มต้นเมื่อ นโยบายคีย์ API การยืนยันที่ชื่อ "VerifyAPIKey" ใช้เพื่อตรวจสอบคีย์ API ของแอปในคำขอ ค่าตัวแปรมาจากการตั้งค่าโควต้าในผลิตภัณฑ์ API ที่เชื่อมโยงกับคีย์ กับ ตามที่อธิบายไว้ใน การรับการตั้งค่าโควต้าจากผลิตภัณฑ์ API การกำหนดค่า

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

&lt;Quota&gt; แอตทริบิวต์

<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 ของนโยบายจะเป็น

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

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

ระบุขีดจำกัดจำนวนโควต้า หากการยื่นเรื่องโต้แย้งสำหรับนโยบายถึงขีดจำกัดนี้ การเรียกครั้งต่อๆ มาจะถูกปฏิเสธจนกว่าตัวนับจะรีเซ็ต

ด้านล่างนี้คือ 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 ของเดือนจะระบุโควต้าข้อความเป็น 100 ข้อความต่อเดือน

2000 ไม่บังคับ
countRef

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

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

&lt;Allow&gt;/&lt;Class&gt; องค์ประกอบ

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

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

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

ใช้เพื่อระบุตัวแปรโฟลว์ที่มีคลาสโควต้าสำหรับโควต้า

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

&lt;Allow&gt;/&lt;Class&gt;/&lt;Allow&gt; องค์ประกอบ

องค์ประกอบ <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

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

กำหนดชื่อตัวนับโควต้า

ไม่มี ต้องระบุ
จำนวน ระบุขีดจำกัดโควต้าสำหรับตัวนับ ไม่มี ต้องระบุ

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

ใช้เพื่อระบุจำนวนเต็ม (เช่น 1, 2, 5, 60 เป็นต้น) ที่จะจับคู่กับ TimeUnit ที่คุณระบุ (นาที ชั่วโมง วัน สัปดาห์ หรือเดือน) เพื่อกำหนดเวลา ช่วงที่ Edge คำนวณการใช้โควต้า

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

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ
ประเภท: จำนวนเต็ม

Attributes

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

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

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

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

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

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

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

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

Attributes

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

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

เมื่อตั้งค่า type เป็น calendar, จะเป็นการระบุวันที่ และเวลาที่ตัวนับโควต้าจะเริ่มนับ ไม่ว่าจะมีคำขอใดๆ ที่ได้รับจากแอปใดๆ

คุณต้องระบุ StartTime อย่างชัดแจ้งเมื่อมีการตั้งค่า type อย่างชัดแจ้ง ไปยัง calendar, คุณไม่สามารถใช้การอ้างอิงตัวแปรโฟลว์ได้ หากระบุ ค่า StartTime เมื่อไม่ได้ตั้งค่า type คุณจะได้รับ

เช่น

<StartTime>2017-7-16 12:00:00</StartTime>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุเมื่อตั้งค่า type เป็น calendar
ประเภท:

สตริงใน ISO 8601 รูปแบบวันที่และเวลา

<เผยแพร่แล้ว> องค์ประกอบ

การติดตั้ง Edge จะใช้ตัวประมวลผลข้อความ (Message Processor) อย่างน้อย 1 ตัวเพื่อประมวลผลคำขอได้ ตั้งค่าสิ่งนี้ เป็น true เพื่อระบุว่านโยบายควรรักษา และซิงค์ข้อมูลอย่างต่อเนื่องกับตัวประมวลผลข้อความ (Message Processor) ทั้งหมดอย่างต่อเนื่อง โปรเซสเซอร์ข้อความ จะอยู่ในโซนและ/หรือภูมิภาคที่พร้อมใช้งานได้

หากใช้ค่าเริ่มต้น false อาจทำให้เกินโควต้าเนื่องจาก จำนวนของผู้ประมวลผลข้อความแต่ละรายที่จะไม่ถูกแชร์ ได้แก่

<Distributed>true</Distributed>

เพื่อรับประกันว่าตัวนับจะซิงค์และอัปเดตในทุกคำขอ ให้ตั้งค่า <Distributed> และ <Synchronous> เป็นจริง:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
ค่าเริ่มต้น: เท็จ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: บูลีน

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

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

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

ช่วงเวลาการอัปเดตแบบไม่พร้อมกันเริ่มต้นคือ 10 วินาที ใช้เมนู AsynchronousConfiguration ที่จะกำหนดค่าลักษณะการทำงานแบบไม่พร้อมกันนี้

<Synchronous>false</Synchronous>
ค่าเริ่มต้น: เท็จ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: บูลีน

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

กำหนดค่าช่วงเวลาการซิงค์ข้อมูลระหว่างตัวนับโควต้าแบบกระจายเมื่อนโยบาย องค์ประกอบการกำหนดค่า <Synchronous> ไม่มีอยู่ หรือไม่มีอยู่และตั้งค่าเป็น ไปยัง false

คุณสามารถซิงค์ข้อมูลหลังจากช่วงเวลาหนึ่งหรือจำนวนข้อความ โดยใช้ องค์ประกอบย่อย SyncIntervalInSeconds หรือ SyncMessageCount ผลิตภัณฑ์ทั้งสองแยกกันต่างหาก ตัวอย่างเช่น

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

หรือ

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
ค่าเริ่มต้น: SyncIntervalInSeconds = 10 วินาที
การตรวจหาบุคคล: ไม่บังคับ ละเว้นเมื่อตั้งค่า <Synchronous> เป็น true
ประเภท:

อาคารและพื้นที่โดยรอบ

&lt;AsynchronousConfiguration&gt;/&lt;SyncIntervalInSeconds&gt; องค์ประกอบ

ใช้เพื่อลบล้างลักษณะการทำงานเริ่มต้นเมื่อมีการอัปเดตแบบไม่พร้อมกันหลังจาก เป็นช่วง 10 วินาที

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

ช่วงเวลาการซิงค์ต้อง >= 10 วินาที ตามที่อธิบายไว้ใน หัวข้อขีดจำกัด

ค่าเริ่มต้น: 10
การตรวจหาบุคคล: ไม่บังคับ
ประเภท:

จำนวนเต็ม

&lt;AsynchronousConfiguration&gt;/&lt;SyncMessageCount&gt; องค์ประกอบ

ระบุจำนวนคำขอจากผู้ประมวลผลข้อมูลข้อความ Apigee ทั้งหมดระหว่างโควต้า อัปเดต

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

ตัวอย่างนี้ระบุว่าจำนวนโควต้าจะได้รับการอัปเดตทุกๆ 5 คำขอใน Apigee แต่ละรายการ ระบบประมวลผลข้อความ Edge

ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท:

จำนวนเต็ม

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

ใช้องค์ประกอบ <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

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

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

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

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

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

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

ใช้เพื่อระบุน้ำหนักที่กำหนดให้แต่ละข้อความ ใช้น้ำหนักข้อความเพื่อเพิ่มผลลัพธ์ของ เช่น จะขอข้อความที่ใช้ทรัพยากรในการคำนวณมากกว่าทรัพยากรอื่นๆ

เช่น คุณต้องการนับข้อความ POST ว่ามีขนาด "หนัก" เป็น 2 เท่า หรือแพงๆ อย่าง GET ข้อความ คุณจึงตั้งค่า MessageWeight เป็น 2 สำหรับ POST และ 1 สำหรับ ดาวน์โหลด คุณยังตั้งค่า MessageWeight เป็น 0 ได้เพื่อไม่ให้คำขอ มีผลต่อตัวนับ ในตัวอย่างนี้ หากโควต้าคือ 10 ข้อความต่อนาทีและ MessageWeight สำหรับคำขอ POST คือ 2 ดังนั้นโควต้าจะ อนุญาตให้มีคำขอ POST 5 รายการในช่วง 10 นาทีใดก็ได้ คำขอเพิ่มเติม เช่น POST หรือ GET ก่อนที่การรีเซ็ตตัวนับจะถูกปฏิเสธ

ต้องระบุค่าที่แสดงถึง MessageWeight โดยโฟลว์ และสามารถดึงข้อมูลจากส่วนหัว HTTP พารามิเตอร์การค้นหา คำขอ XML หรือ JSON เพย์โหลด หรือตัวแปรโฟลว์อื่นๆ ตัวอย่างเช่น คุณตั้งค่าไว้ในส่วนหัวชื่อ weight:

<MessageWeight ref="message_weight"/>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท:

จำนวนเต็ม

ตัวแปรโฟลว์

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

ตัวแปร ประเภท สิทธิ์ คำอธิบาย
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>

สคีมา

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

นโยบายรีเซ็ตโควต้า

SpikeArrest นโยบาย

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