My latest article is up on InfoQ. I hope it help demystifies the “Hypermedia as the engine of application state” constraint just a little bit.

I remember being a bit of a smart-ass nerd in high school, and taking pleasure in deriving novel insults my friends and I could deliver at the stoner-types, or anybody who else who crossed paths with us. The more difficult it was for them to understand why it was an insult, the better. So when I came up with “Your family tree has cycles”, I was one happy geek.

Little did I know at the time though, that my own family tree had a cycle. It turns out that my paternal Grandfather’s paternal great-Aunt, was my paternal Grandmother’s sister’s-in-law’s great Grandmother. My Dad’s cousin, who discovered the cycle this past weekend, doesn’t think the family knew about it. I believe the circumference of that cycle is seven.

Anybody else got any cycles they’d like to share? Note; if the circumference of your cycles are less than five, you might want to keep those to yourself 8-)

I’ve been thinking about writing this for some time now. In fact, it’s probably way overdue. But there’s no better time than the present, as they say.

I’ve had enough. I’m not participating in any more “REST vs. SOAP” discussions. When I started on this mission to educate those who didn’t understand how the Web could help them, I figured it would be pretty straightforward; I’d explain it, they’d understand, and then we’d all skip away hand-in-hand whistling show tunes. Of course, it didn’t quite work out that way. Instead, I ended up spending on the order of $100K of my own money on travel, as well as the opportunity cost of many hundreds of otherwise billable hours, for what is working out to be essentially nothing in return. If that weren’t enough, my health has suffered the past year or so, in ways I won’t get into here, but that I’m confident are in part attributable to the despair I’ve felt over this extended period of frustration.

The war really has been won, I realize that now. And I’m happy to pat myself on my back for a job well done, despite what it’s cost me. Would I do it over again? No bloody way. I should have just “pulled a Roy” and continued to work with and improve the Web, but restrict my Web services standards work to trying to minimize the harm Web services were doing to the Web (which I was doing, but I went way beyond that). I think Max Planck got it right when he said;

A new scientific truth does not triumph by convincing its opponents and making them see the light, but rather because its opponents eventually die, and a new generation grows up that is familiar with it.

Oh, and one last thing. I told you so. There, that felt good.

Tim recalls;

I remember the days when it was basically just Mark Baker and me shouting “The WS-King has no WS-clothes and there are WS-bleeding-sores on his WS-butt!”

One of these days, I should put together a little retrospective on the past 7-8 years: the players, the converts, the milestone moments, etc… Stay tuned.

Well, that was frustrating.

(Very) Long story short, motherboard & hard drive running this weblog are simultaneously fried a few weeks ago. I then discover my weblog backup system stopped working earlier this year (you may have noticed the most “recent” post from April). Luckily though, I’m able to scrape off enough of the WordPress mysql database from the fried disk (thanks R-Linux!) to be able to graft it onto an existing database, permitting me to dump a snapshot and recover it completely (knock on wood).

Please let me know if you encounter any problems.

I’ve had a couple of conversations recently – one online and one off – that both centered around an important aspect of distributed computing that is often overlooked: the role of users in determining message semantics. When we write and deploy software, either client or server, it is easily forgotten that this software has been deployed on behalf of some user, either us, our employer, a customer, etc.. For example, Web browsers act on behalf of the users sitting right in front of them, while Web servers act on behalf of the publishers. We even have a special name for this software – though only typically used to refer to clients – user agents. The name drives home the point that they do our bidding alone. When a user initiates an action which requires messages to be sent, then the message needs to reflect the intent of the user. For example (the subject of the aforementioned online discussion) when a user clicks a link in a browser it is with the intent of dereferencing that link, an action which is by definition safe. Therefore, any message sent as a result of a clicked link must be a safe message, otherwise it would be misrepresenting the user. Another scenario where this issue pops up is in the context of application/session state. My friend Bob Haugen and I recently discussed whether the canonical Web shopping cart was stateful or stateless. After a few back-and-forths, we had boiled down the discussion – I thought it was stateful, Bob wasn’t sure – to this same issue. Bob thought that the POST message that gets sent in response to a “purchase” action by the user had the meaning “Purchase what’s in that shopping cart”. And if that was the case, he’d be right, it would be stateless. But my point was that the message can’t mean that because pretty much every user wants to be explicit about what they’re purchasing, and so include the details about the purchase – items, quantity, price, shipping terms, etc.. – in the message sent to the server. In explaining my position, I pointed out that pretty much every shopping cart service I’ve ever used notifies users if prices changes between the time the item was added to the shopping cart, and when the purchase is initiated. This is done because the service understands that it is the user’s intent to be specific about what they’re buying, it’s just that the technology in use – a Web browser – doesn’t easily permit that kind of information to be maintained on the client so that it can be sent over in the POST message. Food for thought, I hope.

