BTW, this is to do "Optimistic Locking for REST", for cases like this:

Both Client A and Client B ask for the same data:

--> GET /some/data.json HTTP/1.1 
<-- Date: 25 May 2011 14:00:00 GMT
<-- HTTP/1.1 200 Ok
<-- Last-Modified: 25 May 2011 13:02:30 GMT
<-- Expires: 25 May 2011 15:00:00 GMT
<-- { someData }

Client A send an update:

--> PUT /some/data.json HTTP/1.1 
--> If-Unmodified-Since: 25 May 2011 13:02:30 GMT
{ someAttribute: 'blabla from client A', id: 1, type: 'SomeEntity' }
-----> Last-Modified on the representation before the update is 25 May 2011 
13:02:30 GMT, so we are good to go <-----
<-- HTTP/1.1 200 OK
<-- Last-Modified: 25 May 2011 14:05:30 GMT
<-- { someData }

Client B send an update:

--> PUT /some/data.json HTTP/1.1 
--> If-Unmodified-Since: 25 May 2011 13:02:30 GMT
{ someAttribute: 'blabla from client B', id: 1, type: 'SomeEntity' }
-----> BUSTED! Last-Modified on the representation is now 25 May 2011 14:05:30 
because of Client A update! <-----
<-- HTTP/1.1 412 Precondition Failed
<-- { error: 'Ya man, someone before you updated the same object' }


> Errest should be using some new method on the rest delegate probably, whose 
> default impl is to check for that interface on the object and then fall back 
> to something hashcodey
> 
> Sent from my iPhone
> 
> On May 25, 2011, at 2:14 PM, Pascal Robert <prob...@macti.ca> wrote:
> 
>> Ah, ERCStamped is fantastic for generating the Last-Modified header! Some 
>> day, I will have two weeks off just to look at all the stuff in Wonder...
>> 
>>> there's not a direct simple way to do it ... probably grab the snapshot off 
>>> the EO and compute a hash of the values (you can ignore the keys because 
>>> they're fixed). it might be something where you can make a new interface in 
>>> ERX that your EO's could implement to provide a more optimal impl (like 
>>> ERCStamped could use its lastModified as a basis).
>>> 
>>> ms
>>> 
>>> On May 25, 2011, at 1:55 PM, Pascal Robert wrote:
>>> 
>>>> I'm trying to find a way to generate a HTTP ETag for EOs so that caching 
>>>> can be done for REST services. What I want to do is to have the same ETag 
>>>> value for each representation of the EO, so when one of the values change, 
>>>> the ETag value will also change, but if the EO have the same value, it 
>>>> will generate the same ETag as another request got.
>>>> 
>>>> Problem is: I don't know what to use. I tried with myEO.hashCode() but I 
>>>> did some tests and every time I fetch the EO, the hashcode is different 
>>>> even if the data didn't change. I'm thinking of doing a MD5 digest of part 
>>>> of the EO, but I was wondering if another way exist? I could use a "last 
>>>> modified" date and generate a MD5 of that too, but that date is a better 
>>>> option for the Last-Modified header.
>>>> 
>>>> --
>>>> Pascal Robert
>>>> prob...@macti.ca
>>>> 
>>>> WOWODC 2011 : July 1-2-3, Montreal. wowodc.com
>>>> 
>>>> AIM/iChat : MacTICanada
>>>> LinkedIn : http://www.linkedin.com/in/macti
>>>> Twitter : pascal_robert
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.com
>>>> 
>>>> This email sent to msch...@pobox.com
>>> 
>> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to