capabilities lookup: it's the meta ...
Ernst Johannes
jernst+lists.danga.com at netmesh.us
Wed Nov 16 09:36:11 PST 2005
Something else had been bothering me about some of the capabilities
lookup alternatives that we'd been discussing. I hadn't quite been
able to put it into words, but finally, now I know what it is ... and
I'm eager to share ;-)
FIrst, a rehash.
The operation that we are trying to define is
"given this URL, tell me what its capabilities are"
Then, an insight.
This is, if there ever was one, a "meta" traversal. Similar to
"given a Java/C#/Perl/PHP/whatever object, tell me what methods I can
invoke on it", or
"given a URL, tell me what its properties are" (like the PROPFIND
method in WebDAV)
Conceptually:
This is not about obtaining the resource according to a different
surface representation.
This is also not about qualifying the GET operation of the URL with
additional parameters.
This is a genuinely new kind of method, a "META" method, so to speak:
we are not attempting to "GET" the resource, or "POST" or "PUT" or
"DELETE" etc. -- instead, we are asking for its meta-data. (well, a
particular kind of its meta-data, namely what YADIS calls its
capabilities)
This is worth repeating: It is a GET, but not of the resource, but of
its meta-data.
Maybe the best parallel, in a language such as Java, would be
"given this object, tell me what interfaces it supports". (please
interpret the word "interfaces" loosely here, on the same abstraction
level as capabilities in YADIS, I don't mean to talk about GET and
POST etc.) as opposed to "give me an HTML or TXT or Serialized
representation of the object" which would be an entirely different
kind of request.
So ...
... the conceptually cleanest way to support this "meta" operation
would be to add a new verb to HTTP ("GETMETA" comes to mind) -- like
WebDAV did. In fact, there are many parallels here because a big
chunk of what WebDAV is all about is to deal with additional meta-
data that plain HTTP knows nothing about.
... but assuming we don't want to define additional verbs for the
REST / HTTP vocabulary, which would probably be a bad idea for a
range of other reasons
... assuming that you guys agree with me that "meta" is really what
this is all about
... the engineering problem in front of us seems to be:
"given that we have a genuinely different kind of operation on a URL
than people normally do these days" (side note: I very much agree
with Mart's comment on the wiki that this capabilities/meta lookup is
going to be much more broadly useful than "just" for identity) "how
are we best going to use the means at our disposal to emulate this
new operation?"
Is that an accurate description of the problem?
Note that any "meta" operation (whether in YADIS or wherever) is
genuinely orthogonal to any parameters that specify which format the
client wants the response to be in. Just like in plain normal use of
HTTP, as a client I should be able to say "I like HTML better than
PDF better than TXT" (if I'm a human) vs. "I like XML only" (if I'm a
machine) for the meta-data of the URL, not just the resource behind
the URL.
That's the other thing that has bothered me in the current proposals
without being able to express it so far: we seem to have assumed that
the capability query only makes sense for machine clients. But upon
reflection, I don't think so: as a human, I also want to know what a
given URL can do, and I want to know in HTML because I like it better
than PDF better than TXT and I don't like XML. (Just as an example
for the preferences of a human client).
Ergo, the "Accept" specification is, and must be, orthogonal to the
"Meta" specification (in whatever form we will settle on), in order
to be architecturally clean.
In other words, I have decided to be very much against (sorry, guys)
using the Accept header to emulate a "Meta" operation because it
collapses two orthogonal things onto the same dimension, and that is
a big no-no in the architecture book that I'm following ... because
sooner or later, we'd want to disentangle the orthogonal dimensions
and we won't be able to if we go down that route.
Can we agree on whether this is an accurate description of the
problem first before figuring out what that means for the protocol? I
would have a proposal that turns out to be only a minor
modification ... but problem description first.
Johannes Ernst
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lid.gif
Type: image/gif
Size: 973 bytes
Desc: not available
Url : http://lists.danga.com/pipermail/yadis/attachments/20051116/63df157c/lid.gif
-------------- next part --------------
http://netmesh.info/jernst
More information about the yadis
mailing list