While reading the comments in Steve’s initial ESB post, I spotted a paragraph that nailed the elephant-in-the-room meta issue on the head;

Its funny but so few people who also use ESB and WS-* style protocols and tools frequently operate with such disdain for other ways of doing things.

There are, of course, a very large number of automated solutions to a particular problem. But of all of them, only a few will exhibit the desired properties, to the proper degree, that you require for the environment in which it is to be deployed. The more you require, the fewer the number of suitable solutions.

IMO, if you don’t feel disdain towards a lot (97%?) of these solutions, then you simply don’t understand what it means to be a software architect.

I’m with Stefan. Steve Vinoski’s always been somebody you want to listen very carefully to regarding distributed computing and enterprise integration, but even more so now that he’s left the employ of a company with skin in that game. That message isn’t entirely new, it’s just more obviously the message 8-)

Mark Little responds to an interesting post by Bill Burke about compensation based transactions. I don’t really have any direct response to the gist of that discussion, but wanted to highlight a couple of Mark’s arguments that I consider to be probably the top two arguments by those who feel there’s value in both the Web and Web services (the “fence sitters”, as Mark recalls me calling them 8-).

First up, the belief that the Web has nothing to say about reliability, transactions, etc… Mark writes;

Yes, we have interoperability on the WWW (ignoring the differences in HTML syntax and browsers). But we do not have interoperabilty for transactions, reliable messaging, workflow etc. That’s not to say we can’t do it: as I said before, we did manage to do REST+transactions in HP but it was in a small-scale deployment involving only a couple of partners. There is no technical impediment to doing this: it’s entirely political. It can be done, I just don’t see it ever being done. Until it happens, REST/HTTP cannot compete with the kinds of heterogeneous out-of-the-box interoperability that we have demonstrated with WS-*

I’ve talked about this a lot, most recently in my position paper to the W3C Workshop on Enterprise Services. The gist of the argument is that the Web address all of those needs, just in a way which you might not recognize because it has to address them within the confines of architectural constraints that Web services folks aren’t used to. Again, that’s not to say that every possible one of your needs can be met out of the box today, only that far more of them can than you might believe.

Mark also uses the very common argument that because interoperability requires agreement on data for both Web and Web services, that there’s no significant difference between them (I hope that summarizes his point);

So just because I decide to use REST and HTTP doesn’t mean I get instant portability and interoperability. Yes, I get interoperability at the low level, but it says nothing about interoperability at the payload.

I can’t quickly find any past blog entries that touch on this point (though I know they’re there), but this argument I find the most confusing. I suspect it has to do with what I perceive to be a disconnect between Internet and intranet protocol stacks, but I can’t say for sure.

What Mark calls the “low level” isn’t the low level at all. Assuming he means HTTP, the agreement you get by using it is more (higher level) agreement than you get if you were just using SOAP (or XML-RPC or IIOP or BEEP or …). That’s because you’re agreeing on the methods in addition to an envelope (not to mention many other features).

Seems like folks are excited about Roy’s upcoming ApacheCon talk.

The title – A little REST and Relaxation – is the same title as the keynote (video) he gave at Jazoon this summer, so I assume it’ll be similar if not the same (hopefully a bit longer, as Roy’s obviously rushed for time in the video).

I liked the talk a lot, as you might have guessed. I particularly liked how Roy echoed some of the things I’ve said the past few years nearly word for word. For example, he talked about how SOA was effectively the null architectural style. He also talked about the pros and cons of relaxing REST’s constraints, including the very high cost of relaxing the uniform interface constraint (something I’ve pointed out many times), but the relatively low cost of relaxing client/server.

Update; Pete reminds me that Roy used the Lego analogy, which I’ve used before too.