การแก้ปัญหาข้อผิดพลาดของรันไทม์โควต้า

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

InvalidMessageWeight

รหัสข้อผิดพลาด

policies.ratelimit.InvalidMessageWeight

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

ตัวอย่างข้อความแสดงข้อผิดพลาด

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากค่าขององค์ประกอบ <MessageWeight> ที่ระบุผ่านตัวแปรการไหลไม่ถูกต้อง (ไม่ใช่ค่าจำนวนเต็ม)

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

การวินิจฉัย

  1. ระบุค่าที่ไม่ถูกต้องที่ใช้กับองค์ประกอบ <MessageWeight> ในนโยบายโควต้า คุณดูข้อมูลนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในข้อผิดพลาดต่อไปนี้ ค่าที่ไม่ถูกต้องที่ใช้สำหรับองค์ประกอบ <MessageWeight> คือ 1.5

    "faultstring": "Invalid message weight value 1.5"
    
  2. ตรวจสอบนโยบายโควต้าทั้งหมดในพร็อกซี API ที่เฉพาะเจาะจงซึ่งเกิดข้อผิดพลาด อาจมีนโยบายโควต้าอย่างน้อย 1 รายการที่ระบุองค์ประกอบ <MessageWeight>

    ตัวอย่างเช่น นโยบายต่อไปนี้ระบุ<MessageWeight>ผ่านตัวแปรการไหลmessage_weight

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="Quota_with_weight" type="calendar">
        <DisplayName>Quota_with_weight</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="message_weight"/>
    </Quota>
    
  3. กำหนดค่าของตัวแปรที่ใช้สำหรับ <MessageWeight> ในนโยบายโควต้าที่ระบุ ระบบจะดึงค่าของตัวแปรการไหลได้จากส่วนหัว HTTP, พารามิเตอร์การค้นหา, เพย์โหลดคําขอ XML หรือ JSON หรือกําหนดไว้ในนโยบายอื่น

    1. ค้นหาโค้ดภายในพูล API Proxy ที่กําหนดตัวแปรไว้ก่อน
    2. เมื่อทราบนโยบายที่กําหนดตัวแปรและป้อนข้อมูลไว้แล้ว ให้ตรวจสอบวิธีตั้งค่าค่าสําหรับตัวแปร
    3. หากค่าของตัวแปรการไหลตรงกับค่าที่ระบุไว้ในขั้นตอนที่ 1 ด้านบน แสดงว่านี่คือสาเหตุของข้อผิดพลาด

    ตัวอย่างเช่น สมมติว่านโยบาย JavaScript ที่ใช้ก่อนนโยบายโควต้าตั้งค่าตัวแปร message_weight ตามประเภทคำขอดังที่แสดงด้านล่าง

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    โปรดทราบว่าค่าของตัวแปร message_weight คือ 1.5 ซึ่งเป็นค่าที่ไม่ถูกต้อง (ไม่ใช่จำนวนเต็ม)

ความละเอียด

ตรวจสอบว่าค่าที่แทน MessageWeight ที่ตัวแปรโฟลว์ระบุเป็นค่าที่ถูกต้อง (ค่าจำนวนเต็ม)

หากต้องการแก้ไขตัวอย่างที่แสดงด้านบน คุณสามารถแก้ไขค่าของตัวแปร message_weight ใน JavaScript ให้เป็นจำนวนเต็มได้

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveQuotaIntervalReference

รหัสข้อผิดพลาด

policies.ratelimit.FailedToResolveQuotaIntervalReference

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

ตัวอย่างข้อความแสดงข้อผิดพลาด

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากไม่ได้กําหนดองค์ประกอบ <Interval> ภายในนโยบายโควต้า องค์ประกอบนี้ต้องระบุและใช้เพื่อระบุช่วงเวลาที่มีผลกับโควต้า ช่วงเวลาอาจเป็นนาที ชั่วโมง วัน สัปดาห์ หรือเดือนตามที่กำหนดโดยองค์ประกอบ <TimeUnit>

การวินิจฉัย

  1. ตรวจสอบนโยบายโควต้าแต่ละรายการใน API Proxy ที่เกิดความล้มเหลว หากมีนโยบายโควต้าที่ไม่ได้กำหนดองค์ประกอบ <Interval> ที่เป็นองค์ประกอบบังคับ ปัญหานี้อาจเกิดจากนโยบายดังกล่าว

    ตัวอย่างเช่น นโยบายโควต้าต่อไปนี้ไม่มีองค์ประกอบ <Interval> ที่ต้องระบุ

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
        <DisplayName>CheckQuota</DisplayName>
        <Properties/>
        <Allow count="3"/>
            <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

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

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

ความละเอียด

ตรวจสอบว่านโยบายโควต้าทั้งหมดสำหรับพร็อกซี API หนึ่งๆ กำหนดองค์ประกอบ <Interval> ที่จำเป็นอย่างถูกต้อง

หากต้องการแก้ไขตัวอย่างที่แสดงด้านบน คุณสามารถแก้ไขนโยบายให้รวมองค์ประกอบ <Interval> ดังที่แสดงด้านล่าง

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

รหัสข้อผิดพลาด

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

ตัวอย่างข้อความแสดงข้อผิดพลาด

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

สาเหตุ

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

การวินิจฉัย

  1. ตรวจสอบนโยบายโควต้าแต่ละรายการใน API Proxy ที่เกิดความล้มเหลว หากมีนโยบายโควต้าที่ไม่ได้กำหนดองค์ประกอบ <TimeUnit> ที่เป็นองค์ประกอบบังคับ ปัญหานี้อาจเกิดจากนโยบายดังกล่าว

    ตัวอย่างเช่น นโยบายโควต้าต่อไปนี้ไม่มีองค์ประกอบ <TimeUnit> ที่ต้องระบุ

    <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
      <DisplayName>CheckQuota</DisplayName>
      <Properties/>
      <Allow count="3"/>
          <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
      <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

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

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

ความละเอียด

ตรวจสอบว่านโยบายโควต้าทั้งหมดสำหรับพร็อกซี API หนึ่งๆ มีการกําหนดองค์ประกอบ <TimeUnit> ที่จําเป็น

หากต้องการแก้ไขตัวอย่างที่แสดงด้านบน คุณสามารถแก้ไขนโยบายให้รวมองค์ประกอบ <TimeUnit> ดังที่แสดงด้านล่าง

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>