Let's take a look at how responses from upstream systems provided by
request
/requests
or proxy-request
actions can be processed
further.
The body
function provides you with the raw body of
an HTTP response. For further processing, it may be necessary to parse the body using
functions like json-parse
or
xml-parse
:
<flow>
<requests>{
"xml": { "url": "…" } },
"json": { "url": "…" } }
}
</requests>
<eval out="$upstream-json">json-parse(body('json'))</eval>
<eval out="$upstream-xml">xml-parse(body('xml'))</eval>
<if test="$upstream-json/success">…</if>
…
</flow>
The $upstream
variable gives additional information about
upstream responses like the HTTP status and the headers. The following
recursive sub-flow demonstrates a general way how to
follow a redirect:
request.xml:
<flow>
<request>{"id": "my-request", "url": {{ $url }}}</request>
<if test="$upstream/my-request/status = 302">
<eval out="$url">$upstream/my-request/headers/location</eval>
<sub-flow src="request.xml"/>
</if>
</flow>
To just pass the upstream response downstream you can use the
pass-body
action:
<flow>
<request>{"url": "http://example.com"}</request>
<pass-body/>
</flow>