Archives for September 2002
Designing Distributed Systems "State is Hell"
My recent projects have involved exploring some of the concepts of REST from a client perspective. Over the past months, I have found myself in agreement with some of the arguments of the REST advocates, and I have enjoyed working with REST concepts more than SOAP. SOAP was fun to implement, but not so fun to use. I wont attempt a formal comparison, other people have done that better than I could, but simplistically, a SOAP envelope is fairly dead on arrival ... "dead" as in data structure vs object dead, "dead" as in cult of the dead. You have to jump through hoops to get one in the first place, and once you have it, there is no intrinsic way to get another. Contrast this with REST where you get something, which intrinsically contains the information to get anotherthing. REST feels more alive.
IsSeaside the "ultimate" REST server? I am not sure of the answer to this question. I have had a quick look at Borges (Seaside 2), and some of the cosmetic non-RESTness has been removed. Its urls rely less on queries, and I believe it is now using POST and GET RESTfully.
From the programmers perspective, a Seaside url identifies a resource for which not only does Seaside persist the state (ie the object graph), but also the state of the process with a Continuation. I think that is very RESTful!
I am having fun using Radio, it has been working smoothly and I have not got stuck as yet. I had trouble uploading an image for the story, I moved the file to a number of places in my local filesystem, and Radio happily mirrored the moves for me, while I read the docs and found the image* macros. I could see what was happening, and how to fix it.
Overall it has a nice feel. I have found it easy to do the simple things, and I get the feeling that there are plenty of ways to get in deeper.
Nice work Userland!
Diving right in ...
I have been playing with Masashi Umezawa's Dolphin SIXX port.
Looks great, lots of examples and easy to customize.
Serializing an object is as simple as:
#(true 123 'foo') sixxString
Copyright 2002 Steve Waring