Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
В этом разделе описывается структура ошибок политики и типы переменных потока, которые задаются при возникновении ошибки политики. Эта информация важна, если вы разрабатываете и реализуете обработку ошибок для своих прокси.
В этом разделе предполагается, что вы имеете общее представление о том, как работает обработка ошибок в Edge, и знаете, что такое правила сбоев. Если вам нужна проверка, см. Обработка ошибок . Информация здесь также поможет вам ориентироваться и использовать справочник ошибок политики .
Об ответе на ошибку политики по умолчанию
Когда политика выдает ошибку, Edge немедленно включается в поток ошибок и генерирует сообщение об ошибке. Это сгенерированное системой сообщение представляет собой объект JSON, который включает в себя два бита информации: код ошибки и строку ошибки .
Например:
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"foo message is not available for ExtractVariable: ParseJsonResponse" } }
Давайте быстро разберем это сообщение об ошибке:
Код ошибки состоит из префикса и имени ошибки , например: [prefix].[error_name]
. В приведенном выше примере « steps.extractvariables
» — это префикс, а SourceMessageNotAvailable
— это имя ошибки. Префикс сообщает вам, какая политика вызвала ошибку. В приведенном выше примере вы можете сказать, что политика извлечения переменных сгенерировала ошибку, а имя ошибки — SourceMessageNotAvailable
.
Строка ошибки содержит описание ошибки. Строка ошибки обычно содержит подсказки, которые помогут вам найти конкретную проблему, вызвавшую ошибку, например имя политики, имя неразрешенной переменной или что-то еще, что способствовало ошибке. Например, в приведенном выше сообщении об ошибке « foo
» — это имя неразрешенной переменной сообщения, на которую есть ссылка в политике, а « ParseJsonResponse
» — это имя политики, вызвавшей ошибку.
Переменные, относящиеся к ошибкам политики
При возникновении ошибки политики заполняются определенные переменные потока, специфичные для ошибки. Эти переменные чрезвычайно полезны при обработке ошибок. Как поясняется в разделе « Обработка ошибок» , обычной практикой является перехват ошибок политики, сгенерированных системой, и выполнение последующих действий, например создание пользовательского ответа на ошибку. Например, по соображениям безопасности вы можете захотеть запретить клиентам видеть фактические ошибки и коды состояния, возвращаемые Edge.
Переменная fault.name
Когда политика выдает ошибку, она устанавливает переменную потока fault.name
в часть error_name
кода ошибки (как описано в предыдущем разделе). Очень часто эту переменную оценивают для условного выполнения правил ошибок.
Вот пример правила ошибки, которое проверяет значение 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>
Следует помнить, что когда политика вызывает ошибку, переменной fault.name
всегда присваивается имя ошибки.
Переменная [prefix].[policy_name].failed
Помимо fault.name
, еще одна переменная, которую разработчики обычно проверяют, — это флаг [prefix].[policy_name].failed
, которому при выполнении политики присваивается значение true или false. В правилах ошибок вы захотите проверить, когда это истинно , то есть проверить, произошла ли ошибка. Вот как можно создать условие, проверяющее флаг [prefix].[policy_name].failed
. Чтобы правильно проверить эту переменную, нужно знать две вещи:
- Название политики, которую вы проверяете. Это значение атрибута имени политики, а не отображаемого имени. Этот атрибут всегда включается в XML определения политики.
- Префикс , специфичный для типа проверяемой политики. (Ниже мы объясним, как найти префикс.)
Для иллюстрации приведем еще один пример правила неисправности. Обратите внимание, как во внешнем условии формируется имя переменной [prefix].[policy_name].failed
. В этом случае префикс — extractvariables
, а имя политики — ParseJsonResponse
. В этом случае правило ошибки будет выполняться только в том случае, если эта переменная имеет значение true. И вот совет: поскольку правила ошибок могут содержать несколько шагов, этот шаблон — хороший способ организовать правила ошибок в блоки.
<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>
О переменных error
и message
Переменная error
доступна только в потоке ошибок прокси. Из переменной ошибки можно получить полезную информацию, например сообщение об ошибке, код состояния, фразу причины и т. д. Шаблон форматирования переменной ошибки:
error.[error_component] = [value]
Например:
error.message
= "request message is not available for ExtractVariable: ParseJsonResponse
"
и
error.status.code = "500"
Переменная message
также доступна в потоке ошибок и может использоваться для тех же целей, что и переменная error
. Переменная сообщения является особенной, поскольку она контекстуальна. В потоке запросов он ведет себя как переменная запроса, а в потоке ответов его можно использовать для получения/установки значений ответа. Если вы хотите узнать больше, см. Варианты использования переменных сообщения .
Обратитесь к справочнику по переменным для получения информации обо всех переменных Edge, включая error
и message
.