Solución de problemas de errores de tiempo de ejecución de cuotas de restablecimiento

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

InvalidRLPolicy

Código de error

policies.resetquota.InvalidRLPolicy

Cuerpo de respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si la política de cuota especificada en el elemento <Quota> de la política de cuota de restablecimiento no se define en el proxy de API. El elemento <Quota> es obligatorio e identifica la política de cuotas de destino cuyo contador se debe actualizar mediante la política de cuotas de restablecimiento. Esta política de cuota de destino debe crearse y definirse en el mismo proxy de API y debe estar disponible durante el flujo.

Por ejemplo, supongamos que el elemento <Quota> se define como se muestra a continuación, pero si MyQuotaPolicy no se define en el proxy de la API, se produce el error anterior.

<Quota name="MyQuotaPolicy">

Diagnóstico

  1. Identifica el nombre de la política de cuotas no válida especificado en la política de restablecimiento de cuotas. Puedes encontrar el nombre de la política de cuota en el faultstring. Por ejemplo, en la siguiente cadena de error, el nombre de la política de cuota es MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Examina cada una de las políticas de cuota de restablecimiento del proxy de API en el que se ha producido el error. Identifica la política Reset Quota específica en la que la política Quota especificada en el elemento obligatorio <Quota> coincida con el nombre identificado en el paso 1 anterior.

    Por ejemplo, la siguiente política Reset Quota especifica una política Quota llamada MyQuotaPolicy, que coincide con lo que hay en 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 si esta política de cuota se ha creado y definido en el mismo proxy de API. Si la política Quota no existe en el mismo proxy de API, esa es la causa del error.

    En el ejemplo anterior, la política de cuota MyQuotaPolicy debe estar en el flujo antes de que se ejecute la política de cuota de restablecimiento Reset_Quota_Demo.

    Como la política de cuota MyQuotaPolicy no existe en el flujo, recibirás el código de error:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Resolución

Asegúrate de que la política de cuotas declarada en el elemento <Quota> se haya definido en el proxy de API. Esta política de cuota de destino debe estar disponible cuando se ejecute la política de cuota de restablecimiento.

FailedToResolveAllowCountRef

Código de error

policies.resetquota.FailedToResolveAllowCountRef

Cuerpo de respuesta de error

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

Ejemplo de mensaje de error

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: El mensaje de error anterior no se envía como respuesta al cliente. Solo se ve en la herramienta Trace como un error de la política Reset Quota. A continuación, se muestra una captura de pantalla de ejemplo.

En Propiedades, la fila de error se rellena con un mensaje.

El error que se devuelve al cliente será simplemente policies.ratelimit.QuotaViolation.

Causa

Este error se produce si no se puede resolver el valor de la referencia a la variable que contiene el recuento permitido en el elemento <Allow> de la política. Este elemento es obligatorio y especifica el importe en el que se debe reducir el contador de cuota.

Diagnóstico

  1. Identifica la política Reset Quota en la que se ha producido el error y el nombre de la variable de referencia que no se puede resolver. Puedes encontrar ambos elementos en la respuesta de error.

    Por ejemplo, en el siguiente faultstring, el nombre de la política es ResetQuota y la referencia es 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. En el XML de la política Reset Quota que ha fallado, comprueba que el nombre de la variable de referencia utilizada coincide con el nombre de referencia identificado en la respuesta de error (paso 1 anterior).

    Por ejemplo, la siguiente política define el elemento con la referencia llamada request.header.allowcount, que coincide con lo que aparece en el error:

    <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. Determina si la variable de referencia está definida y disponible en el flujo en el que se ejecuta la política Reset Quota.

  4. Si la variable es:

    1. Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
    2. no se puede resolver (no está definido)

    entonces, esa es la causa del error.

    En el ejemplo anterior, el valor del recuento permitido en el elemento <Allow> se debe obtener del encabezado de la solicitud llamado allowcount. Sin embargo, Apigee no puede resolver request.header.allowcount. Esto ocurre si el encabezado allowcount no se incluye en la solicitud a la API.

    A continuación, se muestra un ejemplo de solicitud de API que no incluye el encabezado allowcount como parte de la solicitud:

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

    Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.

    Como el encabezado allowcount no se incluye en la solicitud, la variable request.header.allowcount que se usa en el elemento <Allow> de la política ResetQuota anterior no está definida y, por lo tanto, no se puede resolver. Por lo tanto, recibirás la respuesta de error:

    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
    

Resolución

Asegúrate de que la variable a la que se hace referencia en el elemento <Allow> exista o esté definida y disponible en el flujo específico en el que se ejecuta la política Reset Quota.

Para corregir el ejemplo anterior, puede modificar la solicitud para incluir el encabezado allowcount, tal como se muestra a continuación:

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

Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.

FailedToResolveRLPolicy

Código de error

policies.resetquota.FailedToResolveRLPolicy

Cuerpo de respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si no se puede resolver la variable a la que hace referencia el atributo ref del elemento <Quota>.

Por ejemplo, si el atributo ref se define como request.header.quotapolicy en el elemento <Quota>, pero no está disponible en el flujo del proxy de API, se produce el error anterior.

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

Diagnóstico

  1. Examina cada una de las políticas Reset Quota del proxy de API en el que se ha producido el error e identifica la política Reset Quota en la que no se puede resolver correctamente el nombre de la variable de referencia especificada en el elemento <Quota>.

  2. Determina si la variable está definida y disponible en el flujo en el que se ejecuta la política Reset Quota.

  3. Si la variable es:

    1. Fuera del ámbito (no disponible en el flujo específico en el que se ejecuta la política) o
    2. no se puede resolver (no está definido)

    entonces, esa es la causa del error.

    En el ejemplo que se muestra a continuación, se supone que el nombre de la política de cuota de destino se obtiene del encabezado de la solicitud llamado quotapolicy. Sin embargo, Apigee no puede resolver request.header.quotapolicy. Esto ocurre si el encabezado quotapolicy no se incluye en la solicitud a la 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>
    

    A continuación, se muestra una solicitud de API de ejemplo que no incluye el encabezado quotapolicy como parte de la solicitud:

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

    Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.

    Como el encabezado quotapolicy no se transfiere como parte de la solicitud, la referencia request.header.quotapolicy que se usa en el elemento <Quota> de la política ResetQuota anterior no está definida y no se puede resolver. Como resultado, recibirás la respuesta de error:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Resolución

Asegúrate de que el atributo ref al que se hace referencia en el elemento <Quota> se resuelva en tiempo de ejecución y esté disponible en el flujo específico en el que se ejecuta la política Reset Quota.

Para corregir el ejemplo anterior, puede modificar la solicitud para incluir el encabezado quotapolicy, tal como se muestra a continuación:

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

Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.