Resolução de problemas de erros de tempo de execução de quotas de reposição

Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do Apigee Edge.

InvalidRLPolicy

Código de erro

policies.resetquota.InvalidRLPolicy

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Causa

Este erro ocorre se a política de quota especificada no elemento <Quota> da política de quota de reposição não estiver definida no proxy de API. O elemento <Quota> é obrigatório e identifica a política de quotas de destino cujo contador deve ser atualizado através da política de quotas de reposição. Esta política de quota de destino tem de ser criada e definida no mesmo proxy de API e tem de estar disponível durante o fluxo.

Por exemplo, suponhamos que o elemento <Quota> está definido como se vê abaixo, mas se MyQuotaPolicy não estiver definido no proxy da API, recebe o erro acima.

<Quota name="MyQuotaPolicy">

Diagnóstico

  1. Identifique o nome da política de quota inválido especificado na política de reposição de quota. Pode encontrar o nome da política de quotas na faultstring. Por exemplo, na faultstring seguinte, o nome da política de quota é MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Examine cada uma das políticas de reposição de quota no proxy de API onde ocorreu a falha. Identifique a política de reposição de quota específica em que a política de quota especificada no elemento obrigatório <Quota> corresponde ao nome identificado no passo 1 acima.

    Por exemplo, a seguinte política Reset Quota especifica uma política Quota denominada MyQuotaPolicy, que corresponde ao que está em 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>
    
    
  3. Determina se esta política de quotas é criada e definida no mesmo proxy de API. Se a política de quotas não existir no mesmo proxy de API, essa é a causa do erro.

    No exemplo apresentado acima, a política de quota MyQuotaPolicy deve existir no fluxo antes de a política de reposição de quota Reset_Quota_Demo ser executada.

    Como a política de quotas MyQuotaPolicy não existe no fluxo, recebe o código de erro:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Resolução

Certifique-se de que a política de quotas declarada no elemento <Quota> está definida no proxy de API. Esta política de quota de destino tem de estar disponível quando a política de reposição de quota é executada.

FailedToResolveAllowCountRef

Código de erro

policies.resetquota.FailedToResolveAllowCountRef

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

Nota: a mensagem de erro acima não é enviada como resposta ao cliente. Só é visível na ferramenta Trace como um erro da política de reposição de quotas. Abaixo, é apresentada uma captura de ecrã de exemplo.

Em Propriedades, a linha de erro é preenchida com uma mensagem.

O erro devolvido ao cliente é simplesmente: policies.ratelimit.QuotaViolation.

Causa

Este erro ocorre se a referência à variável que contém a contagem permitida no elemento <Allow> da política não puder ser resolvida para um valor. Este elemento é obrigatório e especifica o valor para diminuir o contador de quotas.

Diagnóstico

  1. Identifique a política de reposição de quota onde ocorreu o erro e o nome da variável de referência que não é possível resolver. Pode encontrar ambos os itens na resposta de erro.

    Por exemplo, na faultstring seguinte, o nome da política é ResetQuota e a referência é 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
    
  2. No XML da política de reposição de quota com falha, verifique se o nome da variável de referência usada corresponde ao nome de referência identificado na resposta de erro (passo 1 acima).

    Por exemplo, a seguinte política define o elemento com a referência denominada request.header.allowcount, que corresponde ao que está no erro:

    <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>
    
  3. Determinar se a variável de referência está definida e disponível no fluxo em que a política Reset Quota é executada.

  4. Se a variável for:

    1. Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
    2. não é possível resolver (não está definido)

    Então, essa é a causa do erro.

    No exemplo apresentado acima, o valor da contagem permitida no elemento <Allow> deve ser obtido a partir do cabeçalho do pedido denominado allowcount. No entanto, o Apigee não consegue resolver o request.header.allowcount. Isto acontece se o cabeçalho allowcount não for transmitido como parte do pedido API.

    Segue-se um exemplo de um pedido de API que não transmite o cabeçalho allowcount como parte do pedido:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.

    Uma vez que o cabeçalho allowcount não é transmitido como parte do pedido, a variável request.header.allowcount usada no elemento <Allow> na política de reposição de quota acima não está definida e, por isso, não pode ser resolvida. Assim, recebe a resposta de erro:

    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
    

Resolução

Certifique-se de que a variável referenciada no elemento <Allow> existe/está definida e está disponível no fluxo específico, onde a política de reposição de quota é executada.

Para corrigir o exemplo apresentado acima, pode modificar o pedido para incluir o cabeçalho allowcount, conforme mostrado abaixo:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.

FailedToResolveRLPolicy

Código de erro

policies.resetquota.FailedToResolveRLPolicy

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Causa

Este erro ocorre se não for possível resolver a variável referenciada pelo atributo ref no elemento <Quota>.

Por exemplo, se o atributo ref estiver definido como request.header.quotapolicy no elemento <Quota>, mas não estiver disponível no fluxo do proxy da API, recebe o erro acima.

<Quota ref="request.header.quotapolicy">

Diagnóstico

  1. Examine cada uma das políticas de reposição de quota no proxy de API onde ocorreu a falha e identifique a política de reposição de quota onde o nome da variável de referência especificado no elemento <Quota> não pode ser resolvido corretamente.

  2. Determine se a variável está definida e disponível no fluxo em que a política Reset Quota é executada.

  3. Se a variável for:

    1. Fora do âmbito (não disponível no fluxo específico onde a política é executada) ou
    2. não é possível resolver (não está definido)

    Então, essa é a causa do erro.

    No exemplo apresentado abaixo, o nome da política de quotas de destino deve ser obtido a partir do cabeçalho do pedido denominado quotapolicy. No entanto, o Apigee não consegue resolver o request.header.quotapolicy. Isto acontece se o cabeçalho quotapolicy não for transmitido como parte do pedido da 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>
    

    Segue-se um exemplo de pedido API que não passa o cabeçalho quotapolicy como parte do pedido:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.

    Uma vez que o cabeçalho quotapolicy não é transmitido como parte do pedido, a referência request.header.quotapolicy usada no elemento <Quota> na política de reposição de quota acima não está definida e não pode ser resolvida. Como resultado, recebe a resposta de erro:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Resolução

Certifique-se de que o atributo ref referenciado no elemento <Quota> é resolvido no tempo de execução e está disponível no fluxo específico, onde a política de reposição de quota é executada.

Para corrigir o exemplo apresentado acima, pode modificar o pedido para incluir o cabeçalho quotapolicy, conforme mostrado abaixo:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"

Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.