O que você precisa saber sobre erros de política

Esta página se aplica à Apigee e à Apigee híbrida.

Confira a documentação da Apigee Edge.

Neste tópico, descrevemos a estrutura dos erros de política e os tipos de variáveis de fluxo que são definidas quando ocorre um erro de política. Essas informações são essenciais para projetar e implementar o tratamento de falhas para seus proxies.

Neste tópico, supomos que você tenha uma compreensão geral de como funciona o processamento de falhas na Apigee e saiba o que são regras de falha. Se você precisar de uma revisão, consulte Como lidar com falhas. Essas informações também vão ajudar você a navegar e usar a Referência de erros da política.

Sobre a resposta de erro de política padrão

Quando uma política gera um erro, a Apigee entra imediatamente no fluxo de erro e gera uma mensagem de erro. Essa mensagem gerada pelo sistema é um objeto JSON que inclui dois bits de informação: um errorcode e um faultstring.

Exemplo:

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

Vamos descompilar rapidamente essa mensagem de erro:

O errorcode consiste em um prefix e um error name, da seguinte maneira: [prefix].[error_name]. No exemplo acima, "steps.extractvariables" é o prefixo e SourceMessageNotAvailable é o nome do erro. O prefixo informa o tipo de política que gerou o erro. No exemplo acima, é possível dizer que uma política ExtractVariables gerou o erro e o nome do erro é SourceMessageNotAvailable.

O faultstring contém uma descrição do erro. A string de falha geralmente inclui pistas para ajudar você 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 contribuiu para o erro. Por exemplo, na mensagem de erro acima, mymessage é o nome de uma variável de mensagem não resolvida mencionada na política e ParseJsonResponse é o nome da política que acionou o erro.

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

Quando um erro de política é acionado, determinadas variáveis de fluxo específicas do erro são preenchidas. Essas variáveis são extremamente úteis no gerenciamento de falhas. Como explicado em Como lidar com falhas, é prática comum interceptar os erros de política gerados pelo sistema e executar uma ação subsequente, como criar uma resposta de erro personalizada. Por exemplo, por motivos de segurança, talvez você queira evitar que os clientes vejam os erros reais e os códigos de status que a Apigee retorna.

A variável fault.name

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

Veja um exemplo de 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>

Lembre-se de 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 desenvolvedores geralmente verificam é a sinalização [prefix].[policy_name].failed, que é definida como verdadeira ou falsa quando uma política é executada. Nas regras de falha, verifique se é verdadeiro, ou seja, verifique se ocorreu um erro. Veja como criar uma condicional que verifica a sinalização [prefix].[policy_name].failed. Para verificar corretamente essa variável, você precisa saber duas coisas:

  • O nome da política que você está verificando. Esse é o valor do atributo de nome da política, não do nome de exibição. Esse atributo é sempre incluído no XML da definição da política.
  • Um prefix específico para o tipo de política que você está verificando. Explicaremos como encontrar o prefixo abaixo.

Veja a seguir outro exemplo de regra de falha. Observe na condição externa como o nome da variável [prefix].[policy_name].failed é formado. Nesse caso, o prefixo é extractvariables e o nome da política é ParseJsonResponse. Nesse caso, a regra de falha só será executada se essa variável for verdadeira. E aqui está uma dica: como as regras de falha podem conter várias etapas, esse padrão é uma boa maneira de organizar regras de falha 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>

Sobre as variáveis error e message

A variável error está disponível apenas no fluxo de erros de um proxy. É possível receber informações úteis da variável de error, como a mensagem, o código de status, a frase de motivo e assim por diante. O padrão de formatação da variável de erro é o seguinte:

error.ERROR_COMPONENT = VALUE

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 à variável error. A variável de mensagem é especial porque é contextual. Em um fluxo de solicitação, ele se comporta como uma variável de solicitação e, em um fluxo de resposta, pode ser usado para conseguir/definir valores de resposta.

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