How to build soap to rest gateway - soap

How would you build a soap to rest gateway with the least amount of work? I provide a REST API on my Rails 3.2 server. My customer requires me to provide a SOAP API. I don't want to use Rails for providing the SOAP API since that would probably take much more work than building a SOAP to REST gateway using a framework that fully supports SOAP.

I just noticed that Rails 3.2 parses SOAP requests automatically into the params hash (ActionDispatch::ParamsParser Rack middleware). So, I decided to implement the gateway in Rails. Since I don't really care to implement a full featured SOAP Server--all I want is to make it work for my customer's current SOAP client--I will just read the data that I need from the params hash and build the xml response using Builder and publish a static wsdl file if they need it. It will be less than 20 lines of code.
config/routes.rb
Gateway::Application.routes.draw do
match "/clientx/echo" => "clientx#echo"
end
app/controllers/clientx_controller.rb
class ClientxController < ApplicationController
def echo
# authenticate client
# parse params
# send and receive rest request
# render response
end
end

What about Mule ESB? Supports a various form of input and output possibilities. Implemented a SOAP-receiving application based on Mule myself.

Related

Should I be using REST or SOAP UI for testing?

I am testing a new webservice that is receiving messages from an application and responding with messages with specific information. The webservice then uses this information to create new messages for downstream systems. I need to know the best way I can test this using the Ready API tool, we just got a pro license. Is it SOAP or REST I need to use. Ideally I want to simply copy my application messages in to the tool, call the webservice and get the response, which I can then check is the correct response for the test
To find your web-service is SOAP or REST.
Please check whether your web service has WSDL to verify it has SOAP web-service, you can get your web-service's WSDL by post-fixing WSDL with your web service url.
Eg: http://{yourservice-url/path1}?WSDL
If your service don't provide WSDL from the above URL, then your web-service is REST.

How to make a REST API call from SOAP

I would like to know the best practices of calling a REST API from SOAP.
Requirement:
We have a SOAP-based web service that is already consuming by many applications. we would like to rewrite the SOAP API with Rest(basically a Spring boot application), but we want to call the rest from SOAP to support the existing applications.
The one way I know is we can call the Rest Api from the SOAP server implementation class
EX: Consider EmployeeService;java is a SOAP implementation class
EmployeeService.java
getEmployee(){
Calling new Rest Api
}
Existing app1 ---->SOAP --> REST API
Existing app2 ---->SOAP --> REST API
new app1 --> REST API.
Please let me know is there any best way\alternate way to handle it.
You can use boomerang soap client.
Detail here

Can't we access our jersey api without using jerseyclient api

I want to build my website like naukri.com (not exactly) but concept may match.
Currently I am writing API using jersey and consuming those API's directly from front end using AJAX request.
Do I need to write jersey client here as well, if so how that will help me out. Pls let me know, Why we need to write client if we are able to consume API's directly using ajax call.
You don't need a special client in order to interact with RESTful services. That's one of the main things that is appealing about them. There is no requirement to build anything with jersey client in order to host services with jersey.
You would build a client library if you want to make it easy for people to interact with your APIs from something an application. If this isn't something you need or want to do, you don't have to do it. Another use case would be for testing but there's no reason you have to build the client with jersey just because you built the server with jersey.
In your case you don't need jersey client, you already have client to call/consume API's at front-end i suppose, you will need jersey client if you want to call/consume your services at server-side to write test cases for example, something like this -
Client client = Client.create();
WebResource webResource = client
.resource("http://localhost:8080/RESTfulExample/rest/json/metallica/get");
ClientResponse response = webResource.accept("application/json")
.get(ClientResponse.class);

REST based Website

I have to create 2 different websites that would use REST api to interact with a single MySQL database.
I know how to create website with forms..etc using PHP.
How would I use REST api for my websites.I searched and found out that there are libraries for android to use REST api but how to do so in case of a website ?
REST is a architectural pattern, it is not (by itself) an API. APIs can implement REST.
Just like any other API out there, you have to get the documentation for the API and then call it from your source.
Depending on what your requirements are, you may be calling it from javascript or from your PHP backend.
REST is an architecture pattern (you can read more about it at wikipedia) which aims to use HTTP verbs like PUT, POST and DELETE to execute commands against endpoints which represent a resource.
To use REST, your backend server will send normal HTTP requests to the API service; so in PHP this means using the various curl libraries to send requests.
Responses are generally in json; but they could be in any other format (or even in binary) - check with the API documentation that you have to consume.
If all you want is interacting with a REST API, then you need a HTTP client, probably cURL (PHP has a cURL lib). After that you have to check whether your API violates the HATEOAS constraint. If not, then it is called hypermedia API. In that case you have to follow hyperlinks provided by the API in the responses. If it violates the constraint, then it is called web API, and you have to build the method, URL, etc... on the client side again, so your client will break easily by any structural changes of the API. Everything else depends on the message format and the semantic annotations the API uses.
If you want to build a REST API, I strongly suggest you to learn more about the topic. First read the Fielding diessertation and check some existing solutions like HAL or Hydra+JSON-LD. Forget the tutorials. Most information available on the web about how to implement a REST API is flawed.

rest api from javascript to handle session and security

I'm developing a public rest api and want to use it for my company's web client as well (jquery). That would work since it would be on the same server.
Howerver, my question is whether rest is even supposed to be consumed by JavaScript? What about authentication and authorization and session information. Since rest is not supposed to maintain any session state.
Can I store all the state, create the response with the token etc within JavaScript?
or should I create another plain servlet layer ontop of my own rest api as a rest client which could be richer (break rest principles)
Create an extra version for the rest api that allows some less rest-like behavior (session data) and maybe even keep that private.
as a side question I'm also wondering if there's any performance difference between using say Jersey vs regular servlets processing calls? In other words, can I use Jersey as a servlet replacement (to take advantage of the format conversions).