Question
· Jul 6, 2023

REST Documentation Confusion

I had attempted to create a REST Operation before but did not have success. As I am going through the Tutorials and Documentation everything references REST services, but I have a case where I want to create a REST Operation that makes Epic API calls against Interconnect. I have done SOAP operations before and we currently have one in our Production Namespace, but from what I understand SOAP has the wsdl which defines al the structures and etc, where REST does not. 

So how does one go about creating a REST Operation if Learning Tutorials and Documentation always talks about REST services? How does one make the Response JSON generic enough as Epic API's return lists of categories?

Does anyone have any good examples of a REST Operation, that they take the JSON response and do something with it instead of just putting the JSON into a structure class? Is there something dynamically that can handle the JSON response and parse it apart for a user?

What I am looking to do is make it as easy as possible from a Function to make the API call and return the response to the users for them to use instead of us relying on querying a MS SQL database which is populated by data from Epic anyway. I would like us to move towards getting the data from the source as much as possible.

Maybe I am making this more complicated that it needs to be, or maybe I am getting overwhelm trying to find the correct way to do things, but could use any suggestions.

Thanks

Product version: IRIS 2022.1
$ZV: IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2022.1 (Build 209U) Tue May 31 2022 12:13:24 EDT
Discussion (1)2
Log in or sign up to continue

I wrote an article about the creation of a REST service that maybe can help you.

https://community.intersystems.com/post/creating-rest-service-iris

You can check the ClassMethod TestPost where a data is received from a post call and is sent finally to a business operation where is transformed into a DynamicObject and parsed to another class. This is the business operation:

Class WSTEST.BO.PersonSaveBO Extends EnsLib.REST.Operation
{

Parameter INVOCATION = "Queue";

Method savePerson(pRequest As WSTEST.Object.PersonSaveRequest, Output pResponse As WSTEST.Object.PersonSaveResponse) As %Status
{
	try {
      set person = ##class("WSTEST.Object.Person").%New()
      #dim request as %DynamicObject = {}.%FromJSON(pRequest.JSON)
      set person.PersonId = request.PersonId
      set person.Name = request.Name
      set person.LastName = request.LastName
      set person.Sex = request.Sex
      set person.Dob = request.Dob

      set tSC = person.%Save()
      set pResponse = ##class("WSTEST.Object.PersonSaveResponse").%New()
      set pResponse.PersonId = person.PersonId
      set pResponse.Name = person.Name
      set pResponse.LastName = person.LastName
      set pResponse.Sex = person.Sex
      set pResponse.Dob = person.Dob
      
   }catch{
       Set tSC="Error saving the person"
   }
   Quit tSC
}

XData MessageMap
{
<MapItems>
  <MapItem MessageType="WSTEST.Object.PersonSaveRequest">
    <Method>savePerson</Method>
  </MapItem>
</MapItems>
}

}