<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>William Vambenepe&#039;s blog &#187; SOAP processing model</title>
	<atom:link href="http://stage.vambenepe.com/archives/category/soap-processing-model/feed" rel="self" type="application/rss+xml" />
	<link>http://stage.vambenepe.com</link>
	<description>IT management in a changing IT world</description>
	<lastBuildDate>Mon, 26 Jul 2010 06:04:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Missing out on the OCCI fun</title>
		<link>http://stage.vambenepe.com/archives/1042</link>
		<comments>http://stage.vambenepe.com/archives/1042#comments</comments>
		<pubDate>Wed, 21 Oct 2009 07:30:58 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1042</guid>
		<description><![CDATA[As a recovering &#8220;design by committee&#8221; offender I have to be careful when lurking near standards groups mailing list, for fear my instincts may take over and I might join the fray. But tonight a few tweets containing alluring words like &#8220;header&#8221; and &#8220;metadata&#8221; got the better of me and sent me plowing through a [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/1504' rel='bookmark' title='Permanent Link: Dear Cloud API, your fault line is showing'>Dear Cloud API, your fault line is showing</a></li>
<li><a href='http://stage.vambenepe.com/archives/1261' rel='bookmark' title='Permanent Link: Can Cloud standards be saved?'>Can Cloud standards be saved?</a></li>
<li><a href='http://stage.vambenepe.com/archives/1284' rel='bookmark' title='Permanent Link: Waiting for events (in Cloud APIs)'>Waiting for events (in Cloud APIs)</a></li>
<li><a href='http://stage.vambenepe.com/archives/559' rel='bookmark' title='Permanent Link: Is notification wrapping getting a bum rap?'>Is notification wrapping getting a bum rap?</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/194' rel='bookmark' title='Permanent Link: Unhealthy fun with IP aspects of optionality in specifications'>Unhealthy fun with IP aspects of optionality in specifications</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>As a recovering &#8220;design by committee&#8221; offender I have to be careful when lurking near standards groups mailing list, for fear my instincts may take over and I might join the fray. But tonight a few tweets containing <a href="http://twitter.com/samj/status/5037202759">alluring words like &#8220;header&#8221; and &#8220;metadata&#8221;</a> got the better of me and sent me plowing through a long and <a href="http://www.ogf.org/pipermail/occi-wg/2009-October/thread.html#1315">heated discussion thread</a> in the OGF OCCI mailing list archive.</p>
<p>I found the discussion fascinating, both from a technical perspective and a theatrical perspective.</p>
<p>Technically, the discussion is about whether to use HTTP headers to carry &#8220;metadata&#8221; (by which I think they  mean everything that&#8217;s not part of the business payload, e.g. an OVF document or other domain-specific payload). I don&#8217;t have enough context on the specific proposal to care to express my opinion on its merits, but what I find very interesting is that this shines another light on the age-old issue of how to carry non-payload info when designing a protocol. Whatever you call these data fields, you have to specify (by decreasing order of architectural importance):</p>
<ul>
<li>How you deal with unknown fields: mustUnderstand or mustIgnore semantics.</li>
<li>How you keep them apart (prevent two people defining fields by the same name, telling different versions apart).</li>
<li>How you parse their content (and are they all parsed in the same manner or is it specific to each field).</li>
<li>Where they go.</li>
</ul>
<p>SOAP provides one set of answers.</p>
<ul>
<li>You can tag each one with a mustUnderstand attribute to force any consumer who doesn&#8217;t understand them to fault.</li>
<li>They are namespace-qualified.</li>
<li>They are XML-formatted.</li>
<li>They go at the top of the XML doc, in a section called the SOAP header.</li>
</ul>
<p>You may agree or not with the approach SOAP took, but it&#8217;s important to realize that at its core SOAP is just this: the answer (in the form of the SOAP processing model) to these simple questions (here is <a href="http://stage.vambenepe.com/archives/118">more about the SOAP processing model and the abuses it has suffered</a> if you&#8217;re interested). WSDL is something else. The WS-* stack is also something else. It&#8217;s probably too late to rescue SOAP from these associations, but I wanted to point this out for the record.</p>
<p>Whatever you answer to the four &#8220;non-payload data fields&#8221; questions above, there are many practical concerns that you have to consider when validating your proposal. They may not all be relevant to your use case, but then explicitly decide that they are not. They are things like:</p>
<ul>
<li>Performance</li>
<li>Ability to process in a stream-based system</li>
<li>Ease of development (tool support, runtime accessibility&#8230;)</li>
<li>Ease of debugging</li>
<li>Field length limitations</li>
<li>Security</li>
<li>Ability to structure the data in the fields</li>
<li>Ability to use different transports (way overplayed in SOAP, but not totally irrelevant either)</li>
<li>Ability to survive intermediaries / proxies</li>
</ul>
<p>Now leaving the technology aside, this OCCI email thread is also interesting from a human and organizational perspective. Another take on the good old <a href="http://stage.vambenepe.com/archives/96">Commedia dell standarte</a>. Again, I don&#8217;t have enough context in the history of this specific group to have an opinion about the dynamics. I&#8217;ll just say that things are a bit more &#8220;free-flowing&#8221; than when people like my friend Dave Snelling were in charge in OGF. In any case, it&#8217;s great that the debate is taking place in public. If it had been a closed discussion they probably would not have benefited from Tim Bray dropping in to share his experience. On the plus side, they would have avoided my pontifications&#8230;</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/1504' rel='bookmark' title='Permanent Link: Dear Cloud API, your fault line is showing'>Dear Cloud API, your fault line is showing</a></li>
<li><a href='http://stage.vambenepe.com/archives/1261' rel='bookmark' title='Permanent Link: Can Cloud standards be saved?'>Can Cloud standards be saved?</a></li>
<li><a href='http://stage.vambenepe.com/archives/1284' rel='bookmark' title='Permanent Link: Waiting for events (in Cloud APIs)'>Waiting for events (in Cloud APIs)</a></li>
<li><a href='http://stage.vambenepe.com/archives/559' rel='bookmark' title='Permanent Link: Is notification wrapping getting a bum rap?'>Is notification wrapping getting a bum rap?</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/194' rel='bookmark' title='Permanent Link: Unhealthy fun with IP aspects of optionality in specifications'>Unhealthy fun with IP aspects of optionality in specifications</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1042/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>REST in practice for IT and Cloud management (part 1: Cloud APIs)</title>
		<link>http://stage.vambenepe.com/archives/863</link>
		<comments>http://stage.vambenepe.com/archives/863#comments</comments>
		<pubDate>Thu, 16 Jul 2009 08:15:31 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Management]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Management integration]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=863</guid>
		<description><![CDATA[In this entry I compare four public Cloud APIs (AWS EC2, GoGrid, Rackspace and Sun Cloud) to see what practical benefits REST provides for resource management protocols.
As someone who was involved with the creation of the WS-* stack (especially the parts related to resource management) and who genuinely likes the SOAP processing model I have [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/894' rel='bookmark' title='Permanent Link: REST in practice for IT and Cloud management (part 2: configuration management)'>REST in practice for IT and Cloud management (part 2: configuration management)</a></li>
<li><a href='http://stage.vambenepe.com/archives/1161' rel='bookmark' title='Permanent Link: REST in practice for IT and Cloud management (part 3: wrap-up)'>REST in practice for IT and Cloud management (part 3: wrap-up)</a></li>
<li><a href='http://stage.vambenepe.com/archives/943' rel='bookmark' title='Permanent Link: Separating model from protocol in Cloud APIs'>Separating model from protocol in Cloud APIs</a></li>
<li><a href='http://stage.vambenepe.com/archives/447' rel='bookmark' title='Permanent Link: Who said WS-Transfer is for REST?'>Who said WS-Transfer is for REST?</a></li>
<li><a href='http://stage.vambenepe.com/archives/936' rel='bookmark' title='Permanent Link: VMWare publishes (and submits) vCloud API'>VMWare publishes (and submits) vCloud API</a></li>
<li><a href='http://stage.vambenepe.com/archives/1538' rel='bookmark' title='Permanent Link: Introducing the Oracle Cloud API'>Introducing the Oracle Cloud API</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>In this entry I compare four public Cloud APIs (AWS EC2, GoGrid, Rackspace and Sun Cloud) to see what practical benefits REST provides for resource management protocols.</p>
<p>As someone who was involved with the creation of the WS-* stack (especially the parts related to resource management) and who genuinely likes the <a href="http://stage.vambenepe.com/archives/118">SOAP processing model</a> I have a tendency to be a little defensive about REST, which is often defined in opposition to WS-*. On the other hand, as someone who started writing web apps when the state of the art was a CGI Perl script, who loves on-the-wire protocols (e.g. this <a href="http://stage.vambenepe.com/archives/816">recent</a> <a href="http://stage.vambenepe.com/archives/837">exploration</a> of the Windows management stack from an on-the-wire perspective), who is happy to deal with raw XML (as long as I get to do it with a <a href="http://www.xom.nu/">good library</a>), who appreciates the semantic web, and who values models over protocols the REST principles are very natural to me.</p>
<p>I have read the <a href="http://www.infoq.com/articles/rest-introduction">introduction</a> and the <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">bible</a> but beyond this I haven&#8217;t seen a lot of practical and profound information about using REST (by &#8220;profound&#8221; I mean something that is not obvious to anyone who has written web applications). I had high hopes when Pete Lacey <a href="http://72.249.21.88/nonintersecting/2009/01/17/introducing-the-xprest-project/">promised</a> to deliver this through a realistic example, but it seems to have stalled after <a href="http://72.249.21.88/nonintersecting/2009/01/23/lesson-zero/">two</a> <a href="http://72.249.21.88/nonintersecting/2009/01/30/lesson-one-rest-from-the-beginning/">posts</a>. Still, his <a href="http://www.infoq.com/interviews/pete-lacey-rest">conversation with Stefan Tilkov</a> (video + transcript) remains the most informed comparison of WS-* and REST.</p>
<p>The domain I care the most about is IT resource management (which includes &#8220;Cloud&#8221; in my view). I am familiar with most of the remote API mechanisms in this area (SNMP to WBEM to WMI to JMX/RMI to OGSI, to WSDM/WS-Management to a flurry of proprietary interfaces). I can think of ways in which some REST principles would help in this area, but they are mainly along the lines of &#8220;any consistent set of principles would help&#8221; rather than anything specific to REST. For a while now I have been wondering if I am missing something important about REST and its applicability to IT management or if it&#8217;s mostly a matter of &#8220;just pick one protocol and focus on the model&#8221; (as well as simply avoiding the various drawbacks of the alternative methods, which is a valid reason but not an intrinsic benefit of REST).</p>
<p>I have been trying to learn from others, by looking at how they apply REST to IT/Cloud management scenarios. The Cloud area has been especially fecund in such specifications so I will focus on this for part 1. Here is what I think we can learn from this body of work.</p>
<p><strong>Amazon EC2</strong></p>
<p>When it came out a few years ago, the Amazon <a href="http://docs.amazonwebservices.com/AWSEC2/2006-10-01/DeveloperGuide/">EC2 API</a>, with its equivalent SOAP and plain-HTTP alternatives, did nothing to move me from the view that it&#8217;s just a matter of picking a protocol and being consistent. They give you the choice of plain HTTP versus SOAP, but it&#8217;s just a matter of tweaking how the messages are serialized (URL parameters versus a SOAP message in the input; whether or not there is a SOAP wrapper in the output). The operations are the same whether you use SOAP or not. The responses don&#8217;t even contain URLs. For example, &#8220;RunInstances&#8221; returns the IDs of the instances, not a URL for each of them. You then call &#8220;TerminateInstances&#8221; and pass these instance IDs as parameters rather than doing a &#8220;delete&#8221; on an instance URL. This API seems to have served Amazon (and their ecosystem) well. It&#8217;s easy to understand, easy to use and it provides a convenient way to handle many instances at once. Since no SOAP header is supported, the SOAP wrapper adds no value (I remember reading that the adoption rate for the EC2 SOAP API reflect this though I don&#8217;t have a link handy).</p>
<p>Overall, seeing the EC2 API did not weaken my suspicion that there was no fundamental difference between REST and SOAP in the IT/Cloud management field. But I was very aware that Amazon didn&#8217;t really &#8220;do&#8221; REST in the EC2 API, so the possibility remained that someone would, in a way that would open my eyes to the benefits of true REST for IT/Cloud management.</p>
<p>Fast forward to 2009 and many people have now created and published RESTful APIs for Cloud computing. APIs that are backed by real implementations and that explicitly claim RESTfulness (unlike Amazon). Plus, their authors have great credentials in datacenter automation and/or REST design. First came GoGrid, then the Sun Cloud API and recently Rackspace. So now we have concrete specifications to analyze to understand what REST means for resource management.</p>
<p>I am not going to do a detailed comparative review of these three APIs, though I may get to that in a future post. Overall, they are pretty similar in many dimensions. They let you do similar things (create server instances based on images, destroy them, assign IPs to them&#8230;). Some features differ: GoGrid supports more load balancing features, Rackspace gives you control of backup schedules, Sun gives you clusters (a way to achieve the kind of manage-as-group features inherent in the EC2 API), etc. Leaving aside the feature-per-feature comparison, here is what I learned about what REST means in practice for resource management from each of the three specifications.</p>
<p><strong>GoGrid</strong></p>
<p>Though it calls itself &#8220;REST-like&#8221;, the <a href="http://wiki.gogrid.com/wiki/index.php/API">GoGrid API</a> is actually more along the lines of EC2. The first version of their API claimed that &#8220;the API is a REST-like API meaning all API calls are submitted as HTTP GET or POST requests&#8221; which is the kind of &#8220;HTTP ergo REST&#8221; declaration that makes me cringe. It&#8217;s been somewhat rephrased in later versions (thank you) though they still use the undefined term &#8220;REST-like&#8221;. Maybe it refers to their use of <a href="http://wiki.gogrid.com/wiki/index.php/API:Common_API_Call_Patterns">&#8220;call patterns&#8221;</a>. The main difference with EC2 is that they put the operation name in the URI path rather than the arguments. For example, EC2 uses</p>
<p><em>https://ec2.amazonaws.com/?Action=<strong>TerminateInstances</strong>&amp;InstanceId.1=i-2ea64347&amp;&#8230;(auth-parameters)&#8230;</em></p>
<p>while GoGrid uses</p>
<p><em>https://api.gogrid.com/api/grid/server/<strong>delete</strong>?name=My+Server+Name&amp;&#8230;(auth-parameters)&#8230;</em></p>
<p>So they have action-specific endpoints rather than a do-everything endpoint. It&#8217;s unclear to me that this change anything in practice. They don&#8217;t pass resource-specific URLs around (especially since, like EC2, they include the authentication parameters in the URL), they simply pass IDs, again like EC2 (but unlike EC2 they only let you delete one server at a time). So whatever &#8220;REST-like&#8221; means in their mind, it doesn&#8217;t seem to be &#8220;RESTful&#8221;. Again, the EC2 API gets the job done and I have no reason to think that GoGrid doesn&#8217;t also. My comments are not necessarily a criticism of the API. It&#8217;s just that it doesn&#8217;t move the needle for my appreciation of REST in the context of IT management. But then again, &#8220;instruct William Vambenepe&#8221; was probably not a goal in their functional spec</p>
<p><strong>Rackspace</strong></p>
<p>In this <a href="http://blog.mosso.com/2009/07/an-interview-with-the-architects-of-the-cloud-servers-api/">&#8220;interview&#8221;</a> to announce the release of the <a href="http://www.rackspacecloud.com/cloud_hosting_products/servers/api">Rackspace &#8220;Cloud Servers&#8221; API</a>, lead architects Erik Carlin and Jason Seats make a big deal of their goal to apply REST principles: <em>&#8220;We wanted to adhere as strictly as possible to RESTful practice. We iterated several times on the design to make it more and more RESTful. We actually did an update this week where we made some final changes because we just didn’t feel like it was RESTful enough&#8221;</em>. So presumably this API should finally show me the benefits of true REST in the IT resource management domain. And to be sure it does a better job than EC2 and GoGrid at applying REST principles. The authentication uses HTTP headers, keeping URLs clean. They use the different HTTP verbs the way they are intended. Well mostly, as some of the logic escapes me: doing a GET on /servers/<em>id</em> (where <em>id</em> is the server ID) returns the details of the server configuration, doing a DELETE on it terminates the server, but doing a PUT on the same URL changes the admin username/password of the server. Weird. I understand that the output of a GET can&#8217;t always have the same content as the input of a PUT on the same resource, but here they are not even similar. For non-CRUD actions, the API introduces a special URL (/servers/<em>id</em>/action) to which you can POST. The type of the payload describes the action to execute (reboot, resize, rebuild&#8230;). This is very similar to Sun&#8217;s &#8220;controller URLs&#8221; (see below).</p>
<p>I came out thinking that this is a nice on-the-wire interface that should be easy to use. But it&#8217;s not clear to me what REST-specific benefit it exhibits. For example, how would this API be less useful if &#8220;delete&#8221; was another action POSTed to /servers/<em>id</em>/action rather than being a DELETE on /servers/<em>id</em>? The authors carefully define the HTTP behavior (content compression, caching&#8230;) but I fail to see how the volume of data involved in using this API necessitates this (we are talking about commands here, not passing disk images around). Maybe I am a lazy pig, but I would systematically bypass the cache because I suspect that the performance benefit would be nothing in comparison to the cost of having to handle in my code the possibility of caching taking place (<em>&#8220;is it ok here that the content might be stale? what about here? and here?&#8221;</em>).</p>
<p><strong>Sun</strong></p>
<p>Like Rackspace, the <a href="http://kenai.com/projects/suncloudapis/pages/Home">Sun Cloud API</a> is explicitly RESTful. And, by virtue of Tim Bray being on board, we benefit from not just seeing the API but also <a href="http://www.tbray.org/ongoing/When/200x/2009/03/16/Sun-Cloud">reading</a> in well-explained <a href="http://www.tbray.org/ongoing/When/200x/2009/07/02/Slow-REST">details</a> the issues, alternatives and choices that went into it. It is pretty similar to the Rackspace API (e.g. the &#8220;controller URL&#8221; approach mentioned above) but I like it a bit better and not just because the underlying model is richer (and getting richer every day as I just realized by re-reading it tonight). It handles many-as-one management through clusters in a way that is consistent with the direct resource access paradigm. And what you PUT on a resource is closely related to what you GET from it.</p>
<p>I have <a href="http://stage.vambenepe.com/archives/632">commented before</a> on the Sun Cloud API (though the increasing richness of their model is starting to make my comments less understandable, maybe I should look into changing the links to a point-in-time version of Kenai). It shows that at the end it&#8217;s the model, not the protocol that matters. And Tim is right to see REST in this case as more of a set of hygiene guidelines for on-the-wire protocols then as the enabler for some unneeded scalability (which takes me back to wondering why the Rackspace guys care so much about caching).</p>
<p><strong>Anything learned?</strong></p>
<p>So, what do these APIs teach us about the practical value of REST for IT/Cloud management?</p>
<p>I haven&#8217;t written code against all of them, but I get the feeling that the Sun and Rackspace APIs are those I would most enjoy using (Sun because it&#8217;s the most polished, Rackspace because it doesn&#8217;t force me to use JSON). The JSON part has two component. One is simply my lack of familiarity with using it compared to XML, but I assume I&#8217;ll quickly get over this when I start using it. The second is my concern that it will be cumbersome when the models handled get more complex, heterogeneous and versioned, chiefly from the lack of namespace support. But this is a topic for another day.</p>
<p>I can&#8217;t tell if it&#8217;s a coincidence that the most attractive APIs to me happen to be the most explicitly RESTful. On the one hand, I don&#8217;t think they would be any less useful if all the interactions where replaced by XML RPC calls. Where the payloads of the requests and responses correspond to the parameters the APIs define for the different operations. The Sun API could still return resource URLs to me (e.g. a VM URL as a result of creating a VM) and I would send reboot/destroy commands to this VM via XML RPC messages to this URL. How would it matter that everything goes over HTTP POST instead of skillfully choosing the right HTTP verb for each operation? BTW, whether the XML RPC is SOAP-wrapped or not is only a secondary concern.</p>
<p>On the other hand, maybe the process of following REST alone forces you to come up with a clear resource model that makes for a clean API, independently of many of the other REST principles. In this view, REST is to IT management protocol design what classical music training is to a rock musician.</p>
<p>So, at least for the short-term expected usage of these APIs (automating deployments, auto-scaling, cloudburst, load testing, etc) I don&#8217;t think there is anything inherently beneficial in REST for IT/Cloud management protocols. What matter is the amount of thought you put into it and that it has a clear on-the-wire definition.</p>
<p>What about longer term scenarios? Wouldn&#8217;t it be nice to just use a Web browser to navigate HTML pages representing the different Cloud resources? Could I use these resource representations to create mashups tying together current configuration, metrics history and events from wherever they reside? In other words, could I throw away my IT management console because all the pages it laboriously generates today would exist already in the ether, served by the controllers of the resources. Or rather as a mashup of what is served by these controllers. Such that my IT management console is really &#8220;in the cloud&#8221;, meaning not just running in somebody else&#8217;s datacenter but rather assembled on the fly from scattered pieces of information that live close to the resources managed. And wouldn&#8217;t this be especially convenient if/when I use a &#8220;federated&#8221; cloud, one that spans my own datacenter and/or multiple Cloud providers? The scalability of REST could then become more relevant, but more importantly its mashup-friendliness and location transparency would be essential.</p>
<p>This, to me, is the intriguing aspect of using REST for IT/Cloud management. This is where the Sun Cloud API would beat the EC2 API. Tim says that in the Sun Cloud &#8220;the router is just a big case statement over URI-matching regexps&#8221;. Tomorrow this router could turn into five different routers deployed in different locations and it wouldn&#8217;t change anything for the API user. Because they&#8217;d still just follow URLs. Unlike all the others APIs listed above, for which you know the instance ID but you need to somehow know which controller to talk to about this instance. Today it doesn&#8217;t matter because there is one controller per Cloud and you use one Cloud at a time. Tomorrow? As Tim says, &#8220;the API doesn’t constrain the design of the URI space at all&#8221; and this, to me, is the most compelling long-term reason to use REST. But it only applies if you use it properly, rather than just calling your whatever-over-HTTP interface RESTful. And it won&#8217;t differentiate you in the short term.</p>
<p>The second part in the &#8220;REST in practice for IT and Cloud management&#8221; series will be about the use of REST for configuration management and especially federation. Where you can expect to read more about the benefits of links (I mean &#8220;hypermedia&#8221;).</p>
<p>[UPDATE: <a href="http://stage.vambenepe.com/archives/894">Part 2</a> is now available. Also make sure to read the <a href="http://stage.vambenepe.com/archives/863#comments">comments</a> bellow.]</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/894' rel='bookmark' title='Permanent Link: REST in practice for IT and Cloud management (part 2: configuration management)'>REST in practice for IT and Cloud management (part 2: configuration management)</a></li>
<li><a href='http://stage.vambenepe.com/archives/1161' rel='bookmark' title='Permanent Link: REST in practice for IT and Cloud management (part 3: wrap-up)'>REST in practice for IT and Cloud management (part 3: wrap-up)</a></li>
<li><a href='http://stage.vambenepe.com/archives/943' rel='bookmark' title='Permanent Link: Separating model from protocol in Cloud APIs'>Separating model from protocol in Cloud APIs</a></li>
<li><a href='http://stage.vambenepe.com/archives/447' rel='bookmark' title='Permanent Link: Who said WS-Transfer is for REST?'>Who said WS-Transfer is for REST?</a></li>
<li><a href='http://stage.vambenepe.com/archives/936' rel='bookmark' title='Permanent Link: VMWare publishes (and submits) vCloud API'>VMWare publishes (and submits) vCloud API</a></li>
<li><a href='http://stage.vambenepe.com/archives/1538' rel='bookmark' title='Permanent Link: Introducing the Oracle Cloud API'>Introducing the Oracle Cloud API</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/863/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Is notification wrapping getting a bum rap?</title>
		<link>http://stage.vambenepe.com/archives/559</link>
		<comments>http://stage.vambenepe.com/archives/559#comments</comments>
		<pubDate>Wed, 18 Feb 2009 07:58:23 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Management integration]]></category>
		<category><![CDATA[Mashup]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=559</guid>
		<description><![CDATA[Looks like the question of whether to wrap SOAP-based notifications is back. Like Gil I prefer to stay away from wrapping notifications but my reasons are somewhat different.
I am not convinced by WSDL-centric arguments one way or the other. Proponents of wrapping say that it gives them a WSDL they can use for creating a [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/1284' rel='bookmark' title='Permanent Link: Waiting for events (in Cloud APIs)'>Waiting for events (in Cloud APIs)</a></li>
<li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/13' rel='bookmark' title='Permanent Link: WS-Notification is an OASIS standard'>WS-Notification is an OASIS standard</a></li>
<li><a href='http://stage.vambenepe.com/archives/1504' rel='bookmark' title='Permanent Link: Dear Cloud API, your fault line is showing'>Dear Cloud API, your fault line is showing</a></li>
<li><a href='http://stage.vambenepe.com/archives/50' rel='bookmark' title='Permanent Link: WSRF and WS-Notification public review'>WSRF and WS-Notification public review</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Looks like the question of whether to wrap SOAP-based notifications is back. <a href="http://blogs.oracle.com/wsinterop/2009/02/the_problem_with_wrapped_notif.html">Like Gil</a> I prefer to stay away from wrapping notifications but my reasons are somewhat different.</p>
<p>I am not convinced by WSDL-centric arguments one way or the other. Proponents of wrapping say that it gives them a WSDL they can use for creating a generic listener, while opponents say that avoiding wrapping gives them a WSDL that generates useful code (payload-aware). I am not a big fan of WSDL-based code generation, but even if you are going to do it nobody says that you have to do it based on the WSDL document that ships with the specification. You&#8217;re free to modify the WSDL any way you want before feeding it to your code generation tool, as long as the result correctly describes the messages. One can write an infinity of WSDL documents for a given set of messages, some more precise and others more high-level (in which you quickly hit an <em>xs:any</em>). So, if the spec gives you a WSDL where the payload is <em>xs:any</em> and you know that in your case the payload is going to be <em>sec:intrusionDetected</em>, feel free to insert that element in the WSDL before running wsdl2java or whatever.</p>
<p>At the end, the question is not about what the WSDL in the specification looks like. The question is simply to what extent you know ahead of time the payload of the events you are going to have to handle. And you&#8217;d better know enough about the payload to create whatever logic your event consumer has to apply to the notification. Whether that&#8217;s through WSDL or some other mean. If you are not going to apply any payload-dependent logic (&#8220;generic sink&#8221;) then you don&#8217;t need to know anything about the payload. And I don&#8217;t see why someone needs a wrapper to create a generic sink.</p>
<p>Rather, what I don&#8217;t like about wrapping notifications is that you force them to be handled only as notifications, not as regular SOAP messages. You put them in a separate world and you make it hard for someone to create a service that can be invoked either in a subscription-driven way or in a direct way.</p>
<p>Here is a made-up example: consider a message to indicate that a physical intrusion has been detected in a building. There are many possible consumers for this message (local security staff, private security company, police, sound alarm, the cell phone of the owner, audit log, etc&#8230;). There are many possible sources for the message. In some cases, the message does not come from a subscription (e.g. a homeowner calls the security company and the operator enters data in a system that produces the message, or the sensor is hard-coded to sound the alarm). In others, there is a subscription (e.g. a home alarm system allows someone to register phone numbers and email addresses to which to send intrusion alerts). Sometimes something that starts as a subscription-based notification gets forwarded to someone who did not register for anything. It&#8217;s a good thing if web services that consume this message do not have to know (if they don&#8217;t care) whether this message originated because of a subscription or not. All they need to worry about is that there is a message that they have to respond to (e.g. by dispatching a patrol of clowns with orange lights on their car).</p>
<p>Here is a simpler analogy. Imagine that you have a filter in your email client to move all messages from Joe to a given folder. How much would you like to have to write the rule twice, one for messages that Joe sends to you directly and one for messages that Joe sends to a mailing list to which you are subscribed? Not very much I imagine.</p>
<p>At the same time, most notification systems are aware that they are processing notifications and there may be notification-related data that you&#8217;d like to have available in a consistent way (e.g. enough information to manage the subscription that resulted in you receiving this message). That&#8217;s fine but you don&#8217;t need an intrusive wrapper for this. Just use a SOAP header. It&#8217;s out of the way if you don&#8217;t care about it and it&#8217;s right there if you do (if you want to subject yourself to a two-year-old rant about how the SOAP processing model is unfortunately underutilized, <a href="http://stage.vambenepe.com/archives/118">be my guest</a>).</p>
<p>One place where you need some kind of wrapping is when delivering several events at a time (either because you use pull-style retrieval or because you find it more efficient to push them in batches). If that&#8217;s what you&#8217;re after (and you want to handle it within one SOAP message rather than boxcarring a set of SOAP messages) then go ahead define a wrapper but make it a specialized wrapper that serves this purpose: collecting notifications and properly attaching whatever metadata to each. That&#8217;s a real purpose, not some WSDL make-believe.</p>
<p>Another use case is if you apply some transformation to the notification before sending it. Say that instead of returning a large notification you filter it by running an XPath on it and returning a serialization of the resulting node set (assuming you first solve the <a href="http://stage.vambenepe.com/archives/197">XPath serialization conundrum</a>). You&#8217;d need some kind of wrapper to contain the result and put it in context, but again that should be a specialized wrapper for you filter mechanism. Not a generic wrapper.</p>
<p>It&#8217;s been a while since I really thought about this. My recollection may be flawed but I think I was already holding this position in the OASIS WS-Notification technical committee (which <a href="http://www.oasis-open.org/news/oasis-news-2006-10-11.php">completed its work</a> by publishing three standards in October 2006). I remember David Hull making a very eloquent case in the same direction (&#8220;wrapping&#8221; as policy-advertised option, not a part of the base framework), and strong pushback from IBM. I learned a lot about pub/sub systems from my WS-Notification committee co-chair, IBM&#8217;s Peter Niblett (a leading expert on the topic) while working on WS-Notification, but this is one area in which he did not convert me.</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/1284' rel='bookmark' title='Permanent Link: Waiting for events (in Cloud APIs)'>Waiting for events (in Cloud APIs)</a></li>
<li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/13' rel='bookmark' title='Permanent Link: WS-Notification is an OASIS standard'>WS-Notification is an OASIS standard</a></li>
<li><a href='http://stage.vambenepe.com/archives/1504' rel='bookmark' title='Permanent Link: Dear Cloud API, your fault line is showing'>Dear Cloud API, your fault line is showing</a></li>
<li><a href='http://stage.vambenepe.com/archives/50' rel='bookmark' title='Permanent Link: WSRF and WS-Notification public review'>WSRF and WS-Notification public review</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/559/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WS Resource Access working group starting at W3C</title>
		<link>http://stage.vambenepe.com/archives/436</link>
		<comments>http://stage.vambenepe.com/archives/436#comments</comments>
		<pubDate>Thu, 13 Nov 2008 07:42:57 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[CMDBf]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[IT Systems Management]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Management integration]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[WS-Management]]></category>
		<category><![CDATA[WS-ResourceTransfer]]></category>
		<category><![CDATA[WS-Transfer]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=436</guid>
		<description><![CDATA[Things went quiet for a while, but the W3C Web Services Resource Access Working Group has finally taken life, as was announced last week. It&#8217;s a well-know PR trick to announce bad news on a Friday such that it goes undetected, is it a coincidence that W3C picked a Friday for this announcement?
As you can [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/231' rel='bookmark' title='Permanent Link: WS-Eventing joins the WS-Thingy working group proposal'>WS-Eventing joins the WS-Thingy working group proposal</a></li>
<li><a href='http://stage.vambenepe.com/archives/217' rel='bookmark' title='Permanent Link: WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C'>WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/200' rel='bookmark' title='Permanent Link: WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;'>WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/206' rel='bookmark' title='Permanent Link: RESTful JMX access from someone who knows both sides'>RESTful JMX access from someone who knows both sides</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Things went quiet for a while, but the W3C <a href="http://www.w3.org/2002/ws/ra/">Web Services Resource Access Working Group</a> has finally taken life, as was <a href="http://www.w3.org/News/2008#item185">announced last week</a>. It&#8217;s a well-know PR trick to announce bad news on a Friday such that it goes undetected, is it a coincidence that W3C picked a Friday for this announcement?</p>
<p>As you can tell by this last remark, I have no trouble containing my enthusiasm about this new group. Which should not come as a surprise to regular readers of this blog (see <a href="http://stage.vambenepe.com/archives/200">this</a>, <a href="http://stage.vambenepe.com/archives/217">this</a>, <a href="http://stage.vambenepe.com/archives/224">this</a> and <a href="http://stage.vambenepe.com/archives/225">this</a>, chronologically).</p>
<p>The most obvious potential pushback against this effort is the questionable architectural need to redo over SOAP what can be done over simple HTTP. Along the lines of Erik Wilde&#8217;s <a href="http://dret.typepad.com/dretblog/2008/11/http-over-soap-over-http.html">&#8220;HTTP over SOAP over HTTP&#8221;</a> post. But I don&#8217;t expect too much noise about this aspect, because even on the blogosphere people eventually get <a href="http://www.markbaker.ca/blog/2008/01/rest-vs-soap-the-personal-cost/">tired</a> of repeating the same arguments. If some really wanted to put up a fight against this, it would have been done when the group was first announced, not now. That resource modeling party is <a href="http://stage.vambenepe.com/archives/348">over</a>.</p>
<p>While I understand the &#8220;WS-Transfer is just HTTP over SOAP over HTTP&#8221; argument, this is not my problem with this group. For one thing, this group is not really about WS-Transfer, it&#8217;s about WS-ResourceTransfer (WS-RT) which adds fine-grained resource access on top of WS-Transfer. Which is not something that HTTP gives you out of the box. You may argue that this is not needed (just model your addressable resources in a fine-grained way and use &#8220;hypermedia&#8221; to navigate between them) but I don&#8217;t really buy this. At least not in the context of IT management models, which is where the whole thing started. You may be able to architect an IT management system in such RESTful way, but even if you can it&#8217;s too far away from current IT modeling practices to be practical in many scenarios (unfortunately, as it would be a great complement to an RDF-based IT model). On the other hand, I am not convinced that this fine-grained access needs to go beyond &#8220;read&#8221; (i.e. no need for <a href="http://stage.vambenepe.com/archives/224">&#8220;fine-grained write&#8221;</a>).</p>
<p>The next concern along that &#8220;HTTP over SOAP over HTTP&#8221; line of thought might then be why build this on top of SOAP rather than on top of HTTP. I don&#8217;t really buy this one either. SOAP, through the SOAP processing model (mainly the use of headers, something that WS-RT unfortunately butchers) is better suited than HTTP for such extensions. And enough of them have already been defined that you may want to piggyback on. The main problem with SOAP is the WS-Addressing <a href="http://www.markbaker.ca/blog/2004/08/ws-addressing-to-the-w3c/">tumor</a> that grew on it (first I thoughts it was just a wart, but then it metastatized). WS-RT is affected by it, but it&#8217;s not intrinsic to WS-RT.</p>
<p>Finally, it would be a little hard for me to reject SOAP-based resources access altogether, having been associated with many such systems: WSMF, WSDM/WSRF, WS-Management and even WS-RT in its pre-submission days (and my pre-Oracle days). Not that I have signed away my rights to change my mind.</p>
<p>So my problem with WS-RAWG is not a fundamental architectural problem. It&#8217;s not even a problem with the defects in the current version of WS-RT. They are fixable and the alternative specifications aren&#8217;t beauty queens either.</p>
<p>Rather, my concerns are focused on the impact on the interoperability landscape.</p>
<p>When WS-RT started (when I was involved in it), it was as part of a convergence effort between HP, IBM, Intel and Microsoft. With the plan to use this to unify the competing WS-Management and WSDM/WSRF stacks. Sure it was also an opportunity to improve things a bit, but 90% of the value came from the convergence/unification aspect, not technical improvements.</p>
<p>With three of the four companies having given up on this, it isn&#8217;t much of a convergence anymore. Rather then paring-down the number of conflicting options that developers have to chose from (a choice that usually results in &#8220;I won&#8217;t pick either sine there is no consensus, I&#8217;ll just do it my own way&#8221;), this effort is going to increase it. One more candidate. WS-Management is not going to go away, and it&#8217;s pretty likely that in W3C WS-RT will move further away from it.</p>
<p>Not to mention the fact that CMDBf (and its SOAP-based graph-oriented query protocol) has since emerged and is progressing towards standardization. At this point, my (notoriously buggy) crystal ball shows a mix of WS-management and CMDBf taking the prize overall. With WS-Management used to access individual resources and CMDBf used to access any kind of overall system view. Which, as a side note, means that DMTF has really taken this game over (at least in the IT management domain) from W3C and OASIS. Not that W3C really wanted to be part of the game in the first place&#8230;</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/231' rel='bookmark' title='Permanent Link: WS-Eventing joins the WS-Thingy working group proposal'>WS-Eventing joins the WS-Thingy working group proposal</a></li>
<li><a href='http://stage.vambenepe.com/archives/217' rel='bookmark' title='Permanent Link: WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C'>WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/200' rel='bookmark' title='Permanent Link: WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;'>WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/206' rel='bookmark' title='Permanent Link: RESTful JMX access from someone who knows both sides'>RESTful JMX access from someone who knows both sides</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/436/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</title>
		<link>http://stage.vambenepe.com/archives/308</link>
		<comments>http://stage.vambenepe.com/archives/308#comments</comments>
		<pubDate>Thu, 11 Sep 2008 08:23:48 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[WS-Management]]></category>
		<category><![CDATA[WS-ResourceTransfer]]></category>
		<category><![CDATA[WS-Transfer]]></category>
		<category><![CDATA[XPath]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=308</guid>
		<description><![CDATA[The recent release of an early draft of a content management specification (CMIS, for Content Management Interoperability Services) provides an interesting perspective on not just SOAP-versus-REST but also Zen-SOAP versus WS-KitchenSink.
I know little about content management and I have no comment about the specification from that respect. Others have better informed opinions on that aspect.
What [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/436' rel='bookmark' title='Permanent Link: WS Resource Access working group starting at W3C'>WS Resource Access working group starting at W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/200' rel='bookmark' title='Permanent Link: WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;'>WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;</a></li>
<li><a href='http://stage.vambenepe.com/archives/224' rel='bookmark' title='Permanent Link: Who needs XPath fragment-level PUT?'>Who needs XPath fragment-level PUT?</a></li>
<li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/118' rel='bookmark' title='Permanent Link: Gutting the SOAP processing model'>Gutting the SOAP processing model</a></li>
<li><a href='http://stage.vambenepe.com/archives/348' rel='bookmark' title='Permanent Link: State modeling: party over, go home now.'>State modeling: party over, go home now.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The recent release of an early draft of a content management specification (CMIS, for Content Management Interoperability Services) provides an interesting perspective on not just SOAP-versus-REST but also Zen-SOAP versus WS-KitchenSink.</p>
<p>I know little about content management and I have no comment about the specification from that respect. Others <a href="http://www.mwdadvisors.com/blog/2008/09/ecm-vendors-collaborate-on.html">have</a> <a href="http://ccsblog.burtongroup.com/collaboration_and_content/2008/09/the-commoditiza.html">better</a> <a href="http://newton.typepad.com/content/2008/09/alfresco-releases-first-cmis-implementation.html">informed</a> <a href="http://chucksblog.typepad.com/chucks_blog/2008/09/cmis----its-not.html">opinions</a> on that aspect.</p>
<p>What is of interest to me, and where I have some experience, is the way the spec-defined operations are bound to underlying protocols. Here is the way the <a href="http://go.microsoft.com/fwlink/?LinkId=127855">specification</a> is structured: Part I describes the data model and the operations exposed by all the services. Part II comes in two flavors: a REST binding (based on APP, the Atom Publishing Protocol) and a Web services binding (based on SOAP).</p>
<p>This is the first time, to my knowledge, that someone (who presumably isn&#8217;t a participant in the SOAP/REST religious war but simply wants to get something done) describes two ways to achieve a real-life task, using either APP or SOAP. I expect that this will attract a lot of attention and provide data in the SOAP versus REST debate.</p>
<p>But this is not what I want to write about. I&#8217;ll just point out that the REST binding specification somehow is twice as long as the SOAP binding specification, which I find intriguing but not necessarily meaningful (things are looking good for <a href="http://sanjiva.weerawarana.org/2008/09/rest-begins-to-take-shape.html">your bet</a> Sanjiva).</p>
<p>What really caught my attention is how SOAP is used in CMIS. You can hardly tell it&#8217;s SOAP. CMIS just defines XML messages to be used as payload for requests and responses. You would be excused for forgetting halfway through your implementation that you&#8217;re supposed to wrap those in a SOAP envelope. Headers are a no-show. The specification says it uses SOAP faults but it actually goes out of its way to avoid the existing elements for fault code and fault message and instead invent its own. The only SOAP feature it really uses is MTOM.</p>
<p>Except for the MTOM part, this reminds me of what SOAP was at the beginning of the decade, before any header had been defined (other than those used as illustration in the SOAP specification itself). I want to call it Zen-SOAP, by opposition to the WS-KitchenSink approach in which even simple, synchronous, clear-text, request-response SOAP exchanges somehow get saddled with a half dozen WS-Addressing headers before they&#8217;ve even left the gate (did I mention that I don&#8217;t like WS-Addressing?).</p>
<p>Another comedian in the WS-KitchenSink theater troupe is the WS-Transfer stack and especially WS-ResourceTransfer (WS-RT). Unless I read too much into this draft of CMIS, its content is devastating in two ways for WS-ResourceTransfer: in one fell swoop it shows that the specification is mostly useless and it destroys the argument that WS-ResourceTransfer needs to be stand-alone as opposed to just a part of WS-Management.</p>
<p>In <a href="http://stage.vambenepe.com/archives/224">&#8220;who needs XPath fragment-level PUT?&#8221;</a>, I tried to make the case that the use of XPath in WS-RT to do fine-grained updates is a case of over-engineering. That there is no real need for it. Still, in that article I try to think of cases where the feature might be justified. I came up with two and I wrote that <em>&#8220;one is if the resource actually is a document (as opposed to having its state represented by a document). For example, a wiki page&#8221;</em>. But I dismissed it because wiki-land is REST country. I didn&#8217;t think of it at the time, but there is an &#8220;enterprise&#8221; version of wiki, a world in which, presumably, SOAP is well-regarded: Content Management Systems. Surely, if there is a domain that needs a fine-grained SOAP-based document editing protocol it&#8217;s the CMS world.</p>
<p>Today&#8217;s release of CMIS demolishes this use case with two punches to the guts:</p>
<ul>
<li>They do have a query language, but it is SQL-based, not XPath-based.</li>
<li>The query is only used for reads, not for updates. Updates are done through specialized operations (addObjectToFolder, moveObject, updateProperties, createRelationship&#8230;).</li>
</ul>
<p>This goes beyond not using a generic fine-grained update mechanism. It also goes against using any generic GET/SET operation. The blow reaches all the way to WS-Transfer. For all this, CMIS comes out a much simpler specification and it also frees itself from the web of dependencies (on specifications at different stages of standardization) that has plagued specifications that use WS-Transfer and will plague WS-Federation for using WS-RT.</p>
<p>It will be interesting to see what happens when the WS-* architects and Microsoft and IBM get hold of the CMIS specification and of its authors in their companies. I am especially worried about the fate of the IBM CMIS authors. The <a href="http://stage.vambenepe.com/archives/293">recent news about Oslo</a> show that the XML people at Microsoft are a lot more willing to put the XML tools back in the box when needed.</p>
<p>In truth, the CMIS authors do appear to need some help from the SOAP experts in their companies, if only to fix the way they use SOAP faults and to help the poor soul who put this comment in the WSDL:</p>
<p>&lt;!&#8211; had to use include &#8211; .net wsdl.exe code generator doesn&#8217;t seem to like imports on the schema &#8211;&gt;</p>
<p>But they might be getting more &#8220;suggestions&#8221; than they bargained for. In the same way that the WS-Federation folks were going on their own merry way until it was &#8220;suggested&#8221; to them by someone (who probably had an agenda) to use WS-RT. I&#8217;ll try to keep an eye on how CMIS evolves.</p>
<p>In the meantime, I find in CMIS data points that reinforce my opinion that WS-Transfer should be absorbed by WS-Management, WS-MeX and WS-Federation should return to defining their own operations and WS-RT should be left to die (or, for a more positive spin, be used as inspiration in the next version of WS-Management).</p>
<p>[UPDATED 2008/10/02: Roy Fielding <a href="http://roy.gbiv.com/untangled/2008/no-rest-in-cmis">doesn't like</a> the so-called-RESTful binding. Sam Ruby <a href="http://intertwingly.net/blog/2008/10/01/CMIS">cautiously defends it</a>. Links via <a href="http://blogs.oracle.com/fusionecm/2008/10/cmis_a_contrarian_view.html">Billy Cripe</a>.]</p>
<p>[UPDATED 2009/5/1: For some reason this entry is attracting a lot of comment spam, so I am disabling comments. <a href="http://stage.vambenepe.com/about">Contact me</a> if you'd like to comment.]</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/436' rel='bookmark' title='Permanent Link: WS Resource Access working group starting at W3C'>WS Resource Access working group starting at W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/200' rel='bookmark' title='Permanent Link: WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;'>WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;</a></li>
<li><a href='http://stage.vambenepe.com/archives/224' rel='bookmark' title='Permanent Link: Who needs XPath fragment-level PUT?'>Who needs XPath fragment-level PUT?</a></li>
<li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/118' rel='bookmark' title='Permanent Link: Gutting the SOAP processing model'>Gutting the SOAP processing model</a></li>
<li><a href='http://stage.vambenepe.com/archives/348' rel='bookmark' title='Permanent Link: State modeling: party over, go home now.'>State modeling: party over, go home now.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/308/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WS Resource Access at W3C: the good, the bad and the ugly</title>
		<link>http://stage.vambenepe.com/archives/225</link>
		<comments>http://stage.vambenepe.com/archives/225#comments</comments>
		<pubDate>Thu, 10 Jul 2008 07:58:45 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Grid]]></category>
		<category><![CDATA[IT Systems Management]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Management integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[WS-Management]]></category>
		<category><![CDATA[WS-ResourceTransfer]]></category>
		<category><![CDATA[WS-Transfer]]></category>
		<category><![CDATA[XMLFrag]]></category>
		<category><![CDATA[XPath]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=225</guid>
		<description><![CDATA[As far as I know, the W3C is still reviewing the proposal that was made to them to create a new working group to standardize WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange. The suggested name, &#8220;Web Services Resource Access Working Group&#8221; or WS-RAWG is likely, if it sticks, to end up being shortened to WS-RAW. Which is [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/436' rel='bookmark' title='Permanent Link: WS Resource Access working group starting at W3C'>WS Resource Access working group starting at W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/217' rel='bookmark' title='Permanent Link: WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C'>WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/206' rel='bookmark' title='Permanent Link: RESTful JMX access from someone who knows both sides'>RESTful JMX access from someone who knows both sides</a></li>
<li><a href='http://stage.vambenepe.com/archives/200' rel='bookmark' title='Permanent Link: WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;'>WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/197' rel='bookmark' title='Permanent Link: The elusive XPath nodeset serialization'>The elusive XPath nodeset serialization</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>As far as I know, the W3C is still reviewing the <a href="http://lists.w3.org/Archives/Public/www-ws/2008Jun/0001.html">proposal</a> that was made to them to create a new working group to standardize WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange. The suggested name, &#8220;Web Services Resource Access Working Group&#8221; or WS-RAWG is likely, if it sticks, to end up being shortened to WS-RAW. Which is a bit more cruel than needed. I&#8217;d say it&#8217;s simply half-baked.</p>
<p>There are many aspects to the specifications and features covered by the proposal. Some goodness, some badness and some ugliness. This post analyzes the good, points at the bad and hints at the ugly. Like your average family-oriented summer movie.</p>
<p><strong>The good</strong></p>
<p>The specifications proposed for W3C standardization describe a way to provide some generally useful features for SOAP messages. Some SOAP messages can get very long. In some cases, I know ahead of time what portion of the long messages promised by the contract (e.g. WSDL) I want. Wouldn&#8217;t it be nice, as an optimization, to let the message sender know about this so they can, if they are able to, filter down the message to just the part I want? Alternatively, maybe I do want the full response but I can&#8217;t consume it as one big message so I would like to get it in chunks.</p>
<p>You&#8217;ll notice that the paragraph above says nothing about &#8220;resources&#8221;. We are just talking about messaging features for SOAP messages. There are precedents for this. WS-Security can be used to encrypt a message. Any message. WS-ReliableMessaging can be used to ensure delivery of a message. Any message. These &#8220;quality of service&#8221; specifications are mostly orthogonal to the message content.</p>
<p>WS-RT and WS-Enumeration provide a solution to the &#8220;message filtering&#8221; and &#8220;message chunking&#8221;, respectively. But they only address them in the context of a GET-like operation. They can&#8217;t be layered on top of any SOAP message. How useful would WS-Security and WS-ReliableMessaging be if they had such a restriction?</p>
<p>If W3C takes on part of the work listed in the proposal, I hope they&#8217;ll do so in a way that expends the utility of these features to all SOAP messages.</p>
<p>And just like WS-Security and WS-ReliableMessaging, these features should be provided in a way that leverages the SOAP processing model. Such that I can judiciously use the soap:mustUnderstand header to not break existing services. If I&#8217;d like the message to be paired down but I can handle the complete message if need be, I&#8217;ll set this attribute to false. If I can&#8217;t handle the full message, I&#8217;ll set the attribute to true and I&#8217;ll get an error if the other party doesn&#8217;t understand this extension. At which point I can pick an alternative way to get the task accomplished. Sounds pretty basic but it&#8217;s amazing how often this important feature of SOAP (which heralds from and extends XML&#8217;s must-ignore semantics) is neglected and obstructed by designers of SOAP messages.</p>
<p>And then there is WS-MetadataExchange. While I am not a huge fan of this specification, I agree with the need for a simple, reliable way to retrieve different types of metadata for an endpoint.</p>
<p>So that&#8217;s the (potential) good. A flexible and generally useful way to pair-down long SOAP messages, to chunk them and to retrieve metadata for SOAP endpoints.</p>
<p><strong>The bad</strong></p>
<p>The bad is the whole &#8220;resource access&#8221; spin. It is not actually intrinsically bad. There are scenarios where such a pattern actually fits. But the way that pattern is being addressed by WS-RT and friends is overly generalized and overly XML-centric. By the latter I mean that it takes XML from an agreed-upon on-the-wire interchange format to an implicit metamodel (e.g. it assumes not just that you agree to exchange XML-formated data but that your model and your business logic are organized and implemented around an XML representation of the domain, which is a much more constraining requirement). I could go on and on about this, especially the use of XPath in the PUT operation. In fact I did go on and on with it, but I spun that off as a <a href="http://stage.vambenepe.com/archives/224">separate entry</a>.</p>
<p>In the context of the W3C proposal at hand, this is bad because it burdens the generally useful features (see the &#8220;good&#8221; section above) with an unneeded and limiting formalism. Not to mention the fact that W3C kind of already has its resource access mechanism, but I&#8217;ll leave that aspect of the question to <a href="http://lists.w3.org/Archives/Public/www-ws/2008Jun/0000.html">Mark</a> and various bloggers (see a short list of relevant posts at the end of <a href="http://stage.vambenepe.com/archives/217">this entry</a>).</p>
<p>The resource access part might be worth doing (<a href="http://www.globus.org/toolkit/draft-ggf-ogsi-gridservice-33_2003-06-27.pdf">one</a> <a href="http://www.oasis-open.org/committees/wsrf/">more</a> <a href="http://www.dmtf.org/standards/wsman">time</a>), but probably not in the same group as things like metadata discovery, message filtering and message chunking, which are not specific to &#8220;resource access&#8221; situations. And if someone is going to do this again, rather than repeating the <a href="http://www.1060.org/blogxter/entry?publicid=9979D1B0993EE4BD123909700942E5EC&amp;token=">not too useful</a> approaches of the past, it may be good to consider <a href="http://stage.vambenepe.com/archives/114">alternatives</a>.</p>
<p><strong>The ugly</strong></p>
<p>That&#8217;s the politics around this whole deal. There is, as you would expect, a lot more to it than meets the eye. The underlying drivers for all this have little to do with REST/WS or other architecture considerations. They have a lot to do with control. But that&#8217;s a topic for another post (maybe) when more of it can be publicly discussed.</p>
<p>A lot of what I describe in this post was already explained in the <a href="http://stage.vambenepe.com/archives/200">WS-ManagementHammer</a> post from a couple of months ago. But that was before the W3C proposal and before WS-MetadataExchange was dragged into the deal. So I thought it might be useful to put the analysis in the context of that proposal. And BTW, this is a personal opinion, not an Oracle position (which is true in general for everything on this blog but is worth repeating specifically for this post).</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/436' rel='bookmark' title='Permanent Link: WS Resource Access working group starting at W3C'>WS Resource Access working group starting at W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/217' rel='bookmark' title='Permanent Link: WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C'>WS-Transfer, WS-ResourceTransfer, WS-Enumeration and WS-MetadataExchange on their way to W3C</a></li>
<li><a href='http://stage.vambenepe.com/archives/206' rel='bookmark' title='Permanent Link: RESTful JMX access from someone who knows both sides'>RESTful JMX access from someone who knows both sides</a></li>
<li><a href='http://stage.vambenepe.com/archives/200' rel='bookmark' title='Permanent Link: WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;'>WS-ManagementHammer: don&#8217;t do it but if you are going to do it anyway then&#8230;</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/197' rel='bookmark' title='Permanent Link: The elusive XPath nodeset serialization'>The elusive XPath nodeset serialization</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/225/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Three non-muppets walk into a bar&#8230;</title>
		<link>http://stage.vambenepe.com/archives/222</link>
		<comments>http://stage.vambenepe.com/archives/222#comments</comments>
		<pubDate>Tue, 08 Jul 2008 03:52:32 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP processing model]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=222</guid>
		<description><![CDATA[I can&#8217;t shake the feeling that if Steve Vinoski, Steve Jones and Stuart Charlton had a drink together they&#8217;d actually agree on pretty much any distributed computing question that is worded in specific and unambiguous terms.
If you are not subscribed to their three blogs (and I don&#8217;t understand why you would not be if you [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/1042' rel='bookmark' title='Permanent Link: Missing out on the OCCI fun'>Missing out on the OCCI fun</a></li>
<li><a href='http://stage.vambenepe.com/archives/1504' rel='bookmark' title='Permanent Link: Dear Cloud API, your fault line is showing'>Dear Cloud API, your fault line is showing</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t shake the feeling that if Steve Vinoski, Steve Jones and Stuart Charlton had a drink together they&#8217;d actually agree on pretty much any distributed computing question that is worded in specific and unambiguous terms.</p>
<p>If you are not subscribed to their three blogs (and I don&#8217;t understand why you would not be if you have enough free time to read mine), here is a quick summary of the discussion so far:</p>
<p>Steve Vinoski writes <a href="http://steve.vinoski.net/blog/2008/07/01/convenience-over-correctness/">an article</a> critical of RPC approaches. Steve Jones <a href="http://service-architecture.blogspot.com/2008/07/convenience-over-correctness.html">doesn&#8217;t agree</a> and explains why in a review of the article. Steve Vinoski is <a href="http://steve.vinoski.net/blog/2008/07/07/soa-elitism/">not impressed</a> by the content of the review and even less by the tone. Stu <a href="http://www.stucharlton.com/blog/archives/000553.html">sides with</a> Steve Vinoski.</p>
<p>I think they all agree that, all other things equal, it is a good thing to facilitate the task of developers by providing them with intuitive interfaces. They also all agree that you can&#8217;t write distributed applications that shield the developer from the existence of a network. The key questions then boil down to:</p>
<ul>
<li>what degree of network awareness do you require from developers (or what degree do you award them, for a more positive spin)?</li>
<li>what are the most appropriate programming constructs to expose that &#8220;optimal&#8221; degree of network awareness to the developers?</li>
</ul>
<p>These questions don&#8217;t necessarily require words like &#8220;REST&#8221;, &#8220;RPC&#8221; and &#8220;JAXM&#8221; to be thrown around, other than merely as illustrative examples. In fact, the discussion so far seems to indicate that the questions are less likely to be resolved as long as these words are involved.</p>
<p>Once these questions are answered, we can compare the existing toolkits/frameworks (and yes, even architectural styles) to see which ones come closer to the ideal level of network-awareness and which ones present the most useful abstractions for that level. Or how each one can be improved to come closer to the sweetspot. Of course, there isn&#8217;t one level of network-awareness that is ideal for all cases, but my guess is that most enterprise applications are not too far apart on this.</p>
<p>[UPDATED 2008/7/27: Eric Newcomer explains it best. It's just about finding <a href="http://blogs.iona.com/newcomer/archives/000572.html">a useful level of abstraction</a>.]</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/1042' rel='bookmark' title='Permanent Link: Missing out on the OCCI fun'>Missing out on the OCCI fun</a></li>
<li><a href='http://stage.vambenepe.com/archives/1504' rel='bookmark' title='Permanent Link: Dear Cloud API, your fault line is showing'>Dear Cloud API, your fault line is showing</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/222/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gutting the SOAP processing model</title>
		<link>http://stage.vambenepe.com/archives/118</link>
		<comments>http://stage.vambenepe.com/archives/118#comments</comments>
		<pubDate>Fri, 13 Jul 2007 05:32:12 +0000</pubDate>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[SOAP processing model]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/archives/118</guid>
		<description><![CDATA[One thing I have constantly witnessed in the SOAP design work I have been involved in is the fear of headers. There are several aspects to this, and it&#8217;s very hard to sort out the causes and the consequences as they are now linked in a vicious cycle.
For one thing, headers in SOAP messages don&#8217;t [...]


Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/49' rel='bookmark' title='Permanent Link: EPR redefining the difference between SOAP body and SOAP header'>EPR redefining the difference between SOAP body and SOAP header</a></li>
<li><a href='http://stage.vambenepe.com/archives/114' rel='bookmark' title='Permanent Link: XMLFrag SOAP header'>XMLFrag SOAP header</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/74' rel='bookmark' title='Permanent Link: @wsa:type=&#8221;parameter&#8221; instead of &lt;wsa:CoverMyRearside/&gt;'>@wsa:type=&#8221;parameter&#8221; instead of &lt;wsa:CoverMyRearside/&gt;</a></li>
<li><a href='http://stage.vambenepe.com/archives/1042' rel='bookmark' title='Permanent Link: Missing out on the OCCI fun'>Missing out on the OCCI fun</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One thing I have constantly witnessed in the SOAP design work I have been involved in is the fear of headers. There are several aspects to this, and it&#8217;s very hard to sort out the causes and the consequences as they are now linked in a vicious cycle.</p>
<p>For one thing, headers in SOAP messages don&#8217;t map well to RPC and we all know SOAP&#8217;s history there. Even now, as people have learned that they&#8217;re supposed to say they are not doing RPC (&#8220;look, my WSDL says doc/literal therefore I am not doing RPC&#8221;), the code is still RPC-ish with the grand-children of the body being serialized into Java (or another language) objects and passed as arguments to an operation inside a machine-generated stub. No room for pesky headers.</p>
<p>In addition (and maybe because of this view), tools often bend over backward to prevent you from processing headers along with the rest of the message, requiring instead some handlers to be separately written and registered/configured in whatever way (usually poorly documented as people aren&#8217;t expected to do this) the SOAP stack requires.</p>
<p>And the circle goes on, with poor tooling support for headers being used to justify staying away from them in SOAP-based interfaces.</p>
<p>I wrote above that &#8220;headers in SOAP messages don&#8217;t map well to RPC&#8221; but the more accurate sentence is &#8220;headers that are not handled by the infrastructure don&#8217;t map well to RPC&#8221;. If the headers are generic enough to be processed by the SOAP stack before getting to the programmer, then the RPC paradigm can still apply. Halleluiah. Which is why there is no shortage of specs that define headers. But those are the specs written by the &#8220;big boys&#8221; of Web services, the same who build SOAP stacks. They trust themselves to create code in their stacks to handle WS-Addressing, WS-Security and WS-ReliableMessaging headers for the developers. Those headers are ok. But the little guys shouldn&#8217;t be trusted with headers. They&#8217;d poke their eyes out. Or, <a href="http://cafe.elharo.com/xml/north-and-south/">as Elliotte Rusty Harold recently wrote</a> (on a related topic, namely WS-* versus REST), &#8220;developers have to be told what to do and kept from getting their grubby little hands all over the network protocols because they can’t be trusted to make the right choices&#8221;. The difference is that Elliotte is blasting any use of WS-* while I am advocating a use of SOAP that gives developers full access to the network protocol. Which goes in the same direction but without closing the door on using WS-* specs when they actually help.</p>
<p>I don&#8217;t mean to keep banging on my IBM friends, but I&#8217;ve spent a lot of time developing specs with well respected IBM engineers who will say openly that headers should not contain &#8220;application information&#8221;, by which they mean that headers should be processed by the SOAP stack and not require the programmer to deal with them.</p>
<p>That sounds very kind, and certainly making life easy for programmers is good, but what it does is rob them of the single most useful feature in SOAP. Let&#8217;s take a step back and look at what SOAP is. If we charitably leave aside the parts that are lipstick on the SOAP-RPC pig (e.g. SOAP data model, SOAP encoding and other RPC features), we are left with:</p>
<ul>
<li>the SOAP processing model</li>
<li>the SOAP extensibility model</li>
<li>SOAP faults</li>
</ul>
<p>Of these three, the first two are all about headers. Loose the ability to define headers in your interface, you loose 2/3 of the benefits of SOAP (and maybe even more, I would argue that SOAP faults aren&#8217;t nearly as useful as the other two items in the list).</p>
<p>The SOAP processing model describes how headers can be processed by intermediaries and, most important of all, it clearly spells out how the mustUnderstand attribute works. So that everyone who processes a SOAP message knows (or should know) that a header with no such attribute (or where the attribute has a value of &#8220;false&#8221;) can be ignored if not recognized, while the message must not be processed if a non-understood header has this attribute set to &#8220;true&#8221;. It doesn&#8217;t sound like much, but it is huge in terms of reliably supporting features and extending an existing set of SOAP messages.</p>
<p>When they are deprived of this mechanism (or rather, scared away from using it), people who create SOAP interfaces end up re-specifying this very common behavior over and over by attaching it to parts of the body. But then it has to be understood and implemented correctly every time rather than leveraging a built-in feature of SOAP that any SOAP engine must (if compliance with the SOAP spec has any meaning) implement.</p>
<p>Case in point, the wsman:OptimizeEnumeration element in <a href="http://www.dmtf.org/standards/wsman">WS-Management</a>. The normal pattern for an enumeration (see <a href="http://www.w3.org/Submission/WS-Enumeration/">WS-Enumeration</a>) is to first send an Enumerate request to retrieve an enumeration context and then a series of Pull requests to get the data. In this approach, the minimum number of interactions to retrieve even a small enumeration set is 2 (one Enumerate and one Pull). The OptimizeEnumeration element was designed to allow one to request that the Enumerate call be also the first Pull so that we can save one interaction. Not a big deal if you are going to send 500 Pull messages to retrieve the data, but if the enumeration set is small enough to retrieve all the data in one or two Pull messages then you can optimize traffic by up to 50%.</p>
<p>WS-Management decided to do that with an extension element in the body rather than a SOAP header. The problem then is what happens when a WS-Enumeration implementation that doesn&#8217;t use the WS-Management additions gets that element. There is no general rule in SOAP about how to handle this. In this case, the WS-Enumeration specs says to ignore the extensions, but it only says so in the &#8220;notation conventions&#8221; section, and as a SHOULD, not a MUST.</p>
<p>Not surprisingly, some implementers made the wrong assumption on what the presence of wsman:OptimizeEnumeration means and as a result their code faults on receiving a message with this option, rather than ignoring it. Something that would likely not have happened had the SOAP processing model been used rather than re-specifying this behavior.</p>
<p>Using a header not only makes it clear when an extension can be ignored, it also provides, at no additional cost, the ability to specify when it should not be ignored. Rather than baking this into the spec as WS-Management tries to do (not very successfully), using headers allows a sender to decide based on his/her specific needs and capabilities whether support for this extension is a must or not in this specific instance. Usually, flexibility and interoperability tug in opposing directions, but using headers rather than body elements for protocol extensions improves both!</p>
<p>Two more comments about the use of headers in WS-Management:</p>
<ul>
<li>It shows that it&#8217;s not all IBM&#8217;s fault, because IBM had no involvement in the development of the WS-Management standard,</li>
<li>WS-Management is far from being the worst offender at under-using SOAP headers, since it makes good use of them in other places (which probably wouldn&#8217;t have been the case had the first bullet not been true). But not consistently enough.</li>
</ul>
<p>Now let&#8217;s look at <a href="http://schemas.xmlsoap.org/ws/2006/08/resourceTransfer/WS-ResourceTransfer.pdf">WS-ResourceTransfer</a> for another example. This too illustrates that those who ignore the SOAP processing model just end up re-inventing it in the body, but it also gives a beautiful illustration of the kind of compromises that come from design by committee (and I was part of this compromise so I am as guilty as the other authors).</p>
<p>WS-ResourceTransfer creates a set of extensions on top of the <a href="http://www.w3.org/Submission/WS-Transfer/">WS-Transfer</a> specification. The main one is the ability to retrieve only a portion of the document as opposed to the whole document. Defining this extension as a SOAP header (as WS-Management does it) leverages the SOAP processing model. Doing so means you don&#8217;t have to write any text in your spec about whether this header can be ignored or not, and the behavior can be specified clearly and interoperably by the sender, through the use of the mustUnderstand attribute. In some case (say if the underlying XML document is in fact an entire database with gigabytes of data) I definitely want the receiver to fault if it doesn&#8217;t understand that I only want a portion of the document, so I will set mustUnderstand to true. In other cases (if the subset is not much smaller than the entire document and I am willing to wad through the entire document to extract the relevant data if I have to) then I&#8217;ll set mustUnderstand to &#8220;false&#8221; so that if the receiver can&#8217;t honor the extension then I get the whole document instead of a fault.</p>
<p>But with WS-ResourceTransfer, we had to deal with the &#8220;headers should not contain application information&#8221; view of the world in which it is heresy to use headers for these extensions (why the portion of the document to retrieve is considered &#8220;application information&#8221; while addressing information is not is beyond my reach and frankly not a debate worth having because this whole dichotomy only makes sense in an RPC view of the world).</p>
<p>So, between the &#8220;this information must be in the body&#8221; camp and the &#8220;let&#8217;s leverage the SOAP processing model&#8221; camp (my view, as should be obvious by now), the only possible compromise was to do both, with a mustUnderstand header that just says &#8220;look in the body to find the extensions that you must follow&#8221;. So much for elegance and simplicity. And since that header applies to all the extensions, you have to make all of them mustUnderstand or none of them. For example, you can&#8217;t have a wsrt:Create message in which the wsmex:Metadata extension must be understood but the wsrt:Fragment extension can be ignored.</p>
<p>WS-Management and WS-ResourceTransfer share the characteristic of being designed as extensions to existing specifications. But even when creating a SOAP-based interaction from scratch, one benefits from using the SOAP processing model rather than re-inventing ways to express whether support for an option is required or not. I have seen several other examples (in interfaces that aren&#8217;t public like the two examples above) that also re-invent this very common behavior for no good reason. Simply because developers are scared of headers.</p>
<p>These examples illustrate a simple point. Most of the value in SOAP resides in how headers are used in the SOAP processing model and the SOAP extensibility model. Steering developers away from defining headers is robbing them of that value. Rather than thinking in terms of header and body, I prefer to think of them as header and tail.</p>


<p>Related posts:<ol><li><a href='http://stage.vambenepe.com/archives/49' rel='bookmark' title='Permanent Link: EPR redefining the difference between SOAP body and SOAP header'>EPR redefining the difference between SOAP body and SOAP header</a></li>
<li><a href='http://stage.vambenepe.com/archives/114' rel='bookmark' title='Permanent Link: XMLFrag SOAP header'>XMLFrag SOAP header</a></li>
<li><a href='http://stage.vambenepe.com/archives/308' rel='bookmark' title='Permanent Link: CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points'>CMIS, APP, Zen-SOAP and WS-KitchenSink: some data points</a></li>
<li><a href='http://stage.vambenepe.com/archives/225' rel='bookmark' title='Permanent Link: WS Resource Access at W3C: the good, the bad and the ugly'>WS Resource Access at W3C: the good, the bad and the ugly</a></li>
<li><a href='http://stage.vambenepe.com/archives/74' rel='bookmark' title='Permanent Link: @wsa:type=&#8221;parameter&#8221; instead of &lt;wsa:CoverMyRearside/&gt;'>@wsa:type=&#8221;parameter&#8221; instead of &lt;wsa:CoverMyRearside/&gt;</a></li>
<li><a href='http://stage.vambenepe.com/archives/1042' rel='bookmark' title='Permanent Link: Missing out on the OCCI fun'>Missing out on the OCCI fun</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/118/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.129 seconds -->
