Qué debes saber acerca de los errores de política

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

En este tema, se describe la estructura de los errores de políticas y los tipos de variables de flujo que se establecen cuando se produce un error de políticas. Esta información es esencial si estás diseñando y, luego, implementando el control de errores para tus proxies.

En este tema, se supone que tienes conocimientos generales sobre el funcionamiento del manejo de fallas en Edge y que sabes qué son las reglas de fallas. Si necesitas una revisión, consulta Manejo de fallas. La información que aparece aquí también te ayudará a navegar y usar la Referencia de errores de políticas.

Acerca de la respuesta de error de la política predeterminada

Si se genera un error en una política, Edge ingresa al flujo de errores de inmediato y genera un mensaje de error. Este mensaje generado por el sistema es un objeto JSON que incluye dos bits de información: un código de error y una faultstring.

Por ejemplo:

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

Vamos a deconstruir rápidamente este mensaje de error:

El errorcode consta de un prefijo y un nombre de error, como se indica a continuación: [prefix].[error_name]. En el ejemplo anterior, "steps.extractvariables" es el prefijo y SourceMessageNotAvailable es el nombre del error. El prefijo te indica qué tipo de política generó el error. En el ejemplo anterior, puedes ver que una política Extrae variables generó el error y el nombre de error es SourceMessageNotAvailable.

faultstring contiene una descripción del error. Por lo general, la string de falla incluye pistas para ayudarte a encontrar el problema específico que causó el error, como el nombre de la política, el nombre de una variable sin resolver o lo que haya contribuido al error. Por ejemplo, en el mensaje de error anterior, “foo” es el nombre de una variable de mensaje sin resolver a la que se hace referencia en la política y “ParseJsonResponse” es el nombre de la política que activó el error.

Variables específicas para errores de la política

Cuando se activa un error de política, se propagan ciertas variables de flujo específicas del error. Estas variables son muy útiles en el manejo de errores. Como se explica en el tema Manejo de fallas, una práctica común es capturar los errores de política generados por el sistema y realizar una acción posterior, como crear una respuesta de error personalizada. Por ejemplo, por motivos de seguridad, es posible que desees evitar que los clientes vean los errores y los códigos de estado reales que muestra Edge.

La variable fault.name

Cuando una política muestra un error, establece la variable de flujo fault.name como la parte error_name del código de error (como se describió en la sección anterior). Es muy común evaluar esta variable para ejecutar reglas de errores de forma condicional.

Esta es una regla de error de ejemplo que prueba el 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>

Lo que debes recordar es que cuando una política activa un error, la variable fault.name siempre se configura como el nombre del error.

La variable [prefix].[policy_name].failed

Además de fault.name, otra variable que los desarrolladores suelen verificar es la marca [prefix].[policy_name].failed, que se establece como verdadera o falsa cuando se ejecuta una política. En las reglas de fallas, se recomienda comprobar cuándo el valor es true, es decir, para verificar si se produjo un error. A continuación, se explica cómo construir una condicional que verifique la marca [prefix].[policy_name].failed. Para verificar esta variable de forma correcta, debes saber dos cosas:

  • El nombre de la política que estás verificando. Este es el valor del atributo de nombre de la política, no el nombre visible. Este atributo siempre se incluye en el XML de la definición de la política.
  • Un prefijo que es específico del tipo de política que verificas. (Explicaremos cómo encontrar el prefijo a continuación).

A modo de ejemplo, este es otro ejemplo de regla de error. Observa en la condición externa cómo se forma el nombre de la variable [prefix].[policy_name].failed. En este caso, el prefijo es extractvariables y el nombre de la política es ParseJsonResponse. En este caso, la regla de error solo se ejecutará si esta variable es verdadera. Esta es una sugerencia: dado que las reglas de errores pueden contener varios pasos, este patrón es una buena manera de organizarlas en bloques.

<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 de las variables error y message

La variable error solo está disponible en el flujo de errores de un proxy. Puedes obtener información útil de la variable de error, como el mensaje de error, el código de estado y la frase de motivo, entre otros. El patrón de formato de la variable de error es el siguiente:

error.[error_component] = [value]

Por ejemplo:

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

Y

error.status.code = "500"

La variable message también está disponible en el flujo de error y se puede usar para propósitos similares a los de la variable error. La variable de mensaje es especial porque es contextual. En un flujo de solicitudes, se comporta como una variable de solicitud y, en un flujo de respuesta, se puede usar para obtener o establecer valores de respuesta. Si quieres obtener más información, consulta Casos prácticos de variables de mensaje.

Consulta la Referencia de variables para obtener información sobre todas las variables de Edge, incluidas error y message.