Update response body
Learn how to return a customized response body and how replace specific values in the body.
In this guide, you use the following methods to transform a JSON body:
- Directly access fields in the JSON body and inject them into a custom JSON body.
- Use extractors to capture values in a JSON body and use the
SINGLE_REPLACE
extractor mode to replace them with a specific text. - Use the
replace_with_random
Inja function to replace specific patterns in the JSON body.
This guide uses a subset of the supported transformation template attributes. To review all the attributes that you can set, see Templating language.
Before you begin
Follow the Get started guide to install Gloo Gateway, set up a gateway resource, and deploy the httpbin sample app.
Get the external address of the gateway and save it in an environment variable.
Update response body
Send a request to the
json
endpoint of the httpbin app. The request returns a JSON body that you later transform.Example output:
{ "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type": "all" }, { "items": [ "Why <em>WonderWidgets</em> are great", "Who <em>buys</em> WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
Create a RouteOption or VirtualHostOption resource that transforms the JSON body as follows:
- A new body is created in the response with the values of the
author
,title
, andslides
fields. - To extract the values, you use dot notation. Because the response is parsed as a JSON file, no extractors need to be defined. Instead, you can access the fields directly.
- A new body is created in the response with the values of the
Send another request to the
json
endpoint of the httpbin app. Verify that you see the transformed response body.Example output:
{"author": "Yours Truly", "title": "Sample Slide Show", "slides": "[{"title":"Wake up to WonderWidgets!","type":"all"},{"items": ["Why <em>WonderWidgets</em> are great","Who <em>buys</em> WonderWidgets"], "title":"Overview","type":"all"}]}
Update the RouteOption or VirtualHostOption resource to replace the word
author
with the wordeditor
. The rest of the original response body is kept.Send another request to the httpbin app. Verify that the
Example output:author
field is replaced witheditor
and that the rest of the response body is not changed.{ "slideshow": { "editor": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type": "all" }, { "items": [ "Why <em>WonderWidgets</em> are great", "Who <em>buys</em> WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
Update the RouteOption or VirtualHostOption resource to replace the
all
pattern with a random string.Send another request to the httpbin app. Verify that every
Example output:all
value is replaced with a random string.{ "slideshow": { "editor": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type": "GGza0iF/51CsVwxovaiL1g" }, { "items": [ "Why <em>WonderWidgets</em> are great", "Who <em>buys</em> WonderWidgets" ], "title": "Overview", "type": "GGza0iF/51CsVwxovaiL1g" } ], "title": "Sample Slide Show" } }
Cleanup
You can remove the resources that you created in this guide.
kubectl delete virtualhostoption transformation -n gloo-system
kubectl delete routeoption transformation -n httpbin