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
Comments
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>
}
}