O que precisa de saber sobre erros de políticas

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Este tópico descreve a estrutura dos erros de políticas e os tipos de variáveis de fluxo que são definidas quando ocorre um erro de política. Estas informações são essenciais se estiver a conceber e a implementar o processamento de falhas para os seus proxies.

Este tópico pressupõe que tem uma compreensão geral de como funciona o processamento de falhas no Apigee e que sabe o que são regras de falhas. Se precisar de uma revisão, consulte o artigo Como lidar com falhas. As informações aqui apresentadas também ajudam a navegar e usar a referência de erros de políticas.

Acerca da resposta de erro da política predefinida

Quando uma política gera um erro, o Apigee entra imediatamente no fluxo de erros e gera uma mensagem de erro. Esta mensagem gerada pelo sistema é um objeto JSON que inclui dois fragmentos de informações: um errorcode e um faultstring.

Por exemplo:

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"mymessage message is not available for ExtractVariable: ParseJsonResponse"
   }
}

Vamos analisar rapidamente esta mensagem de erro:

O errorcode consiste num prefix e num error name, da seguinte forma: [prefix].[error_name]. No exemplo acima, "steps.extractvariables" é o prefixo e SourceMessageNotAvailable é o nome do erro. O prefixo indica o tipo de política que gerou o erro. No exemplo acima, pode ver que uma política ExtractVariables gerou o erro e que o nome do erro é SourceMessageNotAvailable.

O elemento faultstring contém uma descrição do erro. Normalmente, a string de falha inclui pistas para ajudar a encontrar o problema específico que causou o erro, como o nome da política, o nome de uma variável não resolvida ou o que quer que tenha contribuído para o erro. Por exemplo, na mensagem de erro acima, mymessage é o nome de uma variável de mensagem não resolvida referenciada na política e ParseJsonResponse é o nome da política que acionou o erro.

Variáveis específicas de erros de políticas

Quando é acionado um erro de política, são preenchidas determinadas variáveis de fluxo específicas do erro. Estas variáveis são extremamente úteis no processamento de falhas. Conforme explicado em Processar falhas, é uma prática comum capturar os erros de política gerados pelo sistema e realizar uma ação subsequente, como criar uma resposta de erro personalizada. Por exemplo, por motivos de segurança, pode querer impedir que os clientes vejam os erros reais e os códigos de estado que o Apigee devolve.

A variável fault.name

Quando uma política gera um erro, define a variável de fluxo fault.name para a parte error_name do código de erro (conforme descrito na secção anterior). É muito comum avaliar esta variável para executar condicionalmente regras de falhas.

Segue-se um exemplo de uma regra de falha que testa o valor de fault.name:

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Source Message Not Available Fault">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
</FaultRule>

O que deve lembrar-se é que, quando uma política aciona um erro, a variável fault.name é sempre definida como o nome do erro.

A variável [prefix].[policy_name].failed

Além de fault.name, outra variável que os programadores verificam frequentemente é a flag [prefix].[policy_name].failed, que é definida como verdadeira ou falsa quando uma política é executada. Nas regras de falha, é recomendável verificar quando é verdadeiro, ou seja, verificar se ocorreu um erro. Veja como criar uma condição que verifique a flag [prefix].[policy_name].failed. Para verificar corretamente esta variável, tem de saber duas coisas:

  • O nome da política que está a verificar. Este é o valor do atributo name da política e não o nome a apresentar. Este atributo está sempre incluído no XML da definição da política.
  • Um prefixo específico do tipo de política que está a verificar. (Explicamos como encontrar o prefixo abaixo.)

Para ilustrar, segue-se outro exemplo de regra de falha. Repare na condição externa como o nome da variável [prefix].[policy_name].failed é formado. Neste caso, o prefixo é extractvariables e o nome da política é ParseJsonResponse. Neste caso, a regra de falha só é executada se esta variável for verdadeira. Além disso, aqui tem uma sugestão: uma vez que as regras de falhas podem conter vários passos, este padrão é uma boa forma de organizar as regras de falhas em blocos.

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.ParseJsonResponse.failed = true) </Condition>
</FaultRule>

Acerca das variáveis error e message

A variável error só está disponível no fluxo de erros de um proxy. Pode obter informações úteis da variável error, como a mensagem de erro, o código de estado, entre outros. O padrão de formatação da variável de erro é o seguinte:

error.ERROR_COMPONENT = VALUE

Por exemplo:

error.message = "request message is not available for ExtractVariable:
  ParseJsonResponse"

e

error.status.code = "500"

A variável message também está disponível no fluxo de erros e pode ser usada para fins semelhantes aos da variável error. A variável de mensagem é especial porque é contextual. Num fluxo de pedidos, comporta-se como uma variável de pedido e, num fluxo de respostas, pode ser usado para obter/definir valores de resposta.

Consulte a referência de variáveis de fluxo para obter informações sobre todas as variáveis do Apigee, incluindo error e message.