Pemecahan masalah error Reset Quota

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

InvalidRLPolicy

Kode error

policies.resetquota.InvalidRLPolicy

Isi respons error

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Contoh pesan error

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Penyebab

Error ini terjadi jika kebijakan Kuota yang ditetapkan dalam elemen <Quota> kebijakan Reset Quota tidak ditetapkan di proxy API. Elemen <Quota> bersifat wajib dan mengidentifikasi kebijakan Kuota target yang penghitungnya harus diperbarui melalui kebijakan Reset Quota. Kebijakan Kuota target ini harus dibuat dan ditentukan dalam proxy API yang sama dan harus tersedia selama alur.

Misalnya, elemen <Quota> ditentukan seperti yang terlihat di bawah ini, tetapi jika MyQuotaPolicy tidak ditentukan dalam Proxy API, Anda akan mendapatkan error di atas.

<Quota name="MyQuotaPolicy">

Diagnosis

  1. Identifikasi nama kebijakan Kuota yang tidak valid yang ditentukan dalam kebijakan Reset Kuota. Anda dapat menemukan nama kebijakan Kuota dari faultstring. Misalnya, dalam faultstring berikut, nama kebijakan Kuota adalah MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Periksa setiap kebijakan Reset Quota di Proxy API yang mengalami kegagalan. Identifikasi kebijakan Reset Kuota tertentu jika kebijakan Kuota yang ditentukan dalam elemen wajib <Quota> cocok dengan nama yang diidentifikasi pada Langkah 1 di atas.

    Misalnya, kebijakan Reset Quota berikut menentukan kebijakan Kuota bernama MyQuotaPolicy, yang cocok dengan yang ada di faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
    
  3. Tentukan apakah kebijakan Kuota ini dibuat dan ditentukan dalam proxy API yang sama. Jika kebijakan Kuota tidak ada dalam proxy API yang sama, berarti itulah penyebab error.

    Pada contoh yang ditampilkan di atas, kebijakan Kuota MyQuotaPolicy seharusnya ada dalam flow sebelum kebijakan Reset Quota Reset_Quota_Demo dieksekusi.

    Karena MyQuotaPolicy Kebijakan Kuota tidak ada dalam alur, Anda akan menerima kode error:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Resolusi

Pastikan Kebijakan Kuota yang dideklarasikan dalam elemen <Quota> ditentukan di proxy API. Kebijakan Kuota target ini harus tersedia saat kebijakan Reset Kuota dijalankan.

FailedToResolveAllowCountRef

Kode error

policies.resetquota.FailedToResolveAllowCountRef

Isi respons error

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

Contoh pesan error

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

Catatan: Pesan error di atas tidak dikirim sebagai respons kepada klien. Data ini hanya terlihat di alat Rekaman Aktivitas sebagai error dari kebijakan Reset Kuota. Contoh tangkapan layar ditampilkan di bawah ini.

Pada bagian Properti, baris error diisi dengan pesan.

Error yang ditampilkan ke klien hanyalah: policies.ratelimit.QuotaViolation.

Penyebab

Error ini terjadi jika referensi ke variabel yang berisi jumlah yang diizinkan di elemen <Allow> kebijakan tidak dapat di-resolve menjadi sebuah nilai. Elemen ini bersifat wajib dan menentukan jumlah yang akan dikurangi untuk penghitung kuota.

Diagnosis

  1. Identifikasi kebijakan Reset Kuota tempat error terjadi dan nama variabel referensi yang tidak dapat diselesaikan. Anda dapat menemukan kedua item ini dalam respons error.

    Misalnya, dalam faultstring berikut, nama kebijakan adalah ResetQuota dan referensinya adalah request.header.allowcount:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. Dalam XML kebijakan Reset Quota yang gagal, pastikan nama variabel referensi yang digunakan cocok dengan nama referensi yang diidentifikasi dalam respons error (Langkah 1 di atas).

    Misalnya, kebijakan berikut menetapkan elemen dengan referensi bernama request.header.allowcount, yang cocok dengan yang ditampilkan dalam error:

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. Menentukan apakah variabel referensi telah ditetapkan dan tersedia dalam alur tempat kebijakan Reset Kuota dijalankan.

  4. Jika variabelnya:

    1. di luar cakupan (tidak tersedia di alur tertentu tempat kebijakan dijalankan) atau
    2. tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab {i>error<i}.

    Pada contoh yang ditampilkan di atas, nilai jumlah yang diizinkan dalam elemen <Allow> seharusnya diambil dari header permintaan yang bernama allowcount. Namun, Apigee tidak dapat me-resolve request.header.allowcount. Hal ini terjadi jika header allowcount tidak diteruskan sebagai bagian dari permintaan API.

    Berikut ini contoh permintaan API yang tidak meneruskan header allowcount sebagai bagian dari permintaan:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

    Karena header allowcount tidak diteruskan sebagai bagian dari permintaan, variabel request.header.allowcount yang digunakan dalam elemen <Allow> pada kebijakan Reset Kuota di atas tidak ditentukan sehingga tidak dapat diselesaikan. Jadi, Anda akan menerima respons error:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

Resolusi

Pastikan variabel yang dirujuk dalam elemen <Allow> ada/ditentukan dan tersedia di alur tertentu, tempat kebijakan Reset Kuota dijalankan.

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah permintaan untuk menyertakan header allowcount seperti yang ditunjukkan di bawah ini:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

FailedToResolveRLPolicy

Kode error

policies.resetquota.FailedToResolveRLPolicy

Isi respons error

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Contoh pesan error

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Penyebab

Error ini terjadi jika variabel yang dirujuk oleh atribut ref dalam elemen <Quota> tidak dapat di-resolve.

Misalnya, jika atribut ref ditetapkan sebagai request.header.quotapolicy dalam elemen <Quota>, tetapi tidak tersedia di alur proxy API, Anda akan mendapatkan error di atas.

<Quota ref="request.header.quotapolicy">

Diagnosis

  1. Periksa setiap kebijakan Reset Quota di Proxy API yang mengalami kegagalan dan identifikasi kebijakan Reset Quota apabila nama variabel referensi yang ditentukan dalam elemen <Quota> tidak dapat diselesaikan dengan benar.

  2. Menentukan apakah variabel ditetapkan dan tersedia dalam alur tempat kebijakan Reset Kuota dijalankan.

  3. Jika variabelnya:

    1. di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan dijalankan) atau
    2. tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab {i>error<i}.

    Pada contoh yang ditampilkan di bawah ini, nama kebijakan Kuota target seharusnya diambil dari header permintaan yang bernama quotapolicy. Namun, Apigee tidak dapat mengatasi request.header.quotapolicy. Hal ini terjadi jika quotapolicy header tidak diteruskan sebagai bagian dari permintaan API.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    Berikut adalah contoh permintaan API yang tidak meneruskan quotapolicy header sebagai bagian dari permintaan:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

    Karena header quotapolicy tidak diteruskan sebagai bagian dari permintaan, referensi request.header.quotapolicy yang digunakan dalam elemen <Quota> pada kebijakan Reset Kuota di atas tidak ditentukan dan tidak dapat diselesaikan. Akibatnya, Anda menerima respons error:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Resolusi

Pastikan atribut ref yang direferensikan dalam elemen <Quota> di-resolve saat runtime dan tersedia di alur tertentu, tempat kebijakan Reset Quota dijalankan.

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah permintaan untuk menyertakan header quotapolicy seperti yang ditunjukkan di bawah:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"

Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.