Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
InvalidMessageWeight
Código de erro
policies.ratelimit.InvalidMessageWeight
Corpo da resposta de erro
{ "fault": {jdoe "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 especificado para o elemento <MessageWeight> através de uma variável de fluxo for inválido (um valor não inteiro).
Por exemplo, se o valor da variável de fluxo especificada para o elemento <MessageWeight>
for 1,5 (um valor não inteiro), ocorre o erro.
Diagnóstico
Identifique o valor inválido usado para o elemento
<MessageWeight>na política SpikeArrest. Pode encontrar estas informações no elementofaultstringda resposta de erro. Por exemplo, no erro seguinte, o valor inválido usado para o elemento<MessageWeight>é1.5:"faultstring": "Invalid message weight value 1.5"Examine todas as políticas de Spike Arrest no proxy de API específico onde ocorreu a falha. Pode haver uma ou mais políticas de restrição de picos em que o elemento
<MessageWeight>é especificado.Por exemplo, a seguinte política especifica o valor de
<MessageWeight>através de uma variável de fluxo denominadamessage_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>Determine o valor da variável usada no elemento
<MessageWeight>das políticas de restrição de picos identificadas. O valor da variável de fluxo pode ser extraído de cabeçalhos HTTP, parâmetros de consulta, uma carga útil de pedido XML ou JSON, ou definido noutra política.- Localize o código no proxy da API, onde a variável foi definida pela primeira vez.
- Depois de descobrir a política na qual a variável é definida e preenchida primeiro, verifique como o valor da variável é definido.
- Se o valor da variável de fluxo corresponder ao valor identificado no passo 1 acima, essa é a causa do erro.
Por exemplo, suponha que é usada uma política de JavaScript antes da política de restrição de picos para definir a variável
message_weightcom base no método de pedido, conforme mostrado abaixo:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }Repare que o valor da variável
message_weighté1.5, que é um valor inválido (não inteiro).
Resolução
Certifique-se de que o valor do elemento MessageWeight é um valor válido (valor inteiro).
Para corrigir o exemplo apresentado acima, pode modificar o valor da variável message_weight no JavaScript para ser um número inteiro:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
Código de erro
policies.ratelimit.FailedToResolveSpikeArrestRate
Corpo da resposta de erro
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
}
}
}Causa
Este erro ocorre se a referência à variável que contém a definição da taxa no elemento <Rate> não puder ser resolvida para um valor na política de restrição de picos. Este elemento é obrigatório e é usado para especificar a taxa de restrição de picos no formato {int}pm ou {int}ps. Por exemplo, {int}pm pode ser 500pm, o que significa 500 chamadas por minuto. Da mesma forma, um valor de 10ps significa 10 chamadas por segundo.
Diagnóstico
Identifique a política Spike Arrest onde ocorreu o erro e o nome da referência que não pode ser resolvida corretamente. Pode encontrar ambos os itens no elemento faultstring da resposta de erro.
Por exemplo, na faultstring seguinte, o nome da política é
SpikeArrest_AuthProxye a referência érequest.header.rate:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"No XML da política de restrição de picos com falhas, verifique se o nome da referência usado corresponde ao nome da referência identificado na string de falha (passo n.º 1 acima). ** **
Por exemplo, a seguinte política define o elemento
com a referência denominada request.header.rate, que corresponde ao que está em 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>Determine se a variável está definida e disponível no fluxo no qual a política Spike Arrest está a ser executada.
Se a variável for:
- Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada) ou
- não é possível resolver (não está definido)
Nesse caso, essa é a causa do erro.
No exemplo apresentado acima, o valor da taxa de detenção de picos no elemento
<Rate>deve ser obtido a partir do cabeçalho do pedido denominado rate. No entanto, o Apigee não consegue resolver o request.header.rate. Isto acontece se o cabeçalho rate não for transmitido como parte do pedido da API.Segue-se um exemplo de pedido de API que não transmite o cabeçalho rate como parte do pedido:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json"
Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade
virtualhosts.hostAliasesno ficheiro de substituições. Consulte Especifique substituições de configuração.Uma vez que a taxa do cabeçalho rate não é transmitida como parte do pedido, a referência request.header.rate usada no elemento
<Rate>na política de restrição de picos acima não está definida e, por isso, não pode ser resolvida. Assim, recebe o código de erro:policies.ratelimit.FailedToResolveSpikeArrestRate
Resolução
Certifique-se de que a variável referenciada no elemento <Rate> existe/está definida
e está disponível no fluxo específico, onde a política Spike Arrest está a ser executada.
Para corrigir o exemplo apresentado acima, pode modificar o pedido para incluir o cabeçalho rate, conforme mostrado abaixo:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
Em que your_host_alias é um domínio público usado para aceder às suas APIs,
conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições.
Consulte Especifique substituições de
configuração.