Kota çalışma zamanı hatasıyla ilgili sorunları giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

InvalidMessageWeight

Hata kodu

policies.ratelimit.InvalidMessageWeight

Hata yanıtı gövdesi

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

Örnek Hata Mesajı

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

Neden

Bu hata, bir akış değişkeniyle belirtilen <MessageWeight> öğesinin değeri geçersizse (tam sayı olmayan bir değer) ortaya çıkar.

Örneğin, <MessageWeight> öğesi için belirtilen akış değişkeninin değeri 1,5 (tam sayı olmayan bir değer) ise bu hata oluşur.

Teşhis

  1. Kota politikasında <MessageWeight> öğesi için kullanılan geçersiz değeri tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki hatada <MessageWeight> öğesi için kullanılan geçersiz değer 1.5 şeklindedir:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Hatanın oluştuğu API Proxy'sinde tüm Kota politikalarını inceleyin. <MessageWeight> öğesinin belirtildiği bir veya daha fazla Kota politikası olabilir.

    Örneğin, aşağıdaki politika <MessageWeight>bir akış değişkeni aracılığıylamessage_weight değerini belirtir:

    <?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. Tanımlanan Kota Politikalarında <MessageWeight> için kullanılan değişkenin değerini belirleyin. Akış değişkeninin değeri; HTTP üst bilgilerinden, sorgu parametrelerinden, XML veya JSON istek yükünden çıkarılabilir veya başka bir politikada tanımlanabilir:

    1. API Proxy paketinde, değişkenin ilk tanımlandığı kodu bulun.
    2. Önce değişkenin tanımlandığı ve doldurulduğu politikayı öğrendikten sonra, değişken değerinin nasıl ayarlandığını kontrol edin.
    3. Akış değişkeninin değeri yukarıdaki 1. Adım'da tanımlanan değerle eşleşiyorsa hatanın nedeni budur.

    Örneğin, Kota Politikası'ndan önce kullanılan bir JavaScript politikasının aşağıda gösterildiği gibi istek türüne göre message_weight değişkenini ayarladığını varsayalım:

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

    message_weight değişkeninin değerinin, geçersiz (tam sayı olmayan) bir değer olan 1.5 olduğuna dikkat edin.

Çözünürlük

Akış değişkeni tarafından belirtilen MessageWeight öğesini temsil eden değerin geçerli bir değer (tam sayı değeri) olduğundan emin olun.

Yukarıda gösterilen örneği düzeltmek için JavaScript'teki message_weight değişkeninin değerini tam sayı olacak şekilde değiştirebilirsiniz.

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

FailedToResolveQuotaIntervalReference

Hata kodu

policies.ratelimit.FailedToResolveQuotaIntervalReference

Hata yanıtı gövdesi

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

Örnek Hata Mesajı

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

Neden

Bu hata, <Interval> öğesi Kota politikasında tanımlı değilse ortaya çıkar. Bu öğe zorunludur ve kota için geçerli olan zaman aralığını belirtmek için kullanılır. Zaman aralığı, <TimeUnit> öğesiyle tanımlandığı gibi dakika, saat, gün, hafta veya ay olabilir.

Teşhis

  1. Hatanın oluştuğu API Proxy'deki Kota politikalarının her birini inceleyin. Zorunlu <Interval> öğesinin tanımlanmadığı bir Kota politikası varsa hatanın nedeni budur.

    Örneğin, aşağıdaki Kota politikasında zorunlu <Interval> öğesi yoktur:

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

    Zorunlu <TimeUnit> öğesi yukarıdaki Kota politikasında tanımlanmadığı için şu hata kodunu alırsınız:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Çözünürlük

Belirli bir API proxy'si için tüm Kota politikalarında, zorunlu <Interval> öğesinin doğru şekilde tanımlandığından emin olun.

Yukarıda gösterilen örneği düzeltmek için politikayı aşağıda gösterildiği gibi <Interval> öğesini içerecek şekilde değiştirebilirsiniz.

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

Hata kodu

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Hata yanıtı gövdesi

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

Örnek Hata Mesajı

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

Neden

Bu hata, <TimeUnit> öğesi Kota politikasında tanımlı değilse ortaya çıkar. Bu öğe zorunludur ve kota için geçerli olan zaman birimini belirtmek için kullanılır. Zaman aralığı dakika, saat, gün, hafta ve ay cinsinden olabilir.

Teşhis

  1. Hatanın oluştuğu API Proxy'deki Kota politikalarının her birini inceleyin. Zorunlu <TimeUnit> öğesinin tanımlanmadığı bir Kota politikası varsa hatanın nedeni budur.

    Örneğin, aşağıdaki Kota politikasında zorunlu <TimeUnit> öğesi yoktur:

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

    Zorunlu <TimeUnit> öğesi yukarıdaki Kota politikasında tanımlanmadığı için şu hata kodunu alırsınız:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Çözünürlük

Belirli bir API proxy'si için tüm Kota politikalarında zorunlu <TimeUnit> öğesinin tanımlandığından emin olun.

Yukarıda gösterilen örneği düzeltmek için politikayı aşağıda gösterildiği gibi <TimeUnit> öğesini içerecek şekilde değiştirebilirsiniz.

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