Pemecahan masalah error runtime kuota

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

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 alur 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 yang tidak valid yang digunakan untuk elemen <MessageWeight> dalam kebijakan Kuota. Anda dapat menemukan informasi ini di elemen faultstring respons error. Misalnya, dalam error berikut, nilai yang tidak valid yang digunakan untuk elemen <MessageWeight> adalah 1.5:

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

    Misalnya, kebijakan berikut menentukan <MessageWeight>melalui variabel alurmessage_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 alur dapat diekstrak dari header HTTP, parameter kueri, payload permintaan XML atau JSON, atau ditentukan dalam kebijakan lain:

    1. Cari kode dalam paket Proxy API tempat variabel ditentukan terlebih dahulu.
    2. Setelah Anda mengetahui kebijakan tempat variabel ditentukan dan diisi terlebih dahulu, periksa cara penetapan nilai untuk variabel tersebut.
    3. Jika nilai variabel flow cocok dengan nilai yang diidentifikasi pada Langkah #1 di atas, berarti 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:

    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 tidak valid (bukan bilangan bulat).

Resolusi

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

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah nilai variabel message_weight di 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 ditentukan 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 yang tidak menentukan elemen wajib <Interval>, hal tersebut adalah penyebab 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 waktu dapat dalam menit, jam, hari, minggu, atau bulan.

Diagnosis

  1. Periksa setiap kebijakan Kuota di Proxy API tempat kegagalan terjadi. Jika ada kebijakan Kuota yang tidak menentukan elemen wajib <TimeUnit>, hal tersebut adalah penyebab 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>