A point that doesn’t get emphasized enough in the REST/SOAP debates, is the nature of distributed computing on the Internet and how it is inherrently different than elsewhere, such as behind a firewall on a LAN, or within the confines of a single machine.
In Peter Deutsch’s infamous seven (updated to eight by Gosling) fallacies of distributed computing, number six - there is one administrator - is the principle difference between Internet and LAN based distributed computing, and unfortunately, next to no Web services recognize this. They believe that what worked for the Intranet, will work for the Internet.
Having one administrator is roughly what you have behind a firewall, so it isn’t technically a fallacy of all distributed computing, “just” distributed computing on the Internet. What it means is that there exists an out-of-band channel with which evolutionary aspects of the software can be managed. So tasks such as deploying new versions of interfaces can be coordinated with a phone call or an email, and the common understanding that you’re working for the same organization so you have an obligation to work together (and if you don’t feel that way, you should expect to receive a visit from your boss).
On the Internet, not only do parties not share a common administative domain, they don’t, a priori, share any trust relationship whatsoever. So the only communication you can expect with a publisher of a service is through the interface to the service itself. This is a radically different design center than previous distributed architectures such as the OMA have used.
The principle implication of this to Web services, is that on the Internet, practically all forms of distributed computing are coordination problems, requiring that a coordination language be defined that can be used to implement the types of tasks that the parties involved want/need to have implemented. Some of these languages are very specific in scope, whereas others are very general.
In my view, HTTP defines the single most general coordination language ever developed (GET/POST), and while not suitable for absolutely all tasks (like a telnet replacement, for example), it is sufficient for very many, including everything that I’ve seen Web services used for.