"My 3 Web Service Stacks"

Back in the old days when my friends and I used and taught others to use COM, Chris came up with a great way to present the essential choice you had to make when you set out to create a component. He called it “My 3 COMs”.

First, there was script COM, which used only VARIANTs and the 13 types you could put in them. Then there was VB COM, which used simple data types, basic structures, SAFEARRAYs and BSTRs. Finally, there was C++ COM, which used all sorts of fancy data types including open arrays that specified their conformance and variance on the fly.

The point Chris was making was that you created a COM class, your choice of data type determined who could use your component. In other words, your choice affected how far your code could reach. There will be a similar split in the Web services world, hence the title of this post. This time though the spin will be a little different. It won't focus on data format so much (it's all just XML), but on behavior. To wit, “My 3 Web Service Stacks“:

First, there is basic SOAP over HTTP described with WSDL and XSD. It hits a sweet spot for developers who want tools to hide XML details but is still simple enough to implement everywhere. Then there is WS-*, which offers richer functionality but is harder to implement and will not be supported by all products, especially legacy systems. Finally, there are toolkit specific features like BEA's idiom for async messaging over HTTP using a header to convey a callback URL, Iona's Artix support for a CORBA binding, or Microsoft's Indigo support for binary messaging.

In this world, your choice of feature will decide how far you can reach: to everyone, to everyone using WS-* enabled tools and infrastructure, or only to others using the same toolkit you are.

This is not inherently a bad thing. As long as everyone supports a common underlying base, having vendors compete with one another to add interesting features is good. Hopefully the best of them will be picked up by others (IP allowing) and become more common. However, it would be a bad thing if people who think they're building something open and far-reaching inadvertantly use a feature that limits their reach to others who are using the same tool.

So as we go forward into the WS future, we really need to do two things. First, service developers have to make a concious choice about how far they want their service to reach and use only the features that work at that range. Second, vendors need to make it clear to developers which features will restrict reach so that they don't accidentaly make a mistake.

 


Posted Feb 03 2005, 02:31 PM by tim-ewald

Comments

Steve Loughran wrote Stack 0: home rolled XML+HTTP
on 02-03-2005 1:11 PM
I'd add the other stack, the possibly-RESTy one of home-rolled XML over HTTP. Works in more places than the other three, by not attempting to hide any of the XML at all. The other stacks are choosing a different path, one where the wire format is a detail, not a centrepiece. I dont know whether that is better or worse, except I do find writing complex WSDL -like WS-RF stuff- far worse than C++ COM ever was.
Paul Downey wrote re: "My 3 Web Service Stacks"
on 02-04-2005 3:14 AM
Nice thinking, Tim. As someone who is regularly handed WSDLs produced by third parties, often tools, i'd really like something that flags which of these camps their service is in. Often they don't realise they're in camp#3 when they wanted to be in camp#1, and by the time they've published it's too late to change anything. Seems like you guys might be well placed to build and market such a thing :-)
SOAphisticated wrote Clemens and I disagree on the importance of angle-brackets
on 02-09-2005 12:39 PM
Dare Obasanjo's WebLog wrote On Interoperability and Tim Ewald's 3 Web Services Stacks
on 02-10-2005 5:59 AM
SOAphisticated wrote The many faces of Indigo
on 02-16-2005 6:07 AM
SOAphisticated wrote The many faces of Indigo
on 02-17-2005 6:40 AM
Diana wrote Really COOL!
on 06-05-2005 2:28 PM
Wow, superb!
Thanks.

Add a Comment

(required)  
(optional)
(required)  
Remember Me?