Hi,
Is there a problem with the following/Can I have your thoughts and inputs on the following:-
Preface/Motivation: I feel like the following design/approach is wrong and want to discourage it but I don’t know the underlying technical field (APIs, REST, ESBs, past state of technology trends, current modern thought) well enough to explain and defend myself so I am approaching the council of API experts on Apigee.
Situation:-
-
As an Enterprise CTO I have made an executive decision to adopt REST (build/expose/consume REST APIs) and interact with SOAP services only by exception. Essentially, this indicates my preference to modernize my tech landscape, adopt the API approach, go, lightweight, improve their complicated processes, etc.
-
At the same time, I am insisting on and have nearly decided upon using an Asynchronous integration pattern for a particular client–>server interaction say for example POST /{resource}/{resourceID} because that’s how I’ve always done it before Apigee came in the picture.
Context: Earlier, before Apigee came into the picture, an ESB alone would handle all my integration needs. I would either batch a massive file every 2 weeks, FTP it to some File Server, have BizTalk fetch the file and send it to the target or just have BizTalk (my ESB) HTTP Post to the target endpoint. This used to be done Asynchronously in a Fire and Forget manner so if something went wrong BizTalk would queue and retry.
Q: Is there anything wrong with wanting to do it this way?
Q: Is there a better way to do this?
Q: Is there any value add or reason why one would want to change this to a synchronous system?
Now my Backend Service Provider’s Server exposes an API on Apigee which my client applications consume and APIs by nature are meant for synchronous real-time use cases.
- Other Technical Questions:
a) Isn’t Asynchronous communication not REST ? (i.e. violating REST constraints)
b) Would you call it a REST API or a RESTful Web Service if consumers called it Asynchronously?
c) Is it possible to have REST Architecture and Asynchronous communication within that architecture?
Because if it is Asynchronous you are holding state somewhere that’s not the client..either a queue in the middleware/ESB or in the server. That to me is violating the stateless constraint and hence not REST.