Назначить политику сообщений не работает на сообщениях об ошибках - PullRequest
0 голосов
/ 10 мая 2019

В Apigee политика назначения сообщений работает только для успешных ответов. Если сервер отвечает кодом ошибки, скажем, 403 Запрещено, политика не изменяет ответ. Есть ли другой способ изменить ответы об ошибках в Apigee.

Это моя политика.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <Remove>
        <Headers>
            <Header name="Server"/>
        </Headers>
    </Remove>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

В случае различных ответных сообщений об успехе и ошибке,

Обычно я создаю две политики назначения сообщений: одну для успеха и другую для ответа об ошибке.

Пример успеха:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-ReturnSuccessResponse">
    <DisplayName>AM-ReturnSuccessResponse</DisplayName>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
    <Set>
        <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        @resp.responseMessage#
        </Payload>
        <StatusCode>{resp.httpStatusCode}</StatusCode>
        <ReasonPhrase>{resp.reasonPhrase}</ReasonPhrase>
    </Set>
</AssignMessage>

Пример ошибки:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-ReturnErrorResponse">
    <DisplayName>AM-ReturnErrorResponse"</DisplayName>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
    <Properties/>
    <Set>
        <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {
            "error"     : "@resp.error#",
            "timeStamp" : "@resp.responseDateTime#"
        } 
        </Payload>
        <StatusCode>{resp.httpStatusCode}</StatusCode>
        <ReasonPhrase>{resp.reasonPhrase}</ReasonPhrase>
    </Set> </AssignMessage>

И тогда в вашем потоке вы должны установить условие для маршрутизации политики, как это

<Flow name="test">
    <Description/>
    <Request/>
    <Response>
        <Step>
            <Name>AM-ReturnSuccessResponse</Name>
            <Condition>resp.httpStatusCode == 200</Condition>
        </Step>
        <Step>
            <Name>AM-ReturnErrorResponse</Name>
            <Condition>resp.httpStatusCode != "200"</Condition>
        </Step>
    </Response>
</Flow>

Примечание: Поскольку обычно http-код статуса успеха равен 200, поэтому я установил условие как код выше. Но это, например, вы можете спроектировать условие в соответствии с вашим сценарием.

0 голосов
/ 31 мая 2019

Вы можете изменить ответы об ошибках в Apigee, используя FaultRules. Вы можете взглянуть на документацию Apigee о обработке ошибок .

Причина, по которой ваша политика AssignMessage не выполняется, состоит в том, что ошибка возникает до того, как ваша политика выполняется, и, следовательно, пропускается.

Вы можете либо переместить свою политику AssignMessage, чтобы она выполнялась ранее в потоке, либо перехватить ошибку, используя логику обработки ошибок, и выдать ошибку, когда вы выполнили всю желаемую логику.

...