Solución de problemas de errores de tiempo de ejecución de cuota

Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

InvalidMessageWeight

Código de error

policies.ratelimit.InvalidMessageWeight

Cuerpo de respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si el valor del elemento <MessageWeight> especificado mediante una variable de flujo no es válido (un valor no entero).

Por ejemplo, este error se producirá si el valor de la variable de flujo especificada en el elemento <MessageWeight> es 1,5 (un valor no entero).

Diagnóstico

  1. Identifica el valor no válido que se ha usado en el elemento <MessageWeight> de la política de cuota. Puede encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente error, el valor no válido que se ha usado para el elemento <MessageWeight> es 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Examina todas las políticas de cuota del proxy de API específico en el que se ha producido el error. Puede haber una o varias políticas de cuota en las que se especifique el elemento <MessageWeight>.

    Por ejemplo, la siguiente política especifica el <MessageWeight>mediante una variable de flujomessage_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. Determina el valor de la variable utilizada para <MessageWeight> en las políticas de cuota identificadas. El valor de la variable de flujo se puede extraer de los encabezados HTTP, los parámetros de consulta, la carga útil de una solicitud XML o JSON, o bien se puede definir en otra política:

    1. Busca el código en el paquete del proxy de API donde se definió la variable por primera vez.
    2. Una vez que sepas en qué política se define y se rellena primero la variable, comprueba cómo se asigna el valor de la variable.
    3. Si el valor de la variable de flujo coincide con el valor identificado en el paso 1 anterior, esa es la causa del error.

    Por ejemplo, supongamos que una política de JavaScript usada antes de la política de cuotas define la variable message_weight en función del tipo de solicitud, tal como se muestra a continuación:

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

    El valor de la variable message_weight es 1.5, que no es válido (no es un número entero).

Resolución

Asegúrate de que el valor que representa el MessageWeight especificado por la variable de flujo sea un valor válido (un valor entero).

Para corregir el ejemplo anterior, puedes modificar el valor de la variable message_weight en JavaScript para que sea un número entero.

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

FailedToResolveQuotaIntervalReference

Código de error

policies.ratelimit.FailedToResolveQuotaIntervalReference

Cuerpo de respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si el elemento <Interval> no se define en la política de cuota. Este elemento es obligatorio y se usa para especificar el intervalo de tiempo aplicable a la cuota. El intervalo de tiempo puede ser de minutos, horas, días, semanas o meses, tal como se define con el elemento <TimeUnit>.

Diagnóstico

  1. Examina cada una de las políticas de cuota del proxy de API en el que se ha producido el error. Si hay alguna política de cuota en la que no se haya definido el elemento obligatorio <Interval>, ese será el motivo del error.

    Por ejemplo, la siguiente política de cuota no tiene el elemento obligatorio <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 el elemento obligatorio <TimeUnit> no está definido en la política de cuota anterior, recibirás el código de error:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Resolución

Asegúrate de que todas las políticas de cuota de un proxy de API determinado tengan el elemento obligatorio <Interval> definido correctamente.

Para corregir el ejemplo anterior, puede modificar la política para incluir el elemento <Interval>, tal como se muestra a continuación.

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

FailedToResolveQuotaIntervalTimeUnitReference

Código de error

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Cuerpo de respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si el elemento <TimeUnit> no se define en la política de cuota. Este elemento es obligatorio y se usa para especificar la unidad de tiempo aplicable a la cuota. El intervalo de tiempo puede ser en minutos, horas, días, semanas o meses.

Diagnóstico

  1. Examina cada una de las políticas de cuota del proxy de API en el que se ha producido el error. Si hay alguna política de cuota en la que no se haya definido el elemento obligatorio <TimeUnit>, ese será el motivo del error.

    Por ejemplo, la siguiente política de cuota no tiene el elemento obligatorio <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 el elemento obligatorio <TimeUnit> no está definido en la política de cuota anterior, recibirás el código de error:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Resolución

Comprueba que todas las políticas de cuota de un proxy de API determinado tengan definido el elemento obligatorio <TimeUnit>.

Para corregir el ejemplo anterior, puede modificar la política para incluir el elemento <TimeUnit>, tal como se muestra a continuación.

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