Solução de problemas de erros de tempo de execução de cota

Você está visualizando a documentação do Apigee e do Apigee híbrido .
Veja a documentação do Apigee Edge .

Peso da Mensagem Inválida

Código de erro

policies.ratelimit.InvalidMessageWeight

Corpo de resposta de erro

{
    "fault": {
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Causa

Este erro ocorre se o valor do elemento <MessageWeight> especificado por meio de uma variável de fluxo for inválido (um valor não inteiro).

Por exemplo, esse erro ocorrerá se o valor da variável de fluxo especificada para o elemento <MessageWeight> for 1,5 (um valor não inteiro).

Diagnóstico

  1. Identifique o valor inválido usado para o elemento <MessageWeight> na política de cota. Você pode encontrar essa informação no elemento faultstring da resposta de erro. Por exemplo, no erro a seguir, o valor inválido usado para o elemento <MessageWeight> é 1.5 :

    "faultstring": "Invalid message weight value 1.5"
    
  2. Examine todas as políticas de cota no proxy de API específico onde a falha ocorreu. Pode haver uma ou mais políticas de cota nas quais o elemento <MessageWeight> esteja especificado.

    Por exemplo, a política a seguir especifica <MessageWeight> por meio de uma variável de fluxo 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>
    
  3. Determine o valor da variável usada para <MessageWeight> na(s) Política(s) de Cota identificada(s). O valor da variável de fluxo pode ser extraído de cabeçalhos HTTP, parâmetros de consulta, um payload de solicitação XML ou JSON, ou definido em outra política:

    1. Localize o código dentro do pacote do Proxy da API onde a variável foi definida primeiro.
    2. Depois de descobrir a política na qual a variável é definida e preenchida, verifique como o valor da variável é definido.
    3. Se o valor da variável de fluxo corresponder ao valor identificado na Etapa 1 acima, essa é a causa do erro.

    Por exemplo, suponha que uma política JavaScript usada antes da Política de Cota defina a variável message_weight com base no tipo de solicitação, conforme mostrado abaixo:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    Observe que o valor da variável message_weight é 1.5 o que é um valor inválido (não inteiro).

Resolução

Certifique-se de que o valor que representa o MessageWeight especificado pela variável de fluxo seja um valor válido (valor inteiro).

Para corrigir o exemplo mostrado acima, você pode modificar o valor da variável message_weight no JavaScript para ser um inteiro.

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

Falha na resolução de referência de intervalo de cota

Código de erro

policies.ratelimit.FailedToResolveQuotaIntervalReference

Corpo de resposta de erro

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Causa

Este erro ocorre se o elemento <Interval> não estiver definido na política de cota. Este elemento é obrigatório e usado para especificar o intervalo de tempo aplicável à cota. O intervalo de tempo pode ser minutos, horas, dias, semanas ou meses, conforme definido com o elemento <TimeUnit> .

Diagnóstico

  1. Examine cada uma das políticas de cota no proxy da API onde ocorreu a falha. Se houver alguma política de cota em que o elemento obrigatório <Interval> não esteja definido, essa é a causa do erro.

    Por exemplo, a seguinte política de cota não tem o elemento obrigatório <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>
    

    Como o elemento obrigatório <TimeUnit> não está definido na política de cota acima, você receberá o código de erro:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Resolução

Certifique-se de que todas as políticas de cota para um determinado proxy de API tenham o elemento obrigatório <Interval> definido corretamente.

Para corrigir o exemplo mostrado acima, você pode modificar a política para incluir o elemento <Interval> , conforme mostrado abaixo.

<?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>

Falha na resolução de referência de unidade de tempo de intervalo de cota

Código de erro

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Corpo de resposta de erro

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Causa

Este erro ocorre se o elemento <TimeUnit> não estiver definido na política de cota. Este elemento é obrigatório e usado para especificar a unidade de tempo aplicável à cota. O intervalo de tempo pode ser em minutos, horas, dias, semanas ou meses.

Diagnóstico

  1. Examine cada uma das políticas de cota no proxy da API onde ocorreu a falha. Se houver alguma política de cota em que o elemento obrigatório <TimeUnit> não esteja definido, essa é a causa do erro.

    Por exemplo, a seguinte política de cota não tem o elemento obrigatório <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>
    

    Como o elemento obrigatório <TimeUnit> não está definido na política de cota acima, você receberá o código de erro:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Resolução

Certifique-se de que todas as políticas de cota para um determinado proxy de API tenham o elemento obrigatório <TimeUnit> definido.

Para corrigir o exemplo mostrado acima, você pode modificar a política para incluir o elemento <TimeUnit> , conforme mostrado abaixo.

<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>