您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。信息
InvalidRLPolicy
错误代码
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"
}
}
}
原因
如果未在 API 代理中定义重置配额政策的 <Quota>
元素中指定的配额政策,就会出现此错误。<Quota>
元素是必需的,用于标识应通过重置配额政策更新其计数器的目标配额政策。此目标配额政策必须在同一 API 代理中创建和定义,并且必须在流中可用。
例如,假设 <Quota>
元素按照如下所示方式定义,但如果 API 代理中未定义 MyQuotaPolicy
,您就会收到上述错误。
<Quota name="MyQuotaPolicy">
诊断
标识重置配额政策中指定的无效配额政策名称。您可以从 faultstring 中找到配额政策的名称。例如,在以下 faultstring 中,配额政策名称为
MyQuotaPolicy:
"faultstring": "Invalid rate limit policy MyQuotaPolicy"
检查出现故障的 API 代理中的每个重置配额政策。标识具体的重置配额政策,其中必需的
<Quota>
元素中指定的配额政策与上面第 1 步中标识的名称相匹配。例如,以下重置配额政策指定了名为
MyQuotaPolicy
的配额政策,该政策与 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>
确定在同一 API 代理中创建并定义了此配额政策。如果同一 API 代理中不存在此配额政策,就会导致错误。
在上面的示例中,在执行重置配额政策
Reset_Quota_Demo
之前,流中应存在配额政策MyQuotaPolicy
。由于流中没有配额政策
MyQuotaPolicy
,因此您将收到错误代码:
"errorcode": "policies.resetquota.InvalidRLPolicy"
解决方法
确保在 API 代理中定义了 <Quota>
元素中声明的配额政策。执行重置配额政策时,必须可以使用此目标配额政策。
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>
元素中包含允许计数的变量的引用无法解析为某个值,就会出现此错误。此元素是必需的,并指定减少配额计数器的数量。
诊断
确定发生错误的重置配额政策以及无法解析的引用变量的名称。您可以在错误响应中找到这两项。
例如,在以下 faultstring 中,政策名称为
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 未作为请求的一部分进行传递,且上述重置配额政策中的
<Allow>
元素使用的变量 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
解决方法
确保 <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"
}
}
}
原因
如果 <Quota>
元素中的 ref
属性引用的变量无法解析,就会发生此错误。
例如,如果在 <Quota>
元素中 ref
属性设为了 request.header.quotapolicy
,但在 API 代理流中不可用,就会出现上述错误。
<Quota ref="request.header.quotapolicy">
诊断
检查出现故障的 API 代理中的每个重置配额政策,并标识在其中无法正确解析
<Quota>
元素中指定的引用变量名称的重置配额政策。确定变量是否已定义,以及在执行重置配额政策的流中是否可用。
如果该变量:
- 超出范围(在执行政策的特定流中不可用),或者
- 无法解析(未定义)
就会导致错误。
在下面的示例中,应从名为 quotapolicy 的请求标头检索目标配额政策的名称。但是,Edge 无法解析 request.header.quotapolicy。如果标头 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 请求,该请求不会将标头 quotapolicy 作为请求的一部分进行传递:
curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
由于标头 quotapolicy 未作为请求的一部分进行传递,且上述重置配额政策中的
<Quota>
元素中使用的 request.header.quotapolicy 引用未定义,因此无法解析。因此,您会收到错误响应:"errorcode": "policies.resetquota.FailedToResolveRLPolicy"
解决方法
确保 <Quota>
元素中引用的属性 ref
在运行时解析,并且可在执行重置配额政策的特定流中使用。
如需更正上述示例,您可以修改请求,使其包含 quotapolicy 标头,如下所示:
curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"