Azure Logic Apps Toolbox 5-Custom JSON payloads

2021-01-14 | Christoph Wilfing

Did you ever have the problem of pushing different JSON payloads to a logic app and hitting errors due to JSON schema mismatches? The usual HTTP Request forces you to define the JSON Schema at the beginning. For every tiny difference in the later used properties you need to create your own Logic App even if the process is the same. I will show you an example of a single Logic App deciding at runtime which JSON schema to use for decoding the post body payload. Stay tuned!

We will start with an empty Logic App and the typical HTTP Request. This will trigger the logic app and start our journey.

image

The HTTP post body schema is a simple one with a single value called "Request" of type string and a another one called "RequestValue" of type object. We are not going into more detail of the RequestValue object because we don’t want the initial request to break if the rest of the JSON is different.

So, we plan to call the endpoint with a HTTP POST request with a body similar as here:

{
"Request": "test1",
"RequestValue": "{ …something… }"
}

As next action, we add a switch operation to react depending on the Request.

image

This basic schema allows us to use the automatic created request property of the HTTP Request as input to our switch statement in the next step. Sample requests to this Logic App could be payloads as here:

Version 1:

{
"Request": "test1",
"RequestValue": { "Testvalue" = "test" }
}

Version 2:

{
"Request": "test2",
"RequestValue": { "Testvalue1" = 1, "Testvalue" = "1234" }
}

etc…

Each case in the switch statement corresponds to one version of JSON payload we can drop into the logic app.

image

Based on the first "Request" Property value and the switch decision we can now build our second stage of JSON payload parsing.

image

The Parse JSON step takes the object of the response value of the HTTP trigger and can be filled with different schemas for each execution tree in the switch statement.

image

Above you see the schema for one of the payloads. A very simple one, but you can get as creative as you like or need to. You can test the logic app with different payloads with a few lines of powershell code (yes, you can use Postman or other tools, too). Just create a few more case statements in the switch and post different bodies to the Logic App as shown below.

Invoke-RestMethod -Method Post -Uri $Uri -Headers $Header -Body $(Body1 | ConvertTo.Json)

image

If we look at the output of the commands, we can see the response of the Logic App from the different Switch Paths.

image

With these steps you can have a single Logic App to distinct between different JSON Payloads and react based on the initial HTTP requests without hitting an error on the first request. Dynamic requests can be handled with a single Azure Logic App.

Have Fun!

Categories: Azure, Cloud, Developer, English, Flow, Logic apps, Microsoft, PowerShell

Source: https://blog.atwork.at/post/Use-Azure-Logic-Apps-custom-json-payloads