Pemecahan masalah error Reset Quota

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat Dokumentasi Apigee Edge.

ini.

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 ditentukan dalam elemen <Quota> Kebijakan Reset Kuota tidak ditetapkan di proxy API. Elemen <Quota> bersifat wajib dan mengidentifikasi kebijakan Kuota target yang penghitungnya harus diperbarui melalui kebijakan Reset Kuota. Kebijakan Kuota target ini harus dibuat dan ditentukan di dalam proxy API yang sama dan harus tersedia selama alur

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

<Quota name="MyQuotaPolicy">

Diagnosis

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

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Periksa setiap kebijakan Reset Quota di Proxy API yang kegagalannya yang terjadi. Mengidentifikasi kebijakan Reset Quota di mana 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 Quota 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 ditetapkan dalam proxy API yang sama. Jika tidak ada kebijakan Kuota di proxy API yang sama, itulah penyebabnya error tersebut.

    Pada contoh yang ditampilkan di atas, kebijakan Kuota MyQuotaPolicy seharusnya ada dalam alur sebelum kebijakan Reset Kuota Reset_Quota_Demo dijalankan.

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

"errorcode": "policies.resetquota.InvalidRLPolicy"

Resolusi

Pastikan Kebijakan Kuota yang dideklarasikan dalam elemen <Quota> ditentukan dalam Proxy API. Kebijakan Kuota target ini harus tersedia saat kebijakan Reset Kuota akan 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 terhadap klien. Penting hanya terlihat di alat Trace sebagai error dari kebijakan Reset Quota. Screenshot contoh ditampilkan di bawah ini.

Di bagian Properti, baris error diisi dengan pesan.

Error yang ditampilkan ke klien akan berupa: policies.ratelimit.QuotaViolation.

Penyebab

Kesalahan ini terjadi jika referensi ke variabel yang berisi jumlah {i>allow<i} dalam elemen <Allow> kebijakan tidak dapat di-resolve menjadi nilai. Ini bersifat wajib dan menentukan jumlah yang akan mengurangi penghitung kuota.

Diagnosis

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

    Misalnya, dalam faultstring berikut, nama kebijakannya 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, verifikasi bahwa nama referensinya variabel yang digunakan cocok dengan nama referensi yang diidentifikasi dalam respons error (Langkah 1 di atas).

    Misalnya, kebijakan berikut menyetel elemen dengan referensi bernama request.header.allowcount, yang cocok dengan yang ada di 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. Tentukan apakah variabel referensi didefinisikan dan tersedia dalam alur dalam tempat kebijakan Reset Kuota akan dijalankan.

  4. Jika variabelnya adalah:

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

    maka itulah penyebab kesalahannya.

    Pada contoh yang ditampilkan di atas, nilai jumlah yang diizinkan di elemen <Allow> seharusnya diambil dari header permintaan bernama allowcount. Namun, Apigee tidak dapat menyelesaikan 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 permintaan:

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

    Jika your_host_alias adalah domain yang tersedia secara publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan konfigurasi penggantian.

    Karena header allowcount tidak diteruskan sebagai bagian dari permintaan, variabel request.header.allowcount digunakan dalam elemen <Allow> pada Reset di atas Kebijakan kuota 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 bisa mengubah permintaan untuk menyertakan allowcount seperti ditunjukkan di bawah ini:

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

Jika your_host_alias adalah domain yang tersedia secara publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan konfigurasi penggantian.

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 dirujuk oleh atribut ref dalam atribut Elemen <Quota> tidak dapat diselesaikan.

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

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

Diagnosis

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

  2. Tentukan apakah variabel didefinisikan dan tersedia dalam aliran di mana Kebijakan Reset Kuota akan dijalankan.

  3. Jika variabelnya adalah:

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

    maka itulah penyebab kesalahannya.

    Pada contoh yang ditampilkan di bawah, nama kebijakan Kuota target seharusnya yang diambil dari header permintaan yang bernama quotapolicy. Namun, Apigee tidak dapat untuk menyelesaikan request.header.quotapolicy. Hal ini terjadi jika header quotapolicy 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 ini contoh permintaan API yang tidak meneruskan header quotapolicy seperti permintaan:

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

    Jika your_host_alias adalah domain yang tersedia secara publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan konfigurasi penggantian.

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

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Resolusi

Pastikan atribut ref yang dirujuk dalam elemen <Quota> di-resolve pada dan tersedia di alur tertentu, tempat kebijakan Reset Kuota dijalankan.

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

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

Jika your_host_alias adalah domain yang tersedia secara publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan konfigurasi penggantian.