Устранение ошибок во время выполнения квоты

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

InvalidMessageWeight

Код ошибки

policies.ratelimit.InvalidMessageWeight

Тело ответа об ошибке

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

Пример сообщения об ошибке

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

Причина

Эта ошибка возникает, если значение элемента <MessageWeight> , указанного через переменную потока, является недопустимым (нецелочисленным значением).

Например, эта ошибка возникнет, если значение переменной потока, указанной для элемента <MessageWeight> , равно 1,5 (нецелочисленное значение).

Диагноз

  1. Определите недопустимое значение, использованное для элемента <MessageWeight> в политике квот. Эту информацию можно найти в элементе faultstring ответа об ошибке. Например, в следующей ошибке недопустимое значение для элемента <MessageWeight> равно 1.5 :

    "faultstring": "Invalid message weight value 1.5"
    
  2. Проверьте все политики квот в конкретном API-прокси, где произошла ошибка. Возможно, в одной или нескольких политиках квот указан элемент <MessageWeight> .

    Например, следующая политика задает значение <MessageWeight> через переменную потока message_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. Определите значение переменной, используемой для <MessageWeight> в указанной политике(ях) квотирования. Значение переменной потока может быть извлечено из HTTP-заголовков, параметров запроса, полезной нагрузки XML или JSON-запроса или определено в другой политике:

    1. Найдите в пакете API Proxy тот фрагмент кода, где эта переменная была определена впервые.
    2. После того, как вы определите, в соответствии с какой политикой определяется и заполняется переменная, проверьте, как устанавливается значение этой переменной.
    3. Если значение переменной потока совпадает со значением, определенным на шаге №1 выше, то это и является причиной ошибки.

    Например, предположим, что политика JavaScript, используемая до политики квот, устанавливает переменную message_weight в зависимости от типа запроса, как показано ниже:

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

    Обратите внимание, что значение переменной message_weight равно 1.5 , что является недопустимым (нецелым) значением.

Разрешение

Убедитесь, что значение, представляющее MessageWeight указанное в переменной потока, является допустимым (целочисленным).

Чтобы исправить приведенный выше пример, вы можете изменить значение переменной message_weight в JavaScript на целое число.

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

FailedToResolveQuotaIntervalReference

Код ошибки

policies.ratelimit.FailedToResolveQuotaIntervalReference

Тело ответа об ошибке

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

Пример сообщения об ошибке

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

Причина

Эта ошибка возникает, если элемент <Interval> не определен в политике квот. Этот элемент является обязательным и используется для указания временного интервала, применимого к квоте. Временной интервал может быть минутами, часами, днями, неделями или месяцами, как определено с помощью элемента <TimeUnit> .

Диагноз

  1. Проверьте каждую из политик квот в API-прокси, где произошла ошибка. Если в какой-либо политике квот отсутствует обязательный элемент <Interval> , то это и является причиной ошибки.

    Например, в следующей политике квот отсутствует обязательный элемент <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>
    

    Поскольку обязательный элемент <TimeUnit> не определен в указанной выше политике квот, вы получите код ошибки:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Разрешение

Убедитесь, что для всех политик квотирования для данного API-прокси обязательное условие <Interval> определено должным образом.

Чтобы исправить приведенный выше пример, вы можете изменить политику, добавив элемент <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>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

Код ошибки

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Тело ответа об ошибке

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

Пример сообщения об ошибке

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

Причина

Эта ошибка возникает, если элемент <TimeUnit> не определен в политике квот. Этот элемент является обязательным и используется для указания единицы времени, применимой к квоте. Временной интервал может быть в минутах, часах, днях, неделях или месяцах.

Диагноз

  1. Проверьте каждую из политик квот в API-прокси, где произошла ошибка. Если в какой-либо политике квот отсутствует обязательный элемент <TimeUnit> , то это и является причиной ошибки.

    Например, в следующей политике квот отсутствует обязательный элемент <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>
    

    Поскольку обязательный элемент <TimeUnit> не определен в указанной выше политике квот, вы получите код ошибки:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Разрешение

Убедитесь, что для всех политик квотирования для данного API-прокси определен обязательный элемент <TimeUnit> .

Чтобы исправить приведенный выше пример, вы можете изменить политику, добавив элемент <TimeUnit> , как показано ниже.

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