One of my most popular blog entry is the one about Json. I have also had some questions outside this website about this topic.
This week I got a task. We need to communicate with a payment service that uses REST web services and Json file format.
I got a document describing the service. Some methods use GET and some use POST. Here is how I did this.
In the heart of it all I use Codeunit 1297, “Http Web Request Mgt.”.
Every time we talk to this POS API we send an Access Token. If we don’t have the token in memory (single instance Codeunit), we need to get a new one. That is what the above code does.
The ParameterMgt Codeunit is what I want to focus on. You can see that I start by inserting my “Authorization Key” into the RequestBodyBlob. As usual, I use the TempBlob.Blob to get and set my unstructured data.
The interesting part here is that I use an XMLPort to create the data I need to post to the Api.
A simple one in this example, but nothing says it can’t be complex. Then I convert the Xml to Json with a single function.
The last TRUE variable means the the Document Element will be skipped and the Json will look like it is supposed to.
The REST service response is Json.
And to read the Json response we take a look at the GetAccessToken function.
Here I start by converting from Json to Xml.
And make sure my Document Element name is “posApi”.
And I have the result.
As you can see from the documentation some of the Json data is more complex. This method will work nevertheless.
For more complex date I always create tables that matches the Json structure. These table I use temporary through the whole process so the don’t need to be licensed tables. Here is an example where this XMLPORT
will read this Json
I suggest that with our current NAV this is the easiest way to handle REST web services and Json.