On 14/11/2008, at 10:23 PM, Noah Slater wrote:

On Fri, Nov 14, 2008 at 05:35:03PM +1030, Antony Blakey wrote:
I'm not tunneling verbs, I'm just re-using the names of the methods that would normally be used as selectors. I wasn't implying anything more than that.
...
You delete a document using the DELETE verb, yet in a bulk operation you set the "_deleted" special attribute. That is in effect tunneling the DELETE,
using a different representation, within a POST.

A RESTful system should work by exchanging representations of resources.

As best I understand it, if you want to modify a resource in a way that is not a direct update, move or delete you should use a separate media type, something like application/diff+json if it existed. A JSON diff could include ways to delete and update multiple documents at the same time, a bit like UNIX diff is able to specify filenames. This could be used for single or bulk updates.

Yes, a content-type was something I suggested, but it didn't seem right. In a strictly RESTful sense, maybe it does make sense however.

Of course, this feels very similar to your original proposal, which leaves me a little confused. Throwing about JSON with keys such as "POST" and "DELETE" feels very RPC-like. Perhaps the difference is the use of a separate media type.

These items, such as 'post' and 'delete' can be equated to the 'replace'/'insert' et al of my diff proposal, but operating over documents rather than JSON trees. The fact that they are so named was *purely* an attempt on my part to make it obvious what equivalent (singular) resource operation (identified by HTTP method) was equivalent to that document-level operation, and was in no way an attempt to tunnel the HTTP mechanism.

The current way _bulk_docs does deletion doesn't feel right. I do think there should be some isomorphism between the _bulk_docs structure and the operations one would do without using the _bulk_docs mechanism, hence my suggestion (but the second temporal ordering, not the first operation-type ordering).

I am eager to be corrected by any resident RESTafarians. For me, REST is a bit like Zen. Sometimes I think I understand it totally, and other times I'm
convinced that I don't understand it at all.

I don't think Couch is truly REST. Certainly _bulk_docs isn't. The fact that there are URI patterns means it's not REST, at least not if I've understood Roy's recent communications/frustrations, such as http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven .

In particular, point 4 seems to disqualify any system, (including Couch) that needs the documents in the "Reference" section of the Wiki.

To be REST it has to be just like the web. Using links discovered from documents, never constructing them according to some scheme.

However, what does it matter? REST certainly is a slippery sucker, but that may be because we want it to be more generally applicable than it is. Couch doesn't have to be REST, and I suspect that it in fact cannot be.

Antony Blakey
--------------------------
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

Man will never be free until the last king is strangled with the entrails of the last priest.
  -- Denis Diderot

Reply via email to