- From: <noah_mendelsohn@us.ibm.com>
- Date: Wed, 5 Nov 2003 13:55:54 -0500
- To: www-tag@w3.org
I would like to congratulate the Tag on the progress that's been made on
the Architecture Document [1]. There are some issues that have been on my
mind for awhile, and although recent versions have answered some of my
concerns, this may be the time to raise a few key questions that remain.
I assume it's reasonable to expect the Architecture document to answer the
question: "Is protocol X at least broadly compatible with the Web
Architecture?" For example, if I describe the implementation of some
distributed protocol, one should be able to say either "Yes, you're using
URIs in the right way, you've created or used schemes in the appropriate
manner, etc., so your new protocol can be viewed as part of the web." vs.
"No, you don't even try to name resources with URIs, which is the most
basic requirement of the Web architecture, so as described your system is
clearly not part of the Web and does not in at least some important
respects conform to Web architecture."
The concern I have is that I'm not sure the current document answers these
questions with respect to some use cases that have occurred to me. So,
here are some thought experiments in protocol and Web design: I'd be
curious to hear (a) the degree to which the following should be viewed as
conforming to Web architecture and whatever the answer (b) whether the
current Web Architecture gives the necessary guidance to lead to the
intended answer.
Example 1: Representations visible at the API but not on the wire
==================================================================
The purpose of this example is to explore the degree to which Web
architecture refers to wire formats vs. application models.
I'll call this mythical system "spread spectrum peer to peer". In rough
outline, I document and implement a new scheme I'll call SPREADP2P:. This
is a distributed store implementing a hierarchical data space, with URIs
naming resources using the new SPREADP2P: scheme. The protocol
documention indicates that the system is implemented as a peer-to-peer
distributed system, with the active nodes conspiring to implement the
store in a distributed manner. As seen at APIs at the nodes, the system
implements the familiar GET, PUT, POST and DELETE operations, with
semantics similar to HTTP.
On the wire, the system looks very different. Without going into details
(this is a mythical system), the system uses techniques closely related to
spread spectrum. No particular transmitted packet or on disk fragment at
the peers directly represents an identifiable representation of any
particular resource. The spread spectrum techniques exchange packets that
essentially multiplex fragments of the state of multiple representations
of multiple resources in each packet. Informally, the data from various
resources is hashed together and spread around in ways that make it very
difficult at any one place to reconstruct any particular part of a
resource or representation, but suitable queries can fan out through the
network gathering information that with high probability will be
sufficient to reconstruct any desired representation.
Let's not get into the design details, as only a few characteristics are
important for this thought experiment. The point is to describe a system
in which the application model is clearly REST, but unlike HTTP, the on
the wire traffic is only very indirectly related to the transfer of
represenations of any particular resources. I'm not asking whether this
is a good way to build a system. I'm merely asking what the architecture
document would say about it if I did.
I'll say that I hope the answer is that the Web architecture is scaleable
to include systems of this sort, because the useage scenarios are
compelling. If I add a handler for this new scheme to my browser, then I
can transparently browse through resources that are managed by HTTP
interlinking with resources stored in the new system. Stated another way,
I think that the architecture document should be a little more careful
about dealing with possible new protocols and schemes, and in particular
should separate concerns relating to abstract models from concerns
relating to the architecture of on-the-wire exchanges.
Example 2: Less RESTful models
==============================
This example is probably less architecturally radical. I invent a new
protocol for controlled transmission of video streams, and in an attempt
to integrate with the Web I assign the new VIDSTREAM: scheme. Indeed, I
use some mechanisms of the Web in a first class manner: I assign a URI in
the new scheme not only to each stream (e..g. movie) but in fact to each
frame of the video, a separate one for the Spanish-language audio, etc.
For better or worse, however, I part company with traditional REST in
other details of the protocol. Indeed, the protocol consists of a single
full duplex TCP stream in which the receiver is continually (or at least
asynchronously) streaming control commands to the server while multiple
streams comprising the movie, it's audio, subtitles, and other control
information are streaming back in interleaved form. Examples of control
information include requests to reduce the resolution of subsequent
frames, to seek to a new frame (identified by its own URI or perhaps by a
fragID in the base URI of the movie...I'll punt on media type issues to
keep this simple), commands to start sending audio in Spanish, etc. No
doubt this system could in principle be built in a more traditional REST
manner, perhaps even on HTTP. I could define additional resources for
the video controllers and view the requests to speed up or change
resolution as POSTs to those resources, but for better or worse this
mythical protocol doesn't work that way: retrieval requests are not
obviously RESTful, but are encoded as control packets that sometimes but
not always reference URIs.
This example is a little different from the first one. In some sense, it
seems more traditional, since at the coarsest level I could imagine
clicking on a URI link and seeing what is roughly a request for a
representation of the resource go out from my client. On the other hand,
particularly with respect to the upstream traffic but to some degree in
both directions, the system is not documented in terms of transfer of
representations. It's documented as a set of control packets,
interspersed frames representing video and audio (and as noted the audio
may be a separate resource with its own URI), and so on.
As above I ask: what does the Web Arch document say about this mythical
example? Is it within the scope of the definition of the Web as provided
in the Architecture document?
======End of Examples=========
Please forgive the somewhat contrived examples. While I know that each is
somewhere between toy and artificial in important respects, I think they
do represent in schematic form the sorts of things people will want to do
beyond what HTTP does today. Since the Architecture Document sets out the
scope of the Web in terms of concepts like transfer of representations, I
think it is useful to understand what it would say about these examples.
My reading of the current editors' draft is that it comes close to
allowing for them, but there are also statements such as [2]:
"Web agents communicate complete or
partial information about the state
of a resource through
representations. "
...that could be taken to preclude either or both of the examples above.
Please also accept my apologies for raising these examples relatively late
in your cycle of work on the Arch. document. I have for months intended
to get to these and never managed to. If time pressures dictate that
these cannot be considered in detail at this late date, I will completely
understand. I do think they are crucially important in principle, and
that in any case the Architecture document should at least be clear on the
degree to which they fit Web architecture.
FWIW, those who attended last year's tech plenary may remember that I
presented some of my own ideas on how these concerns might be tackled,
with a more layered notion of what it means to be "on the Web" [3]. I
doubt the Tag will want to buy into such layering at this point, but it
does seem a sensible approach to me. Perhaps it would be worth at least
giving some thought to which of the layers described in my presentation
comes closest to capturing the scope of the Web as the Tag intends to
describe it.
Again, my congratulations to you on the wonderful progress you've made on
the Architecture Document so far. Any attention to these questions will
be much appreciated. Thank you.
Noah
[1] http://www.w3.org/2001/tag/webarch/
[2] http://www.w3.org/2001/tag/webarch/#intro
[3] http://www.w3.org/2003/Talks/techplen-ws/w3cplenaryhowmanywebs.htm
------------------------------------------------------------------
Noah Mendelsohn Voice: 1-617-693-4036
IBM Corporation Fax: 1-617-693-8676
One Rogers Street
Cambridge, MA 02142
------------------------------------------------------------------
Received on Wednesday, 5 November 2003 13:56:53 UTC