Simon Fell says that
he has trouble understanding some of my arguments, in particular
this one
where I attempt to outline the value of pipe-and-filter style composition over a
choreographed solution. Let me elaborate here then.
It’s long been recognized that composition of components is simpler and more
tractable when those components share an interface, if only because you can reuse
glue code. For example,
the code written to late-bind the Unix commands “ls” and “more” into “ls | more”,
is split between the stdout-using code of “ls”, the stdin-using
code of “more”, and the binding code in the shell that processes “|”.
All of that code is reusable in more contexts than piping “ls” into “more”.
My examples were meant to show the strong similarities between Unix style composition,
and REST style composition. REST, by itself, supports two styles that I’m familiar
with, which I described there; composition-by-URI, and intermediary routing. The
latter is more powerful and flexible, but the former easier to use, though at the
cost of not being standardized (not that it should …).
From what I can tell, the Web services answer for composition lies with
choreography (and
some
in that thread appear to
agree
with that). I believe this approach will ultimately fail, and that routing (ala
WS-Routing,
PEP,
Idokorro,
KnowNow) will prevail.
James Strachan asks
that if the method doesn’t go in the SOAP envelope, could it go in the URI or an HTTP
header? My answer would be “No”, that in order to gain the benefits of REST, the only
method you need should be the one in the HTTP request line, such as GET/PUT/POST. That’s
not to say more methods can’t be defined, only that they should all have
uniform semantics,
and that when using HTTP, they should be HTTP methods.
Does that explain why HTTP is an application protocol, and not a transport
protocol?
More tail-chasing going on over at the W3C
with the chartering of the Web Services
Choreography WG. I’m really disappointed that
Tim didn’t take this opportunity
to speak his mind about the mistakes being made with Web services, especially
considering that this working group exists to
replace the hypermedia
application model, which is pretty darned fundamental to Web architecture.
I guess he knows what he’s doing though. Perhaps he feels he can contain Web
services, and prevent them from preventing him from leading the Web to its full
potential. I did think that the initial move to accept them into the W3C was an excellent
one, as there, they may actually be fixed enough to earn the right to call themselves Web
services. Unfortunately, nobody seems to be officially assigned to the task to doing
just that, though Hugo and
David try to keep things in check, what
most people know to be Web services (i.e. putting the method name in the SOAP envelope) is
a fundamentally broken style for the Internet, which is a big issue for them to tackle,
especially given the mostly neutral positions they’re expected to hold as team contacts
(not officially, but in practice it’s hard for them to hold strong opinions).
That’s why I’ve been doing it.
Sam Ruby implements the
RSS Trackback module in his RSS 2.0 feed. It’s implemented by simply
including a “trackback:ping” qualified URI in the item. For the item
that corresponded to his
announcement of
support, the URI is;
http://www.intertwingly.net/blog/1105.tb
So being the Web-head that I am, I invoked GET on it. Here’s what I saw;
<?xml version="1.0" ? >
<response>
<error>1</error>
<message<excerpt not found</message>
/<response>
I note that Paul,
Ben, and Mena had written about
what could be returned,
which is bang on from my POV, though you could also include the number
of received pings in there, which could be useful, and make a nice link from the
human-readable blog.
Just thinking out loud; I’m not trying to put more work on Sam’s plate 8-).
A nice surprise turned up in my IETF mailbox this yesterday,
Applying WebDAV to Network Configuration Management Problems.
This memo examines the potential of using WWW Distributed Authoring
and Versioning (WebDAV) technologies to address the problems of
network configuration management. It reviews requirements and issues
that have been identified in IETF network configuration management
and operator requirements discussions, matching these requirements
and issues with various WebDAV facilities. It concludes by
identifying areas for further exploration.
Bravo. We need more of this kind of reuse-friendly work.
Which reminds me … I forgot to mention that an Internet Draft that
I wrote with Dan Connolly
on a related topic
(reuse, in the context of registries)
was published too.
I awoke this morning to a dead Wifi network in my house. Oh joy. Close
to three years of pure bliss of 802.11b in the whole house, then nothing.
A quick investigation turned up
an almost
identical report explaining the state of my base station. It looks like it’s totally dead.
In the mean time, I’m now shackled to my basement PC until this gets fixed. At least
I’ve got my
new monitor
to keep me comfy there.
Arthur C. Clarke’s
third law
says;
Any sufficiently advanced technology is indistinguishable from magic
After a
busy several days on www-ws-arch
I’ve come up with my own version;
Any sufficiently advanced technology is likely to be marginalized
I
came up with it
to explain the different
binding
approaches taken by the Web and Web services.
A priori knowledge plus Ex post facto knowledge = Constant
Any suggestions for a name for this principle?
Sean McGrath points out that some folks (himself included) are making
predictions
for Web services in 2003. It’s surely an oversight that I wasn’t
asked for my predictions 8-), so here they are;
- Web services will continue to struggle on the Internet.
XMethods will list only 400 available-over-the-Internet
services by the end of the year.
- The WSA WG will have their
architecture document reviewed by the
TAG and the
Director. One or both of the
two will reject it as being incompatible with
Web architecture. Much nastiness will ensue.
Sean McGrath
calls for
a “workable definition” of a Web service in order to bring integration complexity down to O(n)
from O(N^2).
While a definition would be a good start, more importantly we need a common abstraction.
This drives integration complexity down because once you’ve integrated with one service,
you’ve (ideally, and not that uncommonly) integrated with them all.
Take for example, a blog aggregator. If everybody had their own interface to their
blog, aggregation would be an O(N^2) task. But luckily they don’t, they all make their
RSS available over HTTP GET, a very useful common abstraction. That, plus that RSS (all
four versions 8-) is a common format, provides for O(N) integration complexity.
The Web provides one common abstraction that I talk about a lot; the uniform interface.
There are others (though none so general,
I believe), but Web services, via WSDL, are all about providing custom interfaces. As
long as use of WSDL in this manner continues, Web services will, like Sean says, amount
to “one big damp squib” (which doesn’t sound like a good thing 8-).