W3C home > Mailing lists > Public > www-ws-arch@w3.org > February 2003

Re: Setting the state of the trout pond vs invoking the CleanTroutPon d method (was RE: Dead trout)

From: Mark Baker <distobj@acm.org>
Date: Wed, 19 Feb 2003 10:22:11 -0500
To: "Champion, Mike" <Mike.Champion@SoftwareAG-USA.com>
Cc: www-ws-arch@w3.org
Message-ID: <20030219102211.W19708@www.markbaker.ca>

On Wed, Feb 19, 2003 at 09:28:13AM -0500, Champion, Mike wrote:
> > This is so meta. 8-)
> 
> I don't think so.

I was just referring to the fact that we're talking about a trout pond.
8-)

>  This is the essence of the SOA "vs" REST debate that has
> gone on for more that a year.

I've been at it for about five years!

> > How about this;
> > 
> > DELETE http://example.org/pond/trout/?status=dead
> 
> Uhh, there's an impedance mismatch between the physical trout pond and the
> Web representation of it.  That DELETE request will surely time out in the
> time it takes Joe to scoop out the dead fish!  In this particular case, it
> probably DOES make more sense to model the interaction between the "Trout
> Pond Manager Client" and the physical trout pond via requests to perform an
> action ("methods") rather than exchanging state representations.  

DELETE just means "remove all representations".  It's not an attempt to
actually delete the resource, which could be something physical as you
say.  I know, poor name.  "FLUSH" or "CLEAR" would have been better.

> > But before anybody jumps on that with "Aha!  Web services are 
> > for those cases!", I'd point out that it's very uncommon to 
> > find such an action in practice.
> 
> I beg to differ.  You've been on the Web too long, son :-)

Indeed.  8-) It's all that experience that lead me to this conclusion.

> Bottom line: at least SOME (a large class of interesting examples!) Web
> services use cases involve "services" that are performed out in the real
> world.  It is probably possible to model all these RESTfully, e.g. instead
> of DELETEing the virtual dead fish PUT-ing the state of the trout pond to
> "CleanupInProgress" and Joe will set it to  "Clean" when he's done.  (Not
> sure whether we need a God to set it to "Unclean" when the next fish dies or
> what).  But I've seen no plausible argument that "CleanTroutPond(Joe)" is
> not a good way to model this class of problems.

It's that a priori issue again; that the REST approach works in the
context of an already deployed coordination language, while typical Web
services construct per-service coordination languages.  Coordination
languages are *extremely* expensive to deploy (and extremely difficult
to design, for that matter).  That's why, during a typical day, I use
perhaps three of them (HTTP, SMTP, POP).  Web services suggests that
we'll have a new one for each service I might want to use.

For example, here's a coordination language for coordinating the sending
and receiving of faxes;

http://www.interfax.cc/webservice/dfs.asmx?WSDL

and here's one for doing public key operations;

http://ntg.webs.innerhost.com/RSAFunctions/RSAFuncs.asmx?WSDL

and here's one for sending and managing SMS messages;

http://www.abctext.com/webservices/SMS.asmx?WSDL

You get the idea ...

Anyhow, I've got a fair bit of empirical evidence backing me up on these
claims.  In all my time studying successful Internet scale systems, I've
yet to see one that wasn't built around a single, general coordination
language.  To suggest that there's no important difference in the
ability for coordination language based systems, and non-coordination
language based systems to be deployed on the Internet, flies in the face
of this evidence.

MB
-- 
Mark Baker.   Ottawa, Ontario, CANADA.        http://www.markbaker.ca
Web architecture consulting, technical reports, evaluation & analysis
Received on Wednesday, 19 February 2003 10:19:19 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 3 July 2007 12:25:15 GMT