Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Неверный вес сообщения
Код ошибки
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 (нецелое значение).
Диагностика
Определите недопустимое значение, используемое для элемента
<MessageWeight>
в политике квот. Эту информацию можно найти в элементеfaultstring
ответа об ошибке. Например, в следующей ошибке недопустимое значение, используемое для элемента<MessageWeight>
, равно1.5
:"faultstring": "Invalid message weight value 1.5"
Проверьте все политики квот в конкретном прокси-сервере 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>
Определите значение переменной, используемой для
<MessageWeight>
в определенных политиках квот. Значение переменной потока можно извлечь из заголовков HTTP, параметров запроса, полезных данных запроса XML или JSON или определить в другой политике:- Найдите код в пакете прокси-сервера API, где переменная была определена первой.
- Как только вы определите политику, в которой переменная определена и заполнена в первую очередь, проверьте, как устанавливается значение этой переменной.
- Если значение переменной потока совпадает со значением, указанным на шаге 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>
.
Диагностика
Проверьте каждую политику квот в прокси-сервере 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>
не определен в политике квот. Этот элемент является обязательным и используется для указания единицы времени, применимой к квоте. Временной интервал может составлять минуты, часы, дни, недели или месяцы.
Диагностика
Проверьте каждую политику квот в прокси-сервере 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>