- REST == HTTP GET
- HTTP+POX == HTTP GET & POST
- SOAP == HTTP POST, with interop issues
When I’m talking to people about web services, and I hear them use various terms, this is what I feel they’re talking about most of the time.
REST almost always indicates HTTP GET with a query string. The results are probably XML, but lately they could also be JSON.
No other HTTP verbs are used (especially PUT and DELETE), and it’s highly likely that all requests are routed through the same URI.
Nobody uses this term. However, there are some web services that, while not “true REST,” use more than HTTP GET. I place them in this category.
These likely exist because the service allows you to submit a large quantity of data that is not human readable, so it does not make sense to place as part of a query string. Blobs of HTML and pictures come to mind.
For example, the eBay “XML API”. You can submit items over eBay web services. Since the item description is pure HTML, it exceeded the maximum query string length our web server would accept at the time.
Thus, the eBay XML API was invented: you HTTP POST an XML document, we return an XML document.
Again, like REST, there’s no concept of resources. Everything goes through the same URI. The action is indicated either as part of the query string or in POST body. (Or both, as in the eBay case.)
SOAP is identical to HTTP+POX, except that you’re required to use XML Namespaces and XML Schema.
You are also going to have interop issues when trying to generate the SOAP envelope to send or parse the SOAP envelope that’s returned.
XML Namespaces and XML Schema are minor headaches, but people are willing to deal with them. People understand that, in theory, namespaces are good, even if XML Namespaces are a little funky.
XML Schema can be confusing. However, it does allow you to validate the response, which most people find to be somewhat useful. The fact that XML Schema may not be the best way to describe XML data is a different issue.
If SOAP merely had these two issues, people would work through it. The real problem with SOAP is that the specification is so confusing, people can’t build interoperable clients and servers. This drives people mad.
People know how to generate arbitrary XML (it’s just text after all) and send a HTTP POST request. They also know how to parse XML, particularly when they know ahead of time what they should expect. (That’s why PHP 5’s SimpleXML extension is a great web services client.)
What they cannot do is decipher a WSDL file to determine what crazy combination of XML the server is expecting (especially when the server is not following the standard). And, assuming they can get through that, they cannot figure out how to repeatedly hammer their SOAP client into producing the magical combination of XML necessary to placate the SOAP server.
That’s the difference between HTTP+POX and SOAP.
It’s not the complexity. Well, it’s not complexity in terms of needing to build up a large document. It’s complexity in terms of trying to understand the hundreds of pages of XML specifications to generate the request and not having good examples of working XML documents to crib off of.
As to whether the message name should go in the URI? Nobody cares.