There is an external web-service (REST based) which provides logistics service. In order to consume it from our application (which is java stack), I created a client library (using jersey and jackson, which is a self-contained jar file, and gives simple getters and setters to work with). All that is needed to consume this REST service is this jar file (which is being used as re-usable asset).
However, one of our clients asked, "since we already have ESB (a middleware from IBM) for our existing integrations, why can we not have this integration also through ESB ?"
Is it possible to consume the REST based service using a middleware such as ESB(or MQ) ? If so, how ?
Will it be wise to do it ?
What arguments can I posit to my client to tell them this may not work ?
Thanks.
Is it possible to consume the REST based service using a middleware such as ESB(or MQ) ? If so, how ? -
Yes. Every ESB has its syntax/APIs. Should not be difficult to understand if you are already working with REST/http requests. Note, MQ is a message broker that will allow asynchronous communication. For example, the application that wants to consume the REST service can send a message to the broker and not wait for a response from the external service. The message broker in turn can talk REST to the external service. The message broker might expose a REST interface to consume messages. But it all depends on the use case. You may want to call REST service synchronously.
Most ESBs support calling external web services REST/SOAP. So an ESB does not necessarily mean MQ.
Will it be wise to do it ?
It depends. Many organizations set up ESB/Gateway as a policy and to route/filter/govern all external routings. Also to manage load, HA etc.
What arguments can I posit to my client to tell them this may not work ?
It will most certainly work. You should assess if using an ESB is an overhead based on your requirements.
Related
I have setup 2 noted type cluster on FrontEnd and another BackEnd. The FrontEnd has stateless services and the Backend has Statefull and actor services. Now I have seen examples where they use reverse proxy and http:// calls to communicate with stateful services, and other places where they use Remote calls calling fabric:// When should each be used if there is data intensive transfers happening between Frontend and BackEnd node types which would be better protocol?
Actually fabric:// isn't a protocol itself, it's just a syntax for Service Fabric Naming Service to resolve actual location of your service. Remoting is a better choice if you don't have to expose your service to external clients, since it will choose protocol depending on locations on client and service (may use interprocess communication in case both are located on the same node) while using http:// sticks you to only this protocol.
The fabric:// is just an Uri Scheme. It is used to identify named services, like: fabric://MyApp/MyService
There is no right answer to this question, there are many variables to take into account to select the right approach.
You can use both and it will be absolutely fine.
It far more than that, but a a simple overview I can give is:
Using HTTP communication, the services depends only on each other endpoints, and both can be treated isolated from each other during development and deployment, they will communicate even when you change services versions and tech-stack. You can use different technologies like: Java, GO, NodeJS and still have a smooth communication between your services.
Using Remoting, you might get faster communication, but higher coupling between the services, because both need to understand same interfaces and entities used for communication, to keep them in sync(compatible) will most of the time require to deploy new version of both services together.
.
If performance is not an issue at start, I would suggest go simple with HTTP, and migrate if does not attend your demands.
I got a webservice endpoint and I stumple upon how to correctly implement it.
It seems to be an parameterized exe-file which returns an XML Reply.
There is no documentation.
I am used to soap, wcf and rest but this is completely unknown to me, has anyone a guide or a best case how to implement such a service?
I can consume it with a HTTP GET but there are some questions left to me:
I know the questions are quite broad... But I could not find anything about it in the interwebz.
Is there a secure way to publish exe files as webservice?
Are there any critical downsides implementing such an interface?
Make I myself a fool and this is just an alias?
Example Url:
http://very.exhausting.company/Version/SuperStrange.exe?parameter=String
Web servers
What you call a webservice endpoint is nothing else than a web server listening on some host (normally 0.0.0.0) and some port on a physical or virtual machine and responding with some HTTP response to HTTP requests sent to that host, port and URIs that the web server cares to process.
Any web server is itself an application or a static or dynamic component of an application as the following examples illustrate:
JBoss, Glassfish, Tomcat etc. are applications, known as application servers, into which containers/servlets/plugins implementing web servers and corresponding endpoints are deployed. These listen on some port exposing generic web servers routing requests to those containers and their servlets;
a fat jar started with java -jar on a JVM which deploys a vert.x verticle featuring a vert.x HttpServer listening on some port is nothing else than a web server;
an interpreter such as node.js parsing and executing JavaScript code based on the express module will most likely deploy a web server on some port;
finally, a statically or dynamically linked application written in languages such as C++ or Go can expose a web server listing on some port.
All of the above cases feature different deployment mechanisms, but what they deploy is essentially the same: a piece of software that listens for HTTP requests on some port, executes some logic based on request and returns HTTP responses to the caller.
Your windows exe file is most likely a statically linked application that provides a web server.
Protocols
So we know you have a web server as it reacts to an HTTP GET. How does it relate to REST, SOAP etc? Effectively, REST, SOAP etc are higher level protocols. TCP is the low level, HTTP is based on top of that and your server supports that. REST, SOAP and everything else that you mention are higher level protocols that are based, among others, on HTTP. So all you know is that your application (web server) supports HTTP, but you do not know which higher level data exchange protocol it implements. It definitely implements some, at least a custom one that its author came up with to exchange data between a client and this application.
You can try to reverse engineer it, but it is not clear how would you find out about all possible endpoints, arguments, payload structures, accepted headers etc. Essentially, you have a web server publishing some sort of an API, but there is no generic way of telling what that API is.
Security
The world around you does not have to know how the API is published. You can put any of the above 4 web server implementations behind exactly the same firewall or a reverse proxy with SSL termination exposing just one host and port over SSL. So there is no difference in security, with respect to the world, whether you deploy it as exe or as a war into JBoss. This is not to say, that your exe file is secure: depending on how it is implemented it may allow all sorts of attacks, but again, this is equally true for any mechanism.
We need to expose IMS as RESTful webservice consumer. I had referred a document "Creating a RESTful Web Service for IMS-Transaction" by Ivy Ho, which talks about exposing IMS as RESTful webservice provider. In that document they selected an OUTBOUND adapter option while creating an J2C bean(Page Num 4), which makes the data to be passed from application to adapter. Is it possible if I opted INBOUND adapter which makes the data to be passed in to the application from the adapter, will it help me to expose IMS as RESTful consumer.
If any proven methods are available, to expose our application as RESTful webservice consumer, kindly share the same ?
Is it possible in the SOAP GATEWAY server to handle REST calls of the client application. So my core application can consume the REST response of client application after the data mapping in the SOAP GATEWAY server.
Kindly share your views and thoughts. Thanks in advance.
The recommended route for your IMS application to consume an external REST service would be through the API Requester function for z/OS Connect EE. The following link provides a step by step guide for doing exactly what you want: https://www.ibm.com/support/knowledgecenter/en/SS4SVW_3.0.0/com.ibm.zosconnect.doc/scenarios/ims_apiReq_intro.html
The reason this would be recommended is it funnels all outbound calls through a single gateway which can be monitored, modified, and updated without affecting your applications.
SOAP Gateway will not be able to handle REST calls. I suggest looking into IMS Mobile Feature pack which is a restful endpoint for IMS.
IMS Mobile Feature Pack Description:
This feature provides a RESTful endpoint for mobile services to access back-end IMS resources through IMS Connect. A data transformation module is included that converts request and response messages between JSON and the native representation of the input and output messages. Tooling support for modeling, creating, testing, and managing services is provided through IMS Enterprise Suite Explorer for Development.
reference:
https://developer.ibm.com/wasdev/downloads/#asset/features-com.ibm.ims.imsmobile-1.0
https://developer.ibm.com/wasdev/downloads/#asset/features-com.ibm.ims.imsmobile-2.0
I have deployed some proxy services in WSO2 ESB because I have to ask the endpoint for several responses (dataset), according to different soap action. Every response must be set in a file, so I set an appropriate sequence in the outSequence of the proxy service, and this sequence writes the soap answer into a file.
In this way i have to deploy a proxy service and a sequence for EVERY soapAction, so i ask: is there a way for deploying a single proxy service for a given web service and using it with several sequences according to the soapaction to perform?
My question was born by the need to implement several scheduled tasks that take a dataset from an endpoint (webService) and write it into a file, but i don't want to deploy so much proxy service for every kind of dataset I have to request to the web service!
I hope my question is clear.
You do not necessarily create a diffrent proxies for each and every soapAction. You can utilize the filter mediator in the OutSequence of single proxy and do the header base routing to relevant VFS endpoint.
This one may be simple, but can't find it. I understand that flows with SOAP nodes (SOAP Input for example) are exposed as web services in Message Broker. How can I consume them with soapUI?
As you should have a WSDL file specifying your web services in your soap nodes, you should take that WSDL, import it into soapUI, then specify the endpoint to your WMB machine (I think default port is 7080 or something like that). It should be pretty straight forward.