There's a massive amount of er, what did you say, "dry theory and voluntary 
speak" on the question of sessions and continuations vis-a-vis REST. Unashamed, 
I'll add more. 

The rub here is adherence to Fielding's "Stateless" constraint (5.1.3: "each 
request from client to server must contain all of the information necessary to 
understand the request, and cannot take advantage of any stored context on the 
server. Session state is therefore kept entirely on the client.") This is a 
good thing for the underlying architecture of the WWW, but a largely irrelevant 
thing to higher level application design. Keep state all you want and where you 
want, if it's appropriate to your problem domain. 

Yet there it is; the seminal document defining REST says, in a big booming 
voice, *** REST Is Stateless ***. In a framework called "Restlet" is there any 
way to encompass the establishment of server-side state without incensing the 
peanut gallery? It's not my baby, I can't say. But I'd guess No, unless 
somebody brings in a written excuse from Dr. Fielding. 

> Given the above, I think the 'resourced' way of keeping some 
> (admittedly) application flavoured state up at the server would be to 
> create temporary 'resources' that allow to store some use-case related 
> state. 

The transient resource behavior you describe is neatly done at a layer below 
Restlet. We, for example, keep resources in a virtual, versioned filesystem 
(VFS) that uses WebDAV semantics; a "transient" property combined with an 
expiring lock provide the information needed to manage and reap transient 
resources. This isn't glued to Restlet especially well yet (it's a general Java 
facility that predates our Restlet experience), but it's why we're working on 
getting a full set of RFC 2518 semantics into Restlet and making a proper 
Client connector for our VFS. 

We plan to share it as commercial open source when it's ready. "REST" won't be 
part of the name, so Fielding's legion of zombies doesn't carry torches to our 
door. :-) 

- Rob 

Reply via email to