I don’t know how I’m going to respond to all of that, especially in my weakened condition. For now I’ll just respond to the most recent one first.
I think the reason why Mark gets such pushback from his suggestions about defining the “architecture contraints” for Web Services technology is because I believe these principles don’t exist as specific “constraints” any more than the REST approach is a “constraint” defining the ONLY way to write applications that use the Web.
That’s true, constraints don’t “exist” per se. They’re just guidelines that are followed in order to realize useful properties. For example, when you’re driving your car, you follow certain constraints that serve to maximize the safety of yourself and other drivers, while still preserving the ability to get to point B from point A. Sure, you can ignore some constraints (like driving on the left hand side of the road 8-), but then useful properties (like your safety) are sacrificed.
It is still perfectly possible to write stateful web applications just as it is possible to write stateful web services. In both cases, it is bad practice to do this from many viewpoints (scalability being the obvious one), but it is certainly not completely precluded and actually in some scenarios there are no options but to use a stateful approach – it all depends on the application and usage scenario whether that is a valid approach.
That’s also true, but you have to realize that useful properties are being sacrificed if that’s done. Sometimes the sacrifice is worth the gain, but other times it is not. I’ve said before that I consider REST’s stateless constraint to be it’s second most important constraint. But it’s a far cry from the most important constraint, the uniform interface. I’d say that 95% of the Web’s utility and success derives from the useful properties induced by this one constraint. I cannot think of any reason why anybody would need to sacrifice this constraint that has worked so well. The reasons I’ve heard given, are that this constraint restricts the function of the architecture (equivalent to a “rule of the road” preventing you from driving to certain places), specifically that the Web is for humans, while Web services are for machines. But that’s simply not true.