Skip to Content
Technical Articles
Author's profile photo Jonathan Pastor

Consuming RESTful Service using JSON body parameters

Introduction

This is a scenario for connect a basic SAP-to-REST synchronous interface using JSON body parameters.
This blog contents:

  • Introduction
  • Motivation
  • System versions
  • Scenario
  • Step 1: System Landscape Directory
  • Step 2: Enterprise service builder
  • Step 3: Trusted CA’s certificate installation
  • Step 4: Integration Builder
  • Step 5: Generating the proxy
  • Step 6: Testing the proxy in ECC120UnitTest client
  • Conclusion

Motivation

We recently had to use PI to connect a REST web service. I had to learn basics about PI with REST, the blog “Consuming Your First Synchronous RESTful Service – Step-by-Step” was very useful, I appreciate the help.

I ran into this problem, I had to research about the specific configuration to use JSon as parameters in the body, not in the request header. Next, I’ll share the solution I’ve come up with…

System versions

SAP ECC 7.4 (SAP BASIS 740 SP 23)
SAP PI NETWEAVER 7.4 (SAP BASIS 740 SP 24)

Scenario

We would like to connect SAP ECC to a new RESTful web service, this uses JSON parameters as part of message body, not header. The first request we would connect to get a security identification token.This is the sample request format got from Soap UI:

POST https://xxxx.xxxx.com/api/xxxxService.svc/ExecuteCommand HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 91
Host: xxxx.xxxx.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
{
“__type”:”XXXX “,
“UserName”:”XXXX”,
“Password”:”XXXX”
}

We got this sample result for the request:
{
“Data”: {
“Data”: [ {
“Codigo”: “SecurityTokenId”,
“Descripcion”: “XXXX==”
}],
“Success”: true
}
}
}

Next picture shows the scenario in Soap UI:

Soap%20UI%20scenario

We had to consider these annotations:
1. Use of https requires of SSL certificate
2. There are not parameters in the header of the request
3. Media type is settled to application/json
4. The JSON body parameter contents special characters (“__type”)

 

Step 1: System Landscape Directory

Transaction SXMB_IFR

 

1. Create a new product and version

In tab General set vendor and product name
In tab Software Components set a new Product Instance and a new Software Component Version

 

Step 2: Enterprise service builder

We created these objects:

1. Create software component version, got from SLD

 

2. Data types for request and response

* The name of field “__type” is not allowed, we had to use XML to JSON name mapping in Integration Builder Communication Channel.

Data Type for response

 

3. Message Types

Request

Response

 

4. Service interfaces

Request

Response

 

5. Message mappings

Request

Response

*Object ns0:mt_aut_response right-click marked “Return as XML”

 

6. Operation Mapping

Request Tab

Response Tab

 

Step 3: Trusted CA’s certificate installation

In SAP NetWeaver Administrator / Configuration / Certificates and Keys we installed the CA certificate.

Installed certificate.

 

Step 4: Integration Builder

We created these objects:

Already existed the Business Systems BS_BNV_D and ECC120UnitTest, they were created in the system landscape directory.

 

1. Communication channel

SAP XI adapter type (sender):

 

SAP REST adapter type (receiver):

*At first, we couldn´t see the adapter type REST when we were creating the communication channel, we had to upgrade the version of component XI CONTENT SAP_BASIS 7.40

After import finalized:

We used the key store of the installed certificate in trusted CA’s.

Rest URL Tab

REST Operation Tab

Data Format Tab

*Element Name corresponds with the message type created in ESR for the response.

*Here we defined the mapping name between XML and JSON.

HTTP Headers Tab

 

2. Receiver determination

 

3. Interface determination

 

4. Sender agreement

 

5. Receiver agreement

 

Step 5: Generating the proxy

In SAP ECC, SPROXY transaction we created the proxy.

How class looks.

 

Step 6: Testing the proxy in ECC120UnitTest client.

Define parameters for test, changing String X with the correct values.

 

Sucessfull answer from remote host

 

How it looks in SXI_Monitor transaction.

Message overview in SAP NetWeaver.

 

Conclusion

This concludes my first blog; I hope it was helpful to understand the consumption of RESTful services using SAP PI REST adapter with JSON body parameters. Please do let me know your comments.

 

Assigned tags

      2 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Gowtham M
      Gowtham M

      Hi Jonathan,

       

      Thanks for sharing this blog!!

      I am trying this similar scenario , I need to pass values to external system . I am trying to pass values to its payload fields mentioned in the body of the REST url. as mentioned in the attached POSTMAN screen shot. is this achievablScreen%20Shot%20taken%20from%20POSTMANe through this approach?

      Screen Shot taken from POSTMAN

      Author's profile photo Jonathan Pastor
      Jonathan Pastor
      Blog Post Author

      Hello Ghowtam, thanks for read this blog.

      I think you can use this approach to solve your issue.

      Best regards,