Pemecahan masalah error runtime kuota

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

InvalidMessageWeight

Kode error

policies.ratelimit.InvalidMessageWeight

Isi respons error

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

Contoh Pesan Error

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

Penyebab

Error ini terjadi jika nilai elemen <MessageWeight> yang ditentukan melalui variabel flow tidak valid (nilai non-bilangan bulat).

Misalnya, error ini akan terjadi jika nilai variabel flow yang ditentukan untuk elemen <MessageWeight> adalah 1,5 (nilai non-bilangan bulat).

Diagnosis

  1. Identifikasi nilai tidak valid yang digunakan untuk elemen <MessageWeight> dalam kebijakan Kuota. Anda dapat menemukan informasi ini dalam elemen faultstring respons error. Misalnya, dalam error berikut, nilai yang tidak valid digunakan untuk elemen <MessageWeight> adalah 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Periksa semua kebijakan Kuota di Proxy API tertentu yang mengalami kegagalan. Mungkin ada satu atau beberapa kebijakan Kuota tempat elemen <MessageWeight> ditentukan.

    Misalnya, kebijakan berikut menentukan <MessageWeight>melalui variabel flowmessage_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. Tentukan nilai variabel yang digunakan untuk <MessageWeight> dalam Kebijakan Kuota yang diidentifikasi. Nilai variabel flow dapat diekstrak dari header HTTP, parameter kueri, payload permintaan XML atau JSON, atau ditentukan dalam kebijakan lain:

    1. Temukan kode dalam paket Proxy API tempat variabel ditentukan terlebih dahulu.
    2. Setelah Anda mengetahui kebijakan yang menentukan dan mengisi variabel terlebih dahulu, periksa cara nilai untuk variabel ditetapkan.
    3. Jika nilai variabel flow cocok dengan nilai yang diidentifikasi pada Langkah #1 di atas, maka itulah penyebab error.

    Misalnya, asumsikan bahwa kebijakan JavaScript yang digunakan sebelum Kebijakan Kuota menetapkan variabel message_weight berdasarkan jenis permintaan seperti yang ditunjukkan di bawah ini:

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

    Perhatikan bahwa nilai variabel message_weight adalah 1.5 yang merupakan nilai yang tidak valid (bukan bilangan bulat).

Resolusi

Pastikan nilai yang mewakili MessageWeight yang ditentukan oleh variabel flow adalah nilai yang valid (nilai bilangan bulat).

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah nilai variabel message_weight dalam JavaScript menjadi bilangan bulat.

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

FailedToResolveQuotaIntervalReference

Kode error

policies.ratelimit.FailedToResolveQuotaIntervalReference

Isi respons error

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

Contoh Pesan Error

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

Penyebab

Error ini terjadi jika elemen <Interval> tidak ditetapkan dalam kebijakan Kuota. Elemen ini bersifat wajib dan digunakan untuk menentukan interval waktu yang berlaku untuk kuota. Interval waktu dapat berupa menit, jam, hari, minggu, atau bulan seperti yang ditentukan dengan elemen <TimeUnit>.

Diagnosis

  1. Periksa setiap kebijakan Kuota di Proxy API tempat kegagalan terjadi. Jika ada kebijakan Kuota dengan elemen wajib <Interval> tidak ditentukan, berarti itulah yang menyebabkan error.

    Misalnya, kebijakan Kuota berikut tidak memiliki elemen wajib <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>
    

    Karena elemen wajib <TimeUnit> tidak ditentukan dalam kebijakan Kuota di atas, Anda akan menerima kode error:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Resolusi

Pastikan semua kebijakan Kuota untuk proxy API tertentu memiliki elemen wajib <Interval> yang ditentukan dengan benar.

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah kebijakan untuk menyertakan elemen <Interval> seperti yang ditunjukkan di bawah.

<?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

Kode error

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Isi respons error

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

Contoh Pesan Error

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

Penyebab

Error ini terjadi jika elemen <TimeUnit> tidak ditetapkan dalam kebijakan Kuota. Elemen ini bersifat wajib dan digunakan untuk menentukan satuan waktu yang berlaku untuk kuota. Interval waktunya bisa dalam menit, jam, hari, minggu, atau bulan.

Diagnosis

  1. Periksa setiap kebijakan Kuota di Proxy API tempat kegagalan terjadi. Jika ada kebijakan Kuota dengan elemen wajib <TimeUnit> tidak ditentukan, berarti itulah yang menyebabkan error.

    Misalnya, kebijakan Kuota berikut tidak memiliki elemen wajib <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>
    

    Karena elemen wajib <TimeUnit> tidak ditentukan dalam kebijakan Kuota di atas, Anda akan menerima kode error:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Resolusi

Pastikan semua kebijakan Kuota untuk proxy API tertentu memiliki elemen wajib <TimeUnit> yang ditentukan.

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah kebijakan untuk menyertakan elemen <TimeUnit> seperti yang ditunjukkan di bawah.

<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>