emilly
emilly

Reputation: 10530

Soap webservice request vs HTTP POST request?

I am coming from servlet/web application world and started learning web services(SOAP based). I have gone through some of the webservice tutorials. I am trying to draw the parallel between normal http request and webservice request. Here are my observations ;-

1)Both are HTTP request. Webservice is a also post request which contains soap envelope as request body. Soap envelope is just a normal xml which contains the data

2)java Stub internally marshal the XML , creates HTTP request and send it to consumer

3)Servlet at consumer side intercpets that request and unrmashal it to java object and send it to corresponding service.

Is my observation correct ? I know there may be other complexities but i tried to put the comparison in simple manner.

Upvotes: 2

Views: 26363

Answers (3)

siddhartha chakraborty
siddhartha chakraborty

Reputation: 143

Your assumptions are right:-

Yes, Servlet request and Web service request both are normal HTTP request and yes, SOAP web service internally use HTTP POST.

Yes,java internally marshal the XML. Also, at client end one java web service client(may be a wrapped in servlet) un-marshal it. A SOAP message or SOAP type web service has many characteristics like:-

  • SOAP message mostly send data using XML format. XMLs are technology independent. So, SOAP can interact with two heterogeneous web applications built in two separate technologies and exchange data using XML.
  • SOAP web services send XML using HTTP protocol. Data are sent wrapped in an XML using the payload of HTTP.
  • SOAP web services can be secured. For an example, all the payment related transactions using credit card and bank info are done using secured SOAP web services.
  • A SOAP web service accepts XML in request and returns XML in response. In case of errors this return XMLs can also contain SOAP faults. SOAP faults contain the description of error and an error code.
  • Web services can carry attachment document also like PDF, Word etc. with its XML payload. Java provides separate API for this type of web services. There is an API available in java called SAAJ to accomplish this.

Upvotes: 2

abarisone
abarisone

Reputation: 3783

I think that you can find a very good response in this blog post by Ben Klopfer.

Mainly the difference between XML/SOAP vs HTTP/REST is that the former is most response verbose while the latter is lighter.

But this is not the only aspect you have to take into account. REST represents the state of the resource and is a little bit easier to use and to understand, and always remember that it comes afterwards compared to SOAP. In addition SOAP it is not limited to using HTTP/HTTPS, but can be also used with other transports like SMTP, JMS, etc.

Resuming the post reminds you:

Use SOAP when:

  • All you need is simple operations, like read only methods

  • Implementing a one-way or one-object service for something like data exchange or transfer

  • You want finer control over the specific transport of data, or can’t always use HTTP

  • Rigid specifications need to be enforced on incoming requests, and you want to minimize additional documentation needed for use

  • You can rely on client ability to parse XML, or more preferably SOAP itself

  • You need built-in error handling when things go wrong with requests

Use REST when:

  • Operations are complex, like create/read/update/delete on objects

  • Implementing a multi-faceted service for a variety of different objects

  • You want to easily and quickly target a variety of consumer end user devices as clients

  • Requests are generally stateless, like call and response compared to a conversation

  • Your clients may have limited bandwidth or processing power

  • You can leave it up to the client to get their requests correct and to deal with problems

Upvotes: 0

GPI
GPI

Reputation: 9328

Your assumptions are generally correct. Yet, the subtelties can lead to huge differences.

Claim 1 : both are HTTP.

SOAP is generally used with an HTTP "binding". Yet it does not have to be that way. SOAP is designed to be fairly transport agnostic. It is not uncommon to have SOAP being used over JMS (although one might consider this an overuse of JMS, and an over architected protocol), it is certainly in production in many places. Rarely seen are SOAP/SMTP or SOAP/TCP without HTTP, but these exist too.

Webservice is a also post request which contains soap envelope as request body

A SOAP call over HTTP is a POST request. It may not be of content-type xml, though, as some variants such as SwA (SOAP with attachments) or XOP+MTOM variants may produce HTTP payloads that are MIME/Multipart (the first part of which is the SOAP Enveloppe in its pure XML form).
This use cas is most common when on is to send large binary content over a SOAP Call, and for which binary encoding may add a large weight to the request (base64 is a 1.3x factor in weight).

java Stub internally marshal the XML, creates HTTP request and send it to consumer

That is the usual way it is done, Axis framework and JAXWS frameworks work primarily this way.

The older SAAJ API, a standard EE API, requires you to build your SOAP Message by hand, using the DOM APIs, (see SOAPMessageFactory), and then send it.

If you look at Spring WS, you'll have something close to your claim, but where each part is fairly exposed and in your control (you may elect to build certain calls with a DOM Api, others by using JAXB marshalling, ...).

3)Servlet at consumer side intercpets that request and unrmashal it to java object and send it to corresponding service

Again, this is how things generaly work. But you can also have an implementation that works outside a servlet container. (See Endpoint Service API in JAX WS).

Upvotes: 4

Related Questions