Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
ИнвалидRLPolicy
Код ошибки
policies.resetquota.InvalidRLPolicy
Тело ответа об ошибке
{ "fault": { "faultstring": "Invalid rate limit policy quota_policy_name", "detail": { "errorcode": "policies.resetquota.InvalidRLPolicy" } } }
Пример сообщения об ошибке
{
"fault": {
"faultstring": "Invalid rate limit policy MyQuotaPolicy",
"detail": {
"errorcode": "policies.resetquota.InvalidRLPolicy"
}
}
}
Причина
Эта ошибка возникает, если политика квот, указанная в элементе <Quota>
политики сброса квоты, не определена в прокси-сервере API. Элемент <Quota>
является обязательным и определяет целевую политику квот, счетчик которой должен быть обновлен с помощью политики сброса квоты. Эта целевая политика квот должна быть создана и определена в одном прокси-сервере API и должна быть доступна во время потока.
Например, предположим, что элемент <Quota>
определен, как показано ниже, но если MyQuotaPolicy
не определен в прокси-сервере API, вы получите вышеуказанную ошибку.
<Quota name="MyQuotaPolicy">
Диагностика
Определите недопустимое имя политики квот, указанное в политике сброса квоты. Имя политики квот можно найти в строке ошибки. Например, в следующей строке ошибки имя политики квот —
MyQuotaPolicy:
"faultstring": "Invalid rate limit policy MyQuotaPolicy"
Проверьте каждую политику сброса квоты в прокси-сервере API, где произошел сбой. Определите конкретную политику сброса квоты, в которой политика квот, указанная в обязательном элементе
<Quota>
соответствует имени, указанному на шаге 1 выше.Например, следующая политика сброса квоты определяет политику квот с именем
MyQuotaPolicy
, которая соответствует тому, что указано в строке ошибки:<?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>
Определите, создана ли эта политика квот и определена в том же прокси-сервере API. Если политика квот не существует в том же прокси-сервере API, это и есть причина ошибки.
В приведенном выше примере предполагается, что политика квот
MyQuotaPolicy
существует в потоке до выполнения политики сброса квотыReset_Quota_Demo
.Поскольку политика квот
MyQuotaPolicy
не существует в потоке, вы получите код ошибки:
"errorcode": "policies.resetquota.InvalidRLPolicy"
Разрешение
Убедитесь, что политика квот, объявленная в элементе <Quota>
, определена в прокси-сервере API. Эта целевая политика квот должна быть доступна при выполнении политики сброса квот.
FailedToResolveAllowCountRef
Код ошибки
policies.resetquota.FailedToResolveAllowCountRef
Тело ответа об ошибке
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
Пример сообщения об ошибке
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
Клиенту будет возвращена ошибка: policies.ratelimit.QuotaViolation
.
Причина
Эта ошибка возникает, если ссылку на переменную, содержащую счетчик разрешений, в элементе <Allow>
политики не удается преобразовать в значение. Этот элемент является обязательным и определяет величину уменьшения счетчика квоты.
Диагностика
Определите политику сброса квоты, в которой произошла ошибка, и имя ссылочной переменной, которую невозможно разрешить. Оба эти элемента можно найти в ответе об ошибке.
Например, в следующей строке ошибки имя политики —
ResetQuota
, а ссылка —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
В неудавшемся XML-коде политики сброса квоты убедитесь, что имя используемой ссылочной переменной соответствует ссылочному имени, указанному в ответе об ошибке (шаг 1 выше).
Например, следующая политика устанавливает элемент со ссылкой с именем
request.header.allowcount
, которая соответствует тому, что указано в ошибке:<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>
Определите, определена ли ссылочная переменная и доступна ли она в потоке, в котором выполняется политика сброса квоты.
Если переменная:
- вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
- не может быть решено (не определено)
тогда это причина ошибки.
В примере, показанном выше, значение разрешенного счетчика в элементе
<Allow>
должно быть получено из заголовка запроса с именемallowcount . Однако Edge не может разрешить request.header.allowcount . Это происходит, если заголовокallowcount не передается как часть запроса API.Вот пример запроса API, который не передает заголовокallowcount как часть запроса:
curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
Поскольку заголовокallowcount не передается как часть запроса, переменная request.header.allowcount , используемая в элементе
<Allow>
в приведенной выше политике сброса квоты, не определена и поэтому не может быть разрешена. Таким образом, вы получите ответ об ошибке: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
Разрешение
Убедитесь, что переменная, на которую ссылается элемент <Allow>
, существует/определена и доступна в конкретном потоке, где выполняется политика сброса квоты.
Чтобы исправить приведенный выше пример, вы можете изменить запрос, включив в него заголовокallowcount , как показано ниже:
curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"
FailedToResolveRLPolicy
Код ошибки
policies.resetquota.FailedToResolveRLPolicy
Тело ответа об ошибке
{
"fault": {
"faultstring": "Failed to resolve rate limit policy",
"detail": {
"errorcode": "policies.resetquota.FailedToResolveRLPolicy"
}
}
}
Пример сообщения об ошибке
{
"fault": {
"faultstring": "Failed to resolve rate limit policy",
"detail": {
"errorcode": "policies.resetquota.FailedToResolveRLPolicy"
}
}
}
Причина
Эта ошибка возникает, если переменную, на которую ссылается атрибут ref
в элементе <Quota>
, невозможно разрешить.
Например, если атрибут ref
установлен как request.header.quotapolicy
в элементе <Quota>
, но недоступен в потоке прокси-сервера API, вы получите указанную выше ошибку.
<Quota ref="request.header.quotapolicy">
Диагностика
Изучите каждую политику сброса квоты в прокси-сервере API, где произошел сбой, и определите политику сброса квоты, в которой имя ссылочной переменной, указанное в элементе
<Quota>
, не может быть разрешено должным образом.Определите, определена ли и доступна ли переменная в потоке, в котором выполняется политика сброса квоты.
Если переменная:
- вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
- не может быть решено (не определено)
тогда это причина ошибки.
В примере, показанном ниже, имя целевой политики квот должно быть получено из заголовка запроса с именем quotapolicy . Однако Edge не может разрешить request.header.quotapolicy . Это происходит, если политика квотирования заголовка не передается как часть запроса 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>
Вот пример запроса API, который не передает квоту заголовка как часть запроса:
curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
Поскольку заголовок quotapolicy не передается как часть запроса, ссылка request.header.quotapolicy , используемая в элементе
<Quota>
в приведенной выше политике сброса квоты, не определена и не может быть разрешена. В результате вы получаете ответ об ошибке:"errorcode": "policies.resetquota.FailedToResolveRLPolicy"
Разрешение
Убедитесь, что ссылка на атрибут ref
, указанная в элементе <Quota>
, разрешается во время выполнения и доступна в конкретном потоке, где выполняется политика сброса квоты.
Чтобы исправить приведенный выше пример, вы можете изменить запрос, включив в него заголовок quotapolicy , как показано ниже:
curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"