Solução de problemas de erro de ambiente de execução de redefinição de cota

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

InvalidRLPolicy

Código do 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

Esse erro ocorrerá se a política de cota especificada no elemento <Quota> da política de redefinição de cota não estiver definida no proxy de API. O elemento <Quota> é obrigatório e identifica a política de cota de destino com o contador que precisa ser atualizado por meio da política de redefinição de cota. Essa política de cota de destino precisa ser criada e definida no mesmo proxy de API e precisa estar disponível durante o fluxo.

Por exemplo, digamos que o elemento <Quota> esteja definido como visto abaixo, mas se MyQuotaPolicy não estiver definido no proxy de API, você receberá o erro acima.

<Quota name="MyQuotaPolicy">

Diagnóstico

  1. Identifique o nome da política de cota inválido especificado na política de redefinição de cota. Encontre o nome da política de cota na string de falha. Por exemplo, na string de falha a seguir, o nome da política de cota é MyQuotaPolicy:

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

    Por exemplo, a seguinte política de redefinição de cota especifica uma política de cota chamada MyQuotaPolicy, que corresponde ao que está na string de falha:

    <?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. Determine se essa política de cota foi criada e definida no mesmo proxy de API. Se a política de cota não existir no mesmo proxy de API, essa será a causa do erro.

    No exemplo mostrado acima, a política de cota MyQuotaPolicy precisa existir no fluxo antes da execução da política de redefinição de cota Reset_Quota_Demo.

    Como a política de cota MyQuotaPolicy não existe no fluxo, você receberá o código de erro:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Resolução

Certifique-se de que a política de cota declarada no elemento <Quota> esteja definida no proxy de API. Essa política de cota de destino precisa estar disponível quando a política de redefinição de cota é executada.

FailedToResolveAllowCountRef

Código do 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

Observação: a mensagem de erro acima não é enviada como uma resposta ao cliente. Ela só é vista na ferramenta Trace como um erro da política de redefinição de cota. Veja abaixo uma captura de tela de amostra.

Em "Propriedades", a linha de erro está preenchida com uma mensagem.

O erro retornado ao cliente será simplesmente: policies.ratelimit.QuotaViolation.

Causa

Esse erro ocorrerá se a referência à variável que contém a contagem de permissões no elemento <Allow> da política não puder ser resolvida como um valor. Esse elemento é obrigatório e especifica o valor para diminuir o contador de cotas.

Diagnóstico

  1. Identifique a política de redefinição de cota em que o erro ocorreu e o nome da variável de referência que não pode ser resolvida. Você pode encontrar esses dois itens na resposta de erro.

    Por exemplo, na seguinte string de falha, 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 de política de redefinição de cota com falha, verifique se o nome da variável de referência usada corresponde ao nome identificado na resposta de erro (Etapa 1 acima).

    Por exemplo, a política a seguir define o elemento com a referência chamada 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. Determine se a variável de referência está definida e disponível no fluxo em que a política de redefinição de cota é executada.

  4. Se a variável for:

    1. fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
    2. não é possível resolver (não está definida)

    essa é a causa do erro.

    No exemplo mostrado acima, o valor da contagem permitida no elemento <Allow> precisa ser recuperado do cabeçalho da solicitação chamado allowcount. No entanto, a Apigee não consegue resolver o request.header.allowcount. Isso acontece quando o cabeçalho allowcount não é transmitido como parte da solicitação de API.

    Veja um exemplo de solicitação de API que não transmite o cabeçalho allowcount como parte da solicitação:

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

    Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade virtualhosts.hostAliases do arquivo de modificações. Consulte Especificar substituições de configuração.

    Como o cabeçalho allowcount não é transmitido como parte da solicitação, a variável request.header.allowcount usada no elemento <Allow> na política de redefinição de cota acima é indefinida e, portanto, não pode ser resolvida. Portanto, você receberá 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

Verifique se a variável mencionada no elemento <Allow> existe/está definida e disponível no fluxo específico, em que a política de redefinição de cota é executada.

Para corrigir o exemplo mostrado acima, você pode modificar a solicitação para incluir o cabeçalho allowcount como 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 aberto ao público usado para acessar suas APIs, conforme configurado na propriedade virtualhosts.hostAliases do arquivo de modificações. Consulte Especificar substituições de configuração.

FailedToResolveRLPolicy

Código do 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

Esse erro ocorrerá se a variável mencionada pelo atributo ref no elemento <Quota> não puder ser resolvida.

Por exemplo, se o atributo ref estiver definido como request.header.quotapolicy no elemento <Quota>, mas não estiver disponível no fluxo de proxy de API, você receberá o erro acima.

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

Diagnóstico

  1. Examine cada uma das políticas de redefinição de cota no proxy de API em que a falha ocorreu e identifique a política de redefinição de cota em que o nome da variável de referência especificada 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 de redefinição de cota é executada.

  3. Se a variável for:

    1. fora do escopo (não disponível no fluxo específico em que a política é executada) ou
    2. não é possível resolver (não está definida)

    essa é a causa do erro.

    No exemplo mostrado abaixo, o nome da política de cota de destino deve ser recuperado do cabeçalho da solicitação chamado quotapolicy. No entanto, a Apigee não pode resolver request.header.quotapolicy. Isso acontecerá se o cabeçalho quotapolicy não for transmitido como parte da solicitação de 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>
    

    Veja um exemplo de solicitação de API que não transmite o cabeçalho quotapolicy como parte da solicitação:

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

    Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade virtualhosts.hostAliases do arquivo de modificações. Consulte Especificar substituições de configuração.

    Como o cabeçalho quotapolicy não foi passado como parte da solicitação, a referência request.header.quotapolicy usada no elemento <Quota> na política de redefinição de cota acima é indefinida e não pode ser resolvida. Como resultado, você recebe a resposta de erro:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Resolução

Verifique se o atributo ref mencionado no elemento <Quota> é resolvido no ambiente de execução e está disponível no fluxo específico, em que a política de redefinição de cota é executada.

Para corrigir o exemplo mostrado acima, você pode modificar a solicitação 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 aberto ao público usado para acessar suas APIs, conforme configurado na propriedade virtualhosts.hostAliases do arquivo de modificações. Consulte Especificar substituições de configuração.