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": {jdoe "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 especificado para el elemento <MessageWeight>
a través de una variable de flujo no es válido (es decir, no es un valor entero).
Por ejemplo, si el valor de la variable de flujo especificada para el elemento <MessageWeight>
es 1,5 (un valor no entero), se produce un error.
Diagnóstico
Identifica el valor no válido que se ha usado en el elemento
<MessageWeight>
de la política Spike Arrest. Puede encontrar esta información en el elementofaultstring
de la respuesta de error. Por ejemplo, en el siguiente error, el valor no válido que se ha usado para el elemento<MessageWeight>
es1.5
:"faultstring": "Invalid message weight value 1.5"
Examina todas las políticas de Spike Arrest del proxy de API específico en el que se ha producido el error. Puede haber una o varias políticas de Spike Arrest en las que se especifique el elemento
<MessageWeight>
.Por ejemplo, la siguiente política especifica el valor de
<MessageWeight>
mediante una variable de flujo llamadamessage_weight:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy"> <DisplayName>SpikeArrest_AuthProxy</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <Rate>100ps</Rate> <MessageWeight ref="message_weight"/> </SpikeArrest>
Determina el valor de la variable utilizada en el elemento
<MessageWeight>
de las políticas de Spike Arrest 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.- Busca el código en el proxy de API donde se definió la variable por primera vez.
- Una vez que hayas determinado la política en la que se define y se rellena la variable por primera vez, comprueba cómo se asigna el valor de la variable.
- 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 se usa una política de JavaScript antes de la política Spike Arrest para definir la variable
message_weight
en función del método 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"); }
Fíjate en que el valor de la variable
message_weight
es1.5
, que no es válido (no es un número entero).
Resolución
Asegúrese de que el valor del elemento MessageWeight
sea válido (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");
}
FailedToResolveSpikeArrestRate
Código de error
policies.ratelimit.FailedToResolveSpikeArrestRate
Cuerpo de respuesta de error
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Ejemplo de mensaje de error
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Causa
Este error se produce si la referencia a la variable que contiene el ajuste de la tarifa
del elemento <Rate>
no se puede resolver en un valor de la política Spike Arrest. Este elemento es obligatorio y se usa para especificar la tasa de supresión de picos en forma de {int}pm
o {int}ps
. Por ejemplo, {int}pm
podría ser 500pm
, lo que significa 500 llamadas por minuto. Del mismo modo, el valor 10ps
significa 10 llamadas por segundo.
Diagnóstico
Identifica la política Spike Arrest en la que se ha producido el error y el nombre de la referencia que no se puede resolver correctamente. Puedes encontrar ambos elementos en el elemento faultstring de la respuesta de error.
Por ejemplo, en el siguiente faultstring, el nombre de la política es
SpikeArrest_AuthProxy
y la referencia esrequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
En el XML de la política de Spike Arrest fallida, comprueba que el nombre de la referencia utilizada coincida con el nombre de la referencia identificada en la cadena de error (paso 1 anterior). ** **
Por ejemplo, la siguiente política define el elemento
con la referencia llamada request.header.rate
, que coincide con lo que hay en faultstring:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy"> <DisplayName>SpikeArrest_AuthProxy</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <Rate ref="request.header.rate"/> </SpikeArrest>
Determina si la variable está definida y disponible en el flujo en el que se ejecuta la política Spike Arrest.
Si la variable es:
- Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
- no se puede resolver (no está definido)
entonces, esa es la causa del error.
En el ejemplo anterior, se supone que el valor de la tasa de detención de picos del elemento
<Rate>
se obtiene del encabezado de solicitud llamado rate. Sin embargo, Apigee no puede resolver request.header.rate. Esto ocurre si el encabezado rate no se incluye en la solicitud a la API.A continuación, se muestra una solicitud de API de ejemplo que no incluye el encabezado rate como parte de la solicitud:
curl -v http://your_host_alias/check_spikearrest -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 rate no se transfiere como parte de la solicitud, la referencia request.header.rate utilizada en el elemento
<Rate>
de la política SpikeArrest anterior no está definida y, por lo tanto, no se puede resolver. Por lo tanto, recibirás el código de error:policies.ratelimit.FailedToResolveSpikeArrestRate
Resolución
Asegúrate de que la variable a la que se hace referencia en el elemento <Rate>
exista o esté definida y disponible en el flujo específico en el que se ejecuta la política Spike Arrest.
Para corregir el ejemplo anterior, puede modificar la solicitud para incluir el encabezado rate, tal como se muestra a continuación:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
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.