How to identify whether webservice is implemented using SOAP or RestFul? - web-services

I am quite new to this area.
Is it possible to identify webservices is implemented with SOAP or RestFul?
also, will it make any difference for Request (API call) depending on implementation method?

Actually, every web service framework have its own separate superior features. Identifying web services is implemented with either SOAP or Restful is totally based on the requirement, performance, standardization, security features as well as customization of the services on the future.
Please follow these links, I hope you will got your answers with these.
https://blogs.oracle.com/milan/entry/web_services_rest_vs_soap
http://predic8.com/axis2-cxf-jax-ws-comparison.htm
http://www.ibm.com/developerworks/java/library/j-jws11/

Related

Web API vs. RESTful services

I have been asked about the difference between Web API and RESTful services and that is also an interesting question to me. From my point of view, the only possible difference between RESTful service and Web API can be considered as that RESTful services are inherently meant to be stateless (although we can use cookies), while the concept of being inherently stateless does not apply to Web APIs as we can use sessions (can't be used in RESTful service).
However, I decided to post this question to see if there are any other potential differences that distinguish these two technologies from one another.
You're comparing a programming framework and a design paradigm. That's not a fair comparison.
Web API is a web service application framework. You can implement a REST API using it, but you don't have to. You can also write RPC-style services in it, or really just any kind of application that talks HTTP but doesn't (strictly) adhere to the REST principles.
REST is just an architectural style. It's not any protocol or framework. You can implement RESTful services using many frameworks and programming languages. Web API is just one of them for .NET.
It's true that RESTful services are stateless.
Here is the list of main REST constraints:
Client-Server
Stateless
Cache
Uniform interface
Layered system
Code-On-Demand
For more details about REST architecture I recommend Roy Fielding's publications under this link.
Coming back to your doubts, you can implement RESTful service with Web API framework, but only if you follow the rules of REST architectural style.

SOAP or REST - when there is single client & multiple service providers + contract

We are using SOAP based web services to let end user schedule service appointments. Our portal is WebService client & we have a number of Vendors(who are spread across the globe in various timezones) who are building Webservice Server operations.
We are thinking to build it as a contract first SOAP based web services so that we have tight control(interface based e.g. date-time format should be standard xsd:dateTime etc.) over what can be sent & received as part of XML messages for possible success & error scenarios(via different error codes). We want to keep single client code for all the vendors. We would like to determine
1) Should we think about using RESTful web services?
2) Is there any way the vendors can use RESTful services also if they want at their end(by sticking to our WSDL contract) & we use SOAP at our end
First a little bit about,
REST (Representation State Transfer) is an architecture style to develop webservice. In which data and functionality are considered as a resource and can be accessed via URI (Uniform Resource Indicator). It follows client server architecture and uses stateless protocol (usually HTTP). Typically in REST webserivces resources are acted upon by GET, PUT, POST,DELETE operation. Generally we use JSON to exchange data between client and server. It is light weight.
On the other hand SOAP (Simple Object Access Protocol) is a XML based mesaage protocol. Which is generally used on enterprise level to define their own interfacing and operations as services. It also follows REST architecture.
So basically, it is a RESTful webservice.
Now to answer your question,
It seems you are going to expose your webservice client on enterprise level. Which is going to be used by many vendors to implement their own webservice server.
So, it is perfect, you go with SOAP webservices.
You will define the skeleton of the webservice like Message formats, Operations, binding etc which is called WSDL. It is widely used standard and very easy to understand by any third party. Something called WADL is used for REST services also but it is not very user friendly.
The same contract (WSDL) will be used by your vendors to implement the webservice on their server in Top to Bottom approach using some API, for example JAX-WS.
This way you will have a tighter control over your operations, formats, security etc. in a single contract (WSDL).
Now if a vendor wants to use REST webservice instead of SOAP. You can build a JAVA proxy on top of your client. Which will convert your soap messages into REST to send/receive request/response to REST webservices. But you can not dictate your contract in this approach. Although, You can recommend vendors to build their own proxy to handle your SOAP webservice requests. This way your contract will be intact.
If you are going to expose your webservice client for small applications then it is alright to go with REST but if you are an enterprise and going to expand in future, you should go with SOAP for robust features and easy maintenance.
Disclaimer: please do not consider this answer as really serious.
Well, I think question too abstract. Why do you asking it? Because you see yourself that currently everything is RESTful? Then you'r right. You can do any protocol. But if you will do REST with JSON instead of XML, everybody will thank you. And if you will use 40 years old technology for creating modern service, then probably not. Same for your contractors.
The only advantage SOAP seems to have in your situation is that it is already implemented.
SOAP is a complex standard with unfriendly implementation and verbose implementation - i.e. hard to work with and maintain. Also note that you are not even using it "by the book" since your security is external to it and not using ws-security
REST based interfaces would make your and your users' lives easier. I suggest you take a look at standards and tools like swagger for building APIs.If you're running on premise you can take a look at API gateways like tyk If you're running in the cloud you also take a look at AWS API Gateway

Why doesn't REST utilize WSDLs, unlike SOAP?

