Hello,
Regarding SOAP being heavyweight, is that something that people just
learn to live with, or is it a choice?
There are pros and cons to SOAP. In many situations, the "heavyweight"
issue isn't a big issue. If you call a web service once per day, who
cares if it takes an extra 250 milliseconds to run?
Using SOAP saves you from having to code the plumbing yourself. If you
have good SOAP tooling then you can just do a call to the SOAP service,
and it works.
For example, here's a simple example of calling a SOAP web service from
PHP (assuming that $address contains an address you wanted to GeoCode)
<?php
$wsdl = '
http://geocoder.us/dist/eg/clients/GeoCoderPHP.wsdl';
$client = new SoapClient($wsdl);
$result = $client->geocode($address);
echo $result[0]->lat . "\n";
echo $result[0]->long . "\n";
?>
That's very simple to code... (only two of the lines, above are
actually calling the web service. The rest is just working with the
contents of variables...) It's simple because the tooling does all of
the work for you, you don't have to do all of the crazy XML stuff
yourself. Really easy to code.
It'd take at least twice as much code to do the same thing with REST.
Probably more than that, because the URL would have to be built, and the
response would have to be parsed. And if you had to send a document as
well (such as an XML or JSON containing data to store in a database or
something) then you have to build that, too.
Granted, the REST code will run faster, but the SOAP code is much easier
to code.
On the other hand, if you DON'T have good tooling, and have to built the
XML data yourself, and parse the response yourself... then SOAP is at
least as hard to code as the REST (maybe more so, since the XML tends to
be more complex) and therefore the fact that REST is lightweight is a
big advantage.
In other cases, where you're doing constant communications (every few
seconds) the overhead of SOAP will be a much bigger issue.
That is, if you buy into the frameworks that support it, do you just
go with the flow, because it's easiest? If you're a producer of Web
Services do you just publish that way by default? Would you have to
go out of your way to simplify the interface?
For the most part, simplicity in the SOAP interface is a non-issue,
because your caller will have tooling to handle the complexity. You
just hand the caller your WSDL, and poof, he can call your web service.
With REST, it's harder... you have to "teach" (often through
documentation) your caller how to call your service, because there's no
standard for REST. So each call to a RESTful service will be different
from others... so everyone needs to read the documentation and
understand it, and code it accordingly.
That's a non-issue with SOAP because, again, the tooling does all the
work. Give the tool your WSDL, and it "just works." The intelligence is
in the tooling.
I read that WSDL/SOAP have the benefit of publishing to a UDDI
directory so people can more easily find your service. Does that
affect the decision?
UDDI really never caught on... it was a big deal at first, but never
really gained much momentum.
Personally, if I'm going to call a web service internally, or if I'm
going to call it from JavaScript (including a framework) then I use
REST, or something similar to REST (such as Sencha's Ajax Proxy --
though, their REST proxy works, too.)
If I'm going to publish the web service as something I expect other
people to use (such as customers) I'll make it SOAP, because it's just
easier than spending _ALL_ of my time on the phone explaining things to
every customer.
Of course, we are a small shop. In a big enterprise, who has separate
IT departments scattered around the country or the globe, then SOAP also
makes a lot of sense (for the same reasons -- not having to explain
everything.)
Finally... I'm often asked to call existing web services, and I don't
have any say in how that web service works. in that situation, of
course, I don't have a choice, I do whatever they ask. Most of the time
(in my experience, anyway) that'll be SOAP. At one time, I'd say 99% of
the web services out there were SOAP -- but recently, that has changed,
as REST has made huge strides in the market. Now it's more like 70% SOAP.
As an Amazon Associate we earn from qualifying purchases.