POST vs. PUT Re: [uf-rest] REST opacity and URL schemes.

Dr. Ernie Prabhakar drernie at opendarwin.org
Mon Apr 24 12:03:40 PDT 2006


Hi Mark,

On Apr 24, 2006, at 11:57 AM, Mark Nottingham wrote:
> Let's not rush into things. Part of the value of PUT is that it has  
> a particular meaning (as used in WebDAV and elsewhere).
>
> Turn it around for a moment; what are the use cases where PUT is  
> useful over POST for something where you can't GET back the  
> representation you just sent? If you're using PUT to do something  
> like update part of a representation, rather than the whole thing,  
> will it really be idempotent? Why not surface the thing as a  
> separate URI?

I think the key that convinced me is that the way Rails is using PUT:

a) The PUT has all the "extrinsic" information needed to create the  
resource

That is, even if there are some "synthetic" fields created  
internally, or after the fact, by the server, they are not user- 
visible.  In other words, the request really _does_ contain all the  
user-visible attributes.

b) No caching mechanisms should be using PUT to implement a write- 
through cache.

That is, if I understand Dan's citation of the spec properly, there  
is NO guarantee that the PUT is syntactically identical to the GET of  
the same content-type of that resource.   As such, we only care about  
semantic equivalent, not syntactic exactitude.

At least, that's the most my poor brain can deduce on a Monday  
morning.  Hopefully some of the experts will weigh in.

And thanks for asking -- this is a gnarly topic, and greater clarity  
would be a very useful thing!

-- Ernie P.


>
> Cheers,
>
>
> On 2006/04/24, at 11:49 AM, Dr. Ernie Prabhakar wrote:
>
>> Dan & Charlie,
>>
>> On Apr 22, 2006, at 10:43 PM, Dan Kubb wrote:
>>> So this means that POST is a way of sending data to a resource
>>> that handles the request directly and/or can delegate the handling
>>> to something else at its discretion.  PUT is a way of changing
>>> the state of a resource explicitly identified by its URI.
>>
>> Ah, very interesting.  My understanding was closer to Mark's:
>>
>>> My rule of thumb for PUT is that afterwards, if I GET a  
>>> representation from the same resource, it should give me back  
>>> what I sent in the first place (unless it's been separately  
>>> changed in the meantime). You also have to account for transcoding.
>>
>> But, if I'm following your argument, that is actually a  
>> _mis_understanding on my part.  Very interesting.
>>
>> Okay,  if so, that is a nice separation, and David's usage is  
>> correct, with POST-as-POST being reserved for RPC-style calls with  
>> side-effects.  I'll update the wiki accordingly:
>>
>> http://microformats.org/wiki/rest/rails#Simply_RESTful
>>
>> The other issue with PUT vs. POST is that the error/return codes  
>> are different, no? Does either plug-in currently handle those  
>> correctly?
>>
>> -- Ernie P.
>>
>>
>> _______________________________________________
>> microformats-rest mailing list
>> microformats-rest at microformats.org
>> http://microformats.org/mailman/listinfo/microformats-rest
>>
>
>
> --
> Mark Nottingham     http://www.mnot.net/
>
> _______________________________________________
> microformats-rest mailing list
> microformats-rest at microformats.org
> http://microformats.org/mailman/listinfo/microformats-rest



More information about the microformats-rest mailing list