For SOAP web services there is a specification which all request/responses must follow. This specification is in the form of a WSDL document. However for REST web services, why is there no such specification or WSDL? Does this make REST more vulnerable to runtime exceptions because we are not following any specifications?
There are bunch of ways to define a RESTful API just like WSDL for SOAP:
Google Discovery service format.
Mashery IODocs.
WADL.
Swagger.
Apiary.
You can find more info here on my blog post.
REST really only uses the HTTP verbs (GET, PUT, POST, DELETE, …) on a resource. All operations on a resource are supposed to be represented that way. POST is used as a catch all for when you can't express your business logic in a way that fits into the other three. That is why there isn't really a WSDL for a REST service since you only ever have 4 methods on the resource.
But you still have the possibility to describe a REST web service with WSDL 2.0.
SOAP is a protocol.
REST is an architecture.
In many references you will see REST and SOAP both mentioned as
competitors. That is not true. SOAP is actually a protocol, not an
architecture style. What REST can be compared against is SOA and RPC.
All three are examples of web service styles, each with their own
conceptual focus. RPC is focused around operations, SOA around
messages, and REST around resources. (ref)
So for SOAP, wrote WSDL document standards. But for REST there is not a standard document, but there is many the best practices be like http://jsonapi.org

Spring remoting/webservice technologies

Spring Framework provides many technologies for applications to communicate with each other over HTTP.
HTTP Invoker
RESTful MVC Controller
JAX-WS
Spring-WS
What are the differences among them? What criteria dictate which one to choose?
JAX-WS is a standard maintained by the JCP (Java Community Process) and every full featured application server implements it (or, at least, provides an implementation for it). It's easy to use (you just need a few annotations in your service class endpoint) and you don't need to worry about the implementation (and your application will carry less dependencies within it).
Spring-WS was widespread when JAX-WS was a work-in-progress (or didn't ever existed). It achieves the same that JAX-WS but it's a bit more cumbersome. From my experience it's loosing adepts in the benefit of the latter.
HTTP based services (as HTTP invoker and REST) claim to be a bit more lightweight than JAX-WS (because the endpoints don't need to handle the SOAP envelope) but are not as strong-typed as WSDL based ones.
When I have to choose I usually decide for JAX-WS if there is not a strong reason for the REST based approach. I don't like at all the HTTP Invoker one because it's security issues (even though when talking about intranets), but I think this is a kind of personal choice.
If you are integrating your own apps and you have tight control over application client and wire (e.g.corporate intranet) then use HTTP Invoker - it's really transparent to application and easy to setup. Http invoker over Internet with non reliable client authentication (without PKI auth) may be not good idea, there are security problems with java serialization used in invoker.
If invoker doesn't suit you well, and it's your own apps - then consider REST.
I think WSDL based services are good for external integration - you can define protocol with strict rules.

What is the difference between ordinary web-service and soap-based web service?

There are 2 types of web-services as I know. First one is custom xml formatted messages and the second one SOAP standard xml messages. What are the differences between them? Which one is better, what are pros and cons of each of that two approaches?
By "ordinary" I assume you mean RESTful services. This discussion would be a long one, so I'll try to give you some key points:
RESTful services are the most used flavor of Web Services. They are closely linked to the functionality and principles of HTTP and can be accessed as simple as a GET request (other operations are POST, DELETE and PUT). The core concept is the "resource" which is identified by an URI. Common formats for REST are XML and JSON. It's a pretty straightforward and easy to use technology, which is what makes it so widely available.
SOAP web services are based on XML, most of them adhering to the RPC-style of app design (calling remote methods on a server and getting a response), and use 3 main pillars:
WSDL - Web Service Description Language - used to describe a service in terms of available operations, parameters, etc.
SOAP - Simple Object Access Protocol - used to construct interaction messages between the entities involved (client, server).
UDDI - Universal Description, Discovery and Integration - used to classify and publish available web services to a repository and enable discovery by potential users.
SOAP Web Services tend to have high overhead and generally have very verbose messages, but may be good if you need to implement more complex functionality and interaction in your application.
Strictly speaking only the Soap services are webservices. They are based on the WS-* Specs standardisized by W3C and Oasis. Sometimes a also reffered as Webservice are so called POX-Endpoint (Plain old XML) or REST Endpoint, which allows you to simply get a raw XML via HTTP GET.
SOAP Services carry their schema in form of a wsdl endpoint (usualy append ?wsdl to the service endpoint), so there a lots of tools to create proxy objects and hide the complexity of the webservice call. With POX Services you need to know which schema to use from e.g. the documentation.
SOAP Services carry the payload inside the SOAP Envelope (an XML Schema with header and body with the payload in the body). Having a header independent from the payload allows to reroute the content, sign and encrypt, authenticate etc. without knowing the content. But you pay by additional overhead in the message itself.
POX on the other hand leaves all that to the webserver and relies usualy on HTTP for authentification and compression. Encription and signing had to be done by your system. It is low overhead but also low discoverability.
Whats works best for you depends a lot on your scenario. If you work in a .Net or Java World, you often find it simplest to create a proxy and use that to work with the webservices as remote objects. You get a well build infrastructure and a comfortable programming experience. If youre environment does not support the proxy generation or if it had to be called from anything, POX might the very much more lightweight way to go.
"Web Service" refers to a more abstract and general concept. We can say that anything that can be served on web is a Web Service. SOAP Web Services or RESTful services are special kind of Web Services which has wide acceptance and has their own standards. While SOAP services are built on a new XML based standard, RESTful approach makes use of existing HTTP methods, hence more widely accepted (to my experience).