<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Square peg, REST hole</title>
	<atom:link href="http://stage.vambenepe.com/archives/1300/feed" rel="self" type="application/rss+xml" />
	<link>http://stage.vambenepe.com/archives/1300</link>
	<description>William Vambenepe&#039;s stage</description>
	<lastBuildDate>Tue, 07 Feb 2012 23:33:47 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: William (@vambenepe on Twitter)</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-814</link>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
		<pubDate>Wed, 03 Mar 2010 17:53:45 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-814</guid>
		<description>On the versioning question, you&#039;ll want to read this &lt;a href=&quot;http://www.stucharlton.com/blog/archives/000589.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Versioning RESTful Web Resources - A Survey&quot;&lt;/a&gt; post by Stu.</description>
		<content:encoded><![CDATA[<p>On the versioning question, you&#8217;ll want to read this <a href="http://www.stucharlton.com/blog/archives/000589.html" rel="nofollow">&#8220;Versioning RESTful Web Resources &#8211; A Survey&#8221;</a> post by Stu.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-813</link>
		<dc:creator>Mike</dc:creator>
		<pubDate>Wed, 03 Mar 2010 15:12:24 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-813</guid>
		<description>JJ: &quot;It seems that there is a disconnect. You seem to not understand (kind of) the problem that I am referencing. I am talking about versioning the business logic behind a RESTful call (GET, POST, PUT, DELETE), not the resources themselves.&quot;

If clients are driven by hypermedia, and interacting/exchanging representations by means of discovery (i.e. the system conforms to the hypermedia constraint/HATEOAS). Why on earth would the business logic behind the interface be of any meaningful concern to the client?

With all due respect, you seem to not understand The Solution.</description>
		<content:encoded><![CDATA[<p>JJ: &#8220;It seems that there is a disconnect. You seem to not understand (kind of) the problem that I am referencing. I am talking about versioning the business logic behind a RESTful call (GET, POST, PUT, DELETE), not the resources themselves.&#8221;</p>
<p>If clients are driven by hypermedia, and interacting/exchanging representations by means of discovery (i.e. the system conforms to the hypermedia constraint/HATEOAS). Why on earth would the business logic behind the interface be of any meaningful concern to the client?</p>
<p>With all due respect, you seem to not understand The Solution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: William Vambenepe &#8212; Two versions of a protocol is one too many</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-812</link>
		<dc:creator>William Vambenepe &#8212; Two versions of a protocol is one too many</dc:creator>
		<pubDate>Tue, 02 Mar 2010 07:14:31 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-812</guid>
		<description>[...] [Pedantic disclaimer: I use the term &quot;REST&quot; in this post the way it is often (incorrectly) used, to mean pretty much anything that uses HTTP without a SOAP wrapper. The technical issues are a topic for other posts.] [...] </description>
		<content:encoded><![CDATA[<p>[...] [Pedantic disclaimer: I use the term &quot;REST&quot; in this post the way it is often (incorrectly) used, to mean pretty much anything that uses HTTP without a SOAP wrapper. The technical issues are a topic for other posts.] [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: This Week in REST – Volume 5 (Feb 22 2010 – Feb 28 2010) &#171; This week in REST</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-811</link>
		<dc:creator>This Week in REST – Volume 5 (Feb 22 2010 – Feb 28 2010) &#171; This week in REST</dc:creator>
		<pubDate>Mon, 01 Mar 2010 08:32:53 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-811</guid>
		<description>[...] difference between links in a representation and use of the Link header. (by Guilherme Silveira) Square peg, REST hole &#8211; &#8220;Some interaction patterns just don’t lend themselves well to the REST approach. [...] </description>
		<content:encoded><![CDATA[<p>[...] difference between links in a representation and use of the Link header. (by Guilherme Silveira) Square peg, REST hole &#8211; &#8220;Some interaction patterns just don’t lend themselves well to the REST approach. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Jacques Dubray</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-810</link>
		<dc:creator>Jean-Jacques Dubray</dc:creator>
		<pubDate>Fri, 26 Feb 2010 19:54:00 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-810</guid>
		<description>Here is another discussion between Subbu and Pete Williams on the topic: http://www.subbu.org/blog/2009/12/media-types-and-plumbing

&gt;&gt; another indirection of resources
How do you achieve that when identity and access are coupled?

JJ-</description>
		<content:encoded><![CDATA[<p>Here is another discussion between Subbu and Pete Williams on the topic: <a href="http://www.subbu.org/blog/2009/12/media-types-and-plumbing" rel="nofollow">http://www.subbu.org/blog/2009/12/media-types-and-plumbing</a></p>
<p>&gt;&gt; another indirection of resources<br />
How do you achieve that when identity and access are coupled?</p>
<p>JJ-</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dong Liu</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-809</link>
		<dc:creator>Dong Liu</dc:creator>
		<pubDate>Fri, 26 Feb 2010 17:22:16 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-809</guid>
		<description>Google gives these urls under &quot;rest versioning&quot;
http://barelyenough.org/blog/2008/05/versioning-rest-web-services/
http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/

I think versioning is just another indirection of resources if I know what I am talking about.</description>
		<content:encoded><![CDATA[<p>Google gives these urls under &#8220;rest versioning&#8221;<br />
<a href="http://barelyenough.org/blog/2008/05/versioning-rest-web-services/" rel="nofollow">http://barelyenough.org/blog/2008/05/versioning-rest-web-services/</a><br />
<a href="http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/" rel="nofollow">http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/</a></p>
<p>I think versioning is just another indirection of resources if I know what I am talking about.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stu</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-808</link>
		<dc:creator>Stu</dc:creator>
		<pubDate>Fri, 26 Feb 2010 16:24:57 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-808</guid>
		<description>OK, for the sake of William&#039;s sanity, I&#039;ll take this to my blog.   Later this weekend.</description>
		<content:encoded><![CDATA[<p>OK, for the sake of William&#8217;s sanity, I&#8217;ll take this to my blog.   Later this weekend.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Jacques Dubray</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-807</link>
		<dc:creator>Jean-Jacques Dubray</dc:creator>
		<pubDate>Fri, 26 Feb 2010 14:58:46 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-807</guid>
		<description>Stu:

you are funny...
&gt;&gt; they actually thought you were interested in making progress on improving REST
I don&#039;t know many people in the industry who are more committed than I am to making progress. I have contributed countless ideas in the areas of SOA, BPM and MDE. I am not even committed to any vendor, hence to any particular technology.

Who really cares about making progress? Is it the people that answer laconically or is it people that face the questions? That actually provide answers? So again, I repeat my question. How do you achieve Forwards Compatible Versioning mechanisms in REST? WS-* does it. It is essential to SOA and Composite solutions. It is essential to scaling the number of consumer of a service.

Look at your answer:
&gt;&gt; They are completely applicable to a RESTful architecture!
No they are not, REST couples access and identity, REST has the wrong boundary and does not even have the concept of a &quot;service&quot;. A contract is essential to the versioning scheme. So, I am sorry say Stu -I also have a lot of respect for you- but here, on that critical question, you are no better than a Paul Downey or so many other RESTafarians that don&#039;t know what they are talking about.

So you can say whatever you want about me, but at the end of the day you are not giving answers to key questions. You are just asking like so many others &quot;trust me, take this powerful medicine, and you&#039;ll be cured...&quot;. That does not work with me. This is not what I call progress. 

This is regression. Look at what happened in the last 3 years: you guys have successfully CRUDed the industry. Dave (Microsoft) Chappell claims SOA is a failure except for &quot;Data Services&quot;, even Umit, a co-author of the J2EE spec cornered herself to CRUD from an RIA client. What a regression ! what a step back ! what a terrible direction for large scale service consumption and for reuse. What a terrible factoring, even in the 60s people were doing better.

All I am asking is no hand waving -that costs too much to our industry, it kills projects and companies- just tell me how you achieve Forwards Compatible Versioning in a RESTful way (i.e. changing the contract of the service provider without impacting existing consumer). The answer does not fit in one paragraph. Point me to an article, a thesis, a blog post, or tell me you don&#039;t know.

My claim -this is just a claim- is that it is not possible due to REST itself.</description>
		<content:encoded><![CDATA[<p>Stu:</p>
<p>you are funny&#8230;<br />
&gt;&gt; they actually thought you were interested in making progress on improving REST<br />
I don&#8217;t know many people in the industry who are more committed than I am to making progress. I have contributed countless ideas in the areas of SOA, BPM and MDE. I am not even committed to any vendor, hence to any particular technology.</p>
<p>Who really cares about making progress? Is it the people that answer laconically or is it people that face the questions? That actually provide answers? So again, I repeat my question. How do you achieve Forwards Compatible Versioning mechanisms in REST? WS-* does it. It is essential to SOA and Composite solutions. It is essential to scaling the number of consumer of a service.</p>
<p>Look at your answer:<br />
&gt;&gt; They are completely applicable to a RESTful architecture!<br />
No they are not, REST couples access and identity, REST has the wrong boundary and does not even have the concept of a &#8220;service&#8221;. A contract is essential to the versioning scheme. So, I am sorry say Stu -I also have a lot of respect for you- but here, on that critical question, you are no better than a Paul Downey or so many other RESTafarians that don&#8217;t know what they are talking about.</p>
<p>So you can say whatever you want about me, but at the end of the day you are not giving answers to key questions. You are just asking like so many others &#8220;trust me, take this powerful medicine, and you&#8217;ll be cured&#8230;&#8221;. That does not work with me. This is not what I call progress. </p>
<p>This is regression. Look at what happened in the last 3 years: you guys have successfully CRUDed the industry. Dave (Microsoft) Chappell claims SOA is a failure except for &#8220;Data Services&#8221;, even Umit, a co-author of the J2EE spec cornered herself to CRUD from an RIA client. What a regression ! what a step back ! what a terrible direction for large scale service consumption and for reuse. What a terrible factoring, even in the 60s people were doing better.</p>
<p>All I am asking is no hand waving -that costs too much to our industry, it kills projects and companies- just tell me how you achieve Forwards Compatible Versioning in a RESTful way (i.e. changing the contract of the service provider without impacting existing consumer). The answer does not fit in one paragraph. Point me to an article, a thesis, a blog post, or tell me you don&#8217;t know.</p>
<p>My claim -this is just a claim- is that it is not possible due to REST itself.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stu</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-806</link>
		<dc:creator>Stu</dc:creator>
		<pubDate>Fri, 26 Feb 2010 07:33:45 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-806</guid>
		<description>JJ - I&#039;ve said it before, years ago, and I&#039;ll repeat it here, since this seems to be an annual ritual.   I actually agree with some of your work on object lifecycles and bi-directional interfaces.   But people would listen to you and debate with you a lot more if they actually thought you were interested in making progress on improving REST, rather than questioning people&#039;s character, motivation, or politics.  Or repeating the same arguments over and over despite repeated attempts to provide evidence, logical argument, or counter example.   

You keep referring, for years now, to David Orchard&#039;s writings on versioning as a great set of guidelines.   Yet his writings were a draft finding while he was on the W3C TAG, which are... the maintainers and authors of the Web Architecture (http://www.w3.org/TR/webarch/) , and whose versioning finding was a revised look at some old notes on extensible languages by TBL and Dan Connolly back in the late 90&#039;s.... in support of the Web Architecture.     They are completely applicable to a RESTful architecture!    There are also URI-based versioning schemes, which have their own set of tradeoffs vs. doing it at a language level.    But, from what I read, you reject this approach outright.     So I&#039;m not sure what there is to discuss, you made your mind up years ago, and you continually pile on disincentive to constructive debate.</description>
		<content:encoded><![CDATA[<p>JJ &#8211; I&#8217;ve said it before, years ago, and I&#8217;ll repeat it here, since this seems to be an annual ritual.   I actually agree with some of your work on object lifecycles and bi-directional interfaces.   But people would listen to you and debate with you a lot more if they actually thought you were interested in making progress on improving REST, rather than questioning people&#8217;s character, motivation, or politics.  Or repeating the same arguments over and over despite repeated attempts to provide evidence, logical argument, or counter example.   </p>
<p>You keep referring, for years now, to David Orchard&#8217;s writings on versioning as a great set of guidelines.   Yet his writings were a draft finding while he was on the W3C TAG, which are&#8230; the maintainers and authors of the Web Architecture (<a href="http://www.w3.org/TR/webarch/" rel="nofollow">http://www.w3.org/TR/webarch/</a>) , and whose versioning finding was a revised look at some old notes on extensible languages by TBL and Dan Connolly back in the late 90&#8242;s&#8230;. in support of the Web Architecture.     They are completely applicable to a RESTful architecture!    There are also URI-based versioning schemes, which have their own set of tradeoffs vs. doing it at a language level.    But, from what I read, you reject this approach outright.     So I&#8217;m not sure what there is to discuss, you made your mind up years ago, and you continually pile on disincentive to constructive debate.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Jacques Dubray</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-805</link>
		<dc:creator>Jean-Jacques Dubray</dc:creator>
		<pubDate>Fri, 26 Feb 2010 04:43:25 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-805</guid>
		<description>Umit:

thank you for providing this reference. This is certainly one of the better work I have seen on REST. I have done a search on &quot;version&quot; to make sure I was not missing anything and to the best of my knowledge, the thesis only speaks about version instances, not version of the &quot;business logic&quot; (or whatever name people want to use). So I&#039;ll stand by what I say. REST is unable to deliver a versioning strategy which is for me a non starter unless your community of service consumers is so dedicated that they will update their clients for every change you make (e.g. Google, Yahoo, Amazon...). In the enterprise you need a forwards compatible versioning strategy because projects don&#039;t have the budget to update service consumers for every changes of the service implementation or contract. Operationally, the enterprise doesn&#039;t have budgets to operates 15 versions of the same service either. This is why versioning is so important to SOA and this is one of the major contributions of WS-* (and Dave Orchard -thanks Dave).

Stu:

It is disappointing that we still having pretty much the same discussions that we had 3 years ago. If REST was what you guys were claiming then, we would not be having these discussions...So I&#039;ll let everyone make their own conclusions. I don&#039;t expect much from the RESTafarians, this is just a question of character.
 
I am glad to see that more and more people don&#039;t see it as a &quot;silver bullet&quot; (by far). If we could have had &quot;normal&quot; discussions then we would have saved 3 years to our industry and probably avoid RESTless disasters like Microsoft Astoria or OMG moments like Tim&#039;s Slow REST. But whatever, ego and politics are more important than reason, this is just the way things are, not just in our Industry. I stand behind pretty much everything I wrote (loose coupling, actions/events, bi-directional interfaces, assemblies...). It is clear today that a lot of the people that make all these claims don&#039;t have much experience building information systems. The latest CRUD frameworks like Spring Roo are the continuing illustration of this disconnect between the &quot;pundits&quot; and the real-world. That would need to change, but I don&#039;t have much hope.

just my $20 (inflation adjusted).

JJ-</description>
		<content:encoded><![CDATA[<p>Umit:</p>
<p>thank you for providing this reference. This is certainly one of the better work I have seen on REST. I have done a search on &#8220;version&#8221; to make sure I was not missing anything and to the best of my knowledge, the thesis only speaks about version instances, not version of the &#8220;business logic&#8221; (or whatever name people want to use). So I&#8217;ll stand by what I say. REST is unable to deliver a versioning strategy which is for me a non starter unless your community of service consumers is so dedicated that they will update their clients for every change you make (e.g. Google, Yahoo, Amazon&#8230;). In the enterprise you need a forwards compatible versioning strategy because projects don&#8217;t have the budget to update service consumers for every changes of the service implementation or contract. Operationally, the enterprise doesn&#8217;t have budgets to operates 15 versions of the same service either. This is why versioning is so important to SOA and this is one of the major contributions of WS-* (and Dave Orchard -thanks Dave).</p>
<p>Stu:</p>
<p>It is disappointing that we still having pretty much the same discussions that we had 3 years ago. If REST was what you guys were claiming then, we would not be having these discussions&#8230;So I&#8217;ll let everyone make their own conclusions. I don&#8217;t expect much from the RESTafarians, this is just a question of character.</p>
<p>I am glad to see that more and more people don&#8217;t see it as a &#8220;silver bullet&#8221; (by far). If we could have had &#8220;normal&#8221; discussions then we would have saved 3 years to our industry and probably avoid RESTless disasters like Microsoft Astoria or OMG moments like Tim&#8217;s Slow REST. But whatever, ego and politics are more important than reason, this is just the way things are, not just in our Industry. I stand behind pretty much everything I wrote (loose coupling, actions/events, bi-directional interfaces, assemblies&#8230;). It is clear today that a lot of the people that make all these claims don&#8217;t have much experience building information systems. The latest CRUD frameworks like Spring Roo are the continuing illustration of this disconnect between the &#8220;pundits&#8221; and the real-world. That would need to change, but I don&#8217;t have much hope.</p>
<p>just my $20 (inflation adjusted).</p>
<p>JJ-</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stu</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-804</link>
		<dc:creator>Stu</dc:creator>
		<pubDate>Fri, 26 Feb 2010 01:26:07 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-804</guid>
		<description>William (#18),

WRT &quot;polluting the resource model&quot;, I think the root of this concern is how REST (hypertext, really) combines control and content into the same plane, whereas many other architectures separate the control plane out.   For example,   The tradeoff when you do this, is that the content itself directs the control plane (aka. &quot;data-oriented&quot; rather than &quot;process-oriented&quot;).   When we&#039;re so used to having data in its own world and process in its own world, it can be strange to see them brought back together.

WRT modelling actions in progress, it seems to me that evolution of long-running operations vs. short-running operations is a fairly universal tradeoff across architectures.   I&#039;m not aware of an architecture style that isolates my domain model from this sort of thing so that I can freely switch between short &amp; long-lived with no impact to the model itself ... unless I *assume* everything is long-lived and provide some mechanism to hide details for the short-lived case.    This is the message-oriented middleware (MOM or JMS) way, in essence.    It is built around the long-running case,  even though I *could* just configure a transient, in-memory, non-persistent queue and make it look to my programmers as a regular procedure call.     

The fundamental problem is whether the action itself is a datum worth tracking for a period of time or not.   If not, then it&#039;s not in my data model, if so, then it is.   The tradeoff with REST is that the data model is visible, with MOM it&#039;s hidden in the bowels of the message server.   There were plenty of similar debates over the use of MOM vs. a database for persistent queueing.

WRT query, looking back, there are two ways to interpret the word &quot;RESTful&quot;.    One is &quot;approved by the REST gods&quot;, the other is &quot;relaxing some of the constraints, usually of the uniform interface&quot;.   I meant the latter, of course. ;-)    A query interface with a query language is not really taking advantage of one of the RESTful constraints (hypermedia describing what&#039;s possible), as it may require the agent to have a priori knowledge of the query language and data model.   The best you can do is have your media type include well-known hyperlinks to identify the query language and the data model that the interface is fronting.    

The point was &quot;that&#039;s OK!&quot;, but just be aware of the tradeoff involved, that you&#039;re putting a bigger burden on the client than if you just described in a more verbose hypertext format &quot;here are the fields&quot;, &quot;here are the operands&quot;, &quot;here&#039;s how to add predicates&quot;, etc.   There is a different sort of coupling involved.    An analogy would be providing a full Query API , ala Oracle TopLink or Apple&#039;s Core Data, to a developer vs. giving a programmer a JDBC Statement and DatabaseMetaData object and asking them to go to town with SQL.

WRT Collection:   Yes.   A controller endpoint, in general, isn&#039;t even a tradeoff!   Define it in WSDL 2.0 if you want ;) So long as important resources that it can manipulate have URIs that you can do things with independently of the controller.  

WRT DELETE:   Hopefully HTTPbis cleans this up.   RFC 2646 claims client can&#039;t assume *anything* that the server might do with the resource beyond the scope of the DELETE request.    (i.e. &quot;The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully.&quot;)    This pushes the buck to the media type to constrain what DELETE implies on one of its hyperlinks.</description>
		<content:encoded><![CDATA[<p>William (#18),</p>
<p>WRT &#8220;polluting the resource model&#8221;, I think the root of this concern is how REST (hypertext, really) combines control and content into the same plane, whereas many other architectures separate the control plane out.   For example,   The tradeoff when you do this, is that the content itself directs the control plane (aka. &#8220;data-oriented&#8221; rather than &#8220;process-oriented&#8221;).   When we&#8217;re so used to having data in its own world and process in its own world, it can be strange to see them brought back together.</p>
<p>WRT modelling actions in progress, it seems to me that evolution of long-running operations vs. short-running operations is a fairly universal tradeoff across architectures.   I&#8217;m not aware of an architecture style that isolates my domain model from this sort of thing so that I can freely switch between short &amp; long-lived with no impact to the model itself &#8230; unless I *assume* everything is long-lived and provide some mechanism to hide details for the short-lived case.    This is the message-oriented middleware (MOM or JMS) way, in essence.    It is built around the long-running case,  even though I *could* just configure a transient, in-memory, non-persistent queue and make it look to my programmers as a regular procedure call.     </p>
<p>The fundamental problem is whether the action itself is a datum worth tracking for a period of time or not.   If not, then it&#8217;s not in my data model, if so, then it is.   The tradeoff with REST is that the data model is visible, with MOM it&#8217;s hidden in the bowels of the message server.   There were plenty of similar debates over the use of MOM vs. a database for persistent queueing.</p>
<p>WRT query, looking back, there are two ways to interpret the word &#8220;RESTful&#8221;.    One is &#8220;approved by the REST gods&#8221;, the other is &#8220;relaxing some of the constraints, usually of the uniform interface&#8221;.   I meant the latter, of course. <img src='http://stage.vambenepe.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />     A query interface with a query language is not really taking advantage of one of the RESTful constraints (hypermedia describing what&#8217;s possible), as it may require the agent to have a priori knowledge of the query language and data model.   The best you can do is have your media type include well-known hyperlinks to identify the query language and the data model that the interface is fronting.    </p>
<p>The point was &#8220;that&#8217;s OK!&#8221;, but just be aware of the tradeoff involved, that you&#8217;re putting a bigger burden on the client than if you just described in a more verbose hypertext format &#8220;here are the fields&#8221;, &#8220;here are the operands&#8221;, &#8220;here&#8217;s how to add predicates&#8221;, etc.   There is a different sort of coupling involved.    An analogy would be providing a full Query API , ala Oracle TopLink or Apple&#8217;s Core Data, to a developer vs. giving a programmer a JDBC Statement and DatabaseMetaData object and asking them to go to town with SQL.</p>
<p>WRT Collection:   Yes.   A controller endpoint, in general, isn&#8217;t even a tradeoff!   Define it in WSDL 2.0 if you want <img src='http://stage.vambenepe.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  So long as important resources that it can manipulate have URIs that you can do things with independently of the controller.  </p>
<p>WRT DELETE:   Hopefully HTTPbis cleans this up.   RFC 2646 claims client can&#8217;t assume *anything* that the server might do with the resource beyond the scope of the DELETE request.    (i.e. &#8220;The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully.&#8221;)    This pushes the buck to the media type to constrain what DELETE implies on one of its hyperlinks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eric Lee Green</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-803</link>
		<dc:creator>Eric Lee Green</dc:creator>
		<pubDate>Fri, 26 Feb 2010 01:05:09 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-803</guid>
		<description>Indeed, Silver Bullet Syndrome is rampant. It&#039;s like the language and OS wars. Should you use Linux or Windows or Solaris? Python or Perl or C or C++ or Java? In the end, a pragmatist has to say, &quot;use what *best fits your problem set*&quot;. Same deal with web standards. REST is useful for a large set of problems. It requires more work than it&#039;s worth for another set of problems trivially solved by some other XML-over-HTTP or etc. protocol. There&#039;s no reason to believe that all problem sets have a single Silver Bullet that solves them, and REST is no more a silver bullet than is Linux or Python or whatever.</description>
		<content:encoded><![CDATA[<p>Indeed, Silver Bullet Syndrome is rampant. It&#8217;s like the language and OS wars. Should you use Linux or Windows or Solaris? Python or Perl or C or C++ or Java? In the end, a pragmatist has to say, &#8220;use what *best fits your problem set*&#8221;. Same deal with web standards. REST is useful for a large set of problems. It requires more work than it&#8217;s worth for another set of problems trivially solved by some other XML-over-HTTP or etc. protocol. There&#8217;s no reason to believe that all problem sets have a single Silver Bullet that solves them, and REST is no more a silver bullet than is Linux or Python or whatever.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rick Bullotta</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-802</link>
		<dc:creator>Rick Bullotta</dc:creator>
		<pubDate>Fri, 26 Feb 2010 00:27:14 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-802</guid>
		<description>The real failing is the obsession that many technologist have with the silver bullet approach.  REST-ful interfaces work for a great many use cases, and not so much for others (RPC, events, querying being examples discussed above).  WS-*, well, let&#039;s not go there.  We&#039;ve chosen to implement a somewhat purist REST-ful pattern for durable &quot;things&quot; for which such an approach makes sense, and other XML-over-HTTP, binary-over-HTTP, and JSON-over-HTTP techniques where they make more sense.

There are similar religious debates occuring on the data storage world - NOSQL, SQL, KV stores, graph databases, columnar stores, and so on.  The reality is that a well crafted architecture can blend many of these technologies.  I&#039;ve found it just as important to consider the &quot;consumability&quot; of your functionality as it is to consider the plumbing, with an eye on understandable semantics, self-documentation, extensibility, and support for a broad range of human/software &quot;consumers&quot;.  Just my $0.02, after taxes.</description>
		<content:encoded><![CDATA[<p>The real failing is the obsession that many technologist have with the silver bullet approach.  REST-ful interfaces work for a great many use cases, and not so much for others (RPC, events, querying being examples discussed above).  WS-*, well, let&#8217;s not go there.  We&#8217;ve chosen to implement a somewhat purist REST-ful pattern for durable &#8220;things&#8221; for which such an approach makes sense, and other XML-over-HTTP, binary-over-HTTP, and JSON-over-HTTP techniques where they make more sense.</p>
<p>There are similar religious debates occuring on the data storage world &#8211; NOSQL, SQL, KV stores, graph databases, columnar stores, and so on.  The reality is that a well crafted architecture can blend many of these technologies.  I&#8217;ve found it just as important to consider the &#8220;consumability&#8221; of your functionality as it is to consider the plumbing, with an eye on understandable semantics, self-documentation, extensibility, and support for a broad range of human/software &#8220;consumers&#8221;.  Just my $0.02, after taxes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Umit Yalcinalp</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-801</link>
		<dc:creator>Umit Yalcinalp</dc:creator>
		<pubDate>Fri, 26 Feb 2010 00:23:08 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-801</guid>
		<description>Here are the pointers. 

-- Jan&#039;s thesis: http://www.scribd.com/doc/2218300/WebData-Defnition-of-a-Middleware-for-Exposing-and-Accessing-Objectoriented-Domain-Models-as-Web-Resources

-- Our presentation on RIA. This does not provide the details on the protocol, but puts you into the frame of reference why/where we were using RESTful services. That is linked to my profile in linked in and probably most of you have seen it already. 

http://tinyurl.com/ycfna97

JJ, we did not address business logic behind resource&#039;s and their versioning. I do not claim that this approach addresses that issue or it is tied to the protocol. However, I would imagine that as business logic if it was tied to a resource were to change on the backend, it would be &quot;logical&quot; to expose a different version of the resource. 

Why are REST discussions are always RESTless.</description>
		<content:encoded><![CDATA[<p>Here are the pointers. </p>
<p>&#8211; Jan&#8217;s thesis: <a href="http://www.scribd.com/doc/2218300/WebData-Defnition-of-a-Middleware-for-Exposing-and-Accessing-Objectoriented-Domain-Models-as-Web-Resources" rel="nofollow">http://www.scribd.com/doc/2218300/WebData-Defnition-of-a-Middleware-for-Exposing-and-Accessing-Objectoriented-Domain-Models-as-Web-Resources</a></p>
<p>&#8211; Our presentation on RIA. This does not provide the details on the protocol, but puts you into the frame of reference why/where we were using RESTful services. That is linked to my profile in linked in and probably most of you have seen it already. </p>
<p><a href="http://tinyurl.com/ycfna97" rel="nofollow">http://tinyurl.com/ycfna97</a></p>
<p>JJ, we did not address business logic behind resource&#8217;s and their versioning. I do not claim that this approach addresses that issue or it is tied to the protocol. However, I would imagine that as business logic if it was tied to a resource were to change on the backend, it would be &#8220;logical&#8221; to expose a different version of the resource. </p>
<p>Why are REST discussions are always RESTless.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Nottingham</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-800</link>
		<dc:creator>Mark Nottingham</dc:creator>
		<pubDate>Fri, 26 Feb 2010 00:20:54 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-800</guid>
		<description>I&#039;m with Rudd-O (#6) on this one.

You guys better be careful -- it&#039;s starting to smell like rest-discuss in here...</description>
		<content:encoded><![CDATA[<p>I&#8217;m with Rudd-O (#6) on this one.</p>
<p>You guys better be careful &#8212; it&#8217;s starting to smell like rest-discuss in here&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Downey</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-799</link>
		<dc:creator>Paul Downey</dc:creator>
		<pubDate>Thu, 25 Feb 2010 21:54:52 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-799</guid>
		<description>Nice roll-up, William!

One point: my understanding of DELETE from RFC2616 is the intention is to remove the resource, or make it inaccessible. I find it useful to consider an intermediary such as a proxy who on seeing a DELETE would discard any cached version of a representation of a resource, but would still honor a subsequent GET to the URI. So whilst it&#039;s possible for the server to continue returning zombie copies of the DELETEd resource, it&#039;s not really what DELETE means, and my suggestion is to POST/PUT a change of state to &quot;deleted&quot; and keep a record of the resource is usually what most people expect. 

I do find it hard to talk about &quot;business logic&quot; because for me that&#039;s invariably something of an oxymoron. It&#039;s a phrase, which along with the notion of machine readable contracts I get by these days without hearing or needing use. As for compatible evolution, three simple rules have served us all very well over the years:

1) have sensible defaults for missing values for backwards compatibility.
2) design formats with ignorable extra values for forwards compatibility.
3) if you change the meaning of stuff, or the processing in a way the client doesn&#039;t expect, then it&#039;s a breaking change, so use a different interface.

kthxbai!</description>
		<content:encoded><![CDATA[<p>Nice roll-up, William!</p>
<p>One point: my understanding of DELETE from RFC2616 is the intention is to remove the resource, or make it inaccessible. I find it useful to consider an intermediary such as a proxy who on seeing a DELETE would discard any cached version of a representation of a resource, but would still honor a subsequent GET to the URI. So whilst it&#8217;s possible for the server to continue returning zombie copies of the DELETEd resource, it&#8217;s not really what DELETE means, and my suggestion is to POST/PUT a change of state to &#8220;deleted&#8221; and keep a record of the resource is usually what most people expect. </p>
<p>I do find it hard to talk about &#8220;business logic&#8221; because for me that&#8217;s invariably something of an oxymoron. It&#8217;s a phrase, which along with the notion of machine readable contracts I get by these days without hearing or needing use. As for compatible evolution, three simple rules have served us all very well over the years:</p>
<p>1) have sensible defaults for missing values for backwards compatibility.<br />
2) design formats with ignorable extra values for forwards compatibility.<br />
3) if you change the meaning of stuff, or the processing in a way the client doesn&#8217;t expect, then it&#8217;s a breaking change, so use a different interface.</p>
<p>kthxbai!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: William (@vambenepe on Twitter)</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-798</link>
		<dc:creator>William (@vambenepe on Twitter)</dc:creator>
		<pubDate>Thu, 25 Feb 2010 21:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-798</guid>
		<description>Hi Stu (I am responding to comment #18),

WRT to &quot;polluting the resource model with artifacts that have little to do with the business at hand&quot; I indeed think this is something we should strive to avoid. It doesn&#039;t mean that I am not open to compromise. Allowing some amount of abstraction leakage might be the pragmatic choice. We do this all the time, as you point out, because perfect abstraction layering (or something close to it) usually comes at a huge cost. But we have to realize that there is also a cost to allowing this pollution/contamination/leakage. So I feel justified in listing this as a drawback (not a deal-breaker).

WRT to modeling actions in progress, I don&#039;t have a problem with modeling a server in the process of being instantiated, or an application in the process of being deployed, as these are representations of a true aspect of the domain I am modeling. My issue is with the idea that any operation that may take some time to execute (e.g. a long-running query) fits the same model. To me, there is a difference between actions in progress that represent the realities of the domain and actions in progress that represent the technical limitations of my infrastructure. What if tomorrow I upgrade from SQL Server to Oracle DB and my queries become blazingly fast? ;-) Am I then stuck w/ model elements that are vestiges of my old infrastructure? I&#039;d rather not have those in the model, so I only have to deal w/ model changes when the entities in the domain I manage actually change, not when my management infrastructure changes.

For the same reason, I have no problem w/ modeling a &quot;subscription&quot; but I want to keep any info about how the delivery takes place out of the model. That should just be, from the model perspective, a self-described data element (e.g. a URL w/ whatever appropriate scheme).

WRT to query, you and I have had this debate before, in the comments for &lt;a href=&quot;http://stage.vambenepe.com/archives/894&quot; rel=&quot;nofollow&quot;&gt;this post&lt;/a&gt;. There, you agree with my statement that

&quot;[A query] can return results that open a world of RESTful requests to you, but the query invocation itself is not RESTful. And that’s OK&quot;.

You add that &quot;[A query] could generate hypermedia docs, even if the query invocation itself isn’t RESTful. That’s OK, and a great example of this in the SemWeb world would be a SPARQL endpoint, something that really does tunnel a query interface through HTTP&quot;. 

So what are we arguing about?

I am not trying to play &quot;gotcha&quot;, just showing that I really value and remember the great comments deposited on this blog... :-)

WRT to enumeration, my fear (maybe unjustified) is that it&#039;s now the REST approach that is flirting w/ over-engineering (e.g. links for enumeration within a resource rather than for linking actual resources as in RFC 5005). Versus the simpler URL-parameter approach that Paul suggests but is less RESTful than MNot&#039;s RFC.

Collection: what resource do I send my &quot;reboot instances 1, 2, 5 and 8&quot; message to? Do I need to model a &quot;bag&quot; resource that contains them all? Do I create a resource specifically for these instances and this operation? Do I keep around such large &quot;bag&quot; resources and pass the ids of the server to reboot as a parameter? Compare this to the simpler task of sending a &quot;reboot instances 1, 2, 5 and 8&quot; to a shadowy, not-part-of-the-resource-model controller endpoint that can do things for me. In effect, for some operations I want to be able to address explicit resources in a RESTful way, but for some others (query, collection operations) I want to be able to send them &quot;in the Cloud&quot; to be handled by some invisible infrastructure controller. And of course there should be a tie between these two sets of invocations (e.g. the use of hypermedia in the responses). I should probably do a full blog entry on this dichotomy.

WRT to DELETE I think this becomes again a bit complex and variable. Paul Downey, for example, seemed to think in his reply post that DELETE indeed means you only return 410 Gone on it (but you could still stuff in some info in the 410 reply). It might be easier to provide a simple way to access deleted resources than to finesse the per-media-type semantics of DELETE. Though on that one I could actually be convinced to find a way to make DELETE work as we want.</description>
		<content:encoded><![CDATA[<p>Hi Stu (I am responding to comment #18),</p>
<p>WRT to &#8220;polluting the resource model with artifacts that have little to do with the business at hand&#8221; I indeed think this is something we should strive to avoid. It doesn&#8217;t mean that I am not open to compromise. Allowing some amount of abstraction leakage might be the pragmatic choice. We do this all the time, as you point out, because perfect abstraction layering (or something close to it) usually comes at a huge cost. But we have to realize that there is also a cost to allowing this pollution/contamination/leakage. So I feel justified in listing this as a drawback (not a deal-breaker).</p>
<p>WRT to modeling actions in progress, I don&#8217;t have a problem with modeling a server in the process of being instantiated, or an application in the process of being deployed, as these are representations of a true aspect of the domain I am modeling. My issue is with the idea that any operation that may take some time to execute (e.g. a long-running query) fits the same model. To me, there is a difference between actions in progress that represent the realities of the domain and actions in progress that represent the technical limitations of my infrastructure. What if tomorrow I upgrade from SQL Server to Oracle DB and my queries become blazingly fast? <img src='http://stage.vambenepe.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Am I then stuck w/ model elements that are vestiges of my old infrastructure? I&#8217;d rather not have those in the model, so I only have to deal w/ model changes when the entities in the domain I manage actually change, not when my management infrastructure changes.</p>
<p>For the same reason, I have no problem w/ modeling a &#8220;subscription&#8221; but I want to keep any info about how the delivery takes place out of the model. That should just be, from the model perspective, a self-described data element (e.g. a URL w/ whatever appropriate scheme).</p>
<p>WRT to query, you and I have had this debate before, in the comments for <a href="http://stage.vambenepe.com/archives/894" rel="nofollow">this post</a>. There, you agree with my statement that</p>
<p>&#8220;[A query] can return results that open a world of RESTful requests to you, but the query invocation itself is not RESTful. And that’s OK&#8221;.</p>
<p>You add that &#8220;[A query] could generate hypermedia docs, even if the query invocation itself isn’t RESTful. That’s OK, and a great example of this in the SemWeb world would be a SPARQL endpoint, something that really does tunnel a query interface through HTTP&#8221;. </p>
<p>So what are we arguing about?</p>
<p>I am not trying to play &#8220;gotcha&#8221;, just showing that I really value and remember the great comments deposited on this blog&#8230; <img src='http://stage.vambenepe.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>WRT to enumeration, my fear (maybe unjustified) is that it&#8217;s now the REST approach that is flirting w/ over-engineering (e.g. links for enumeration within a resource rather than for linking actual resources as in RFC 5005). Versus the simpler URL-parameter approach that Paul suggests but is less RESTful than MNot&#8217;s RFC.</p>
<p>Collection: what resource do I send my &#8220;reboot instances 1, 2, 5 and 8&#8243; message to? Do I need to model a &#8220;bag&#8221; resource that contains them all? Do I create a resource specifically for these instances and this operation? Do I keep around such large &#8220;bag&#8221; resources and pass the ids of the server to reboot as a parameter? Compare this to the simpler task of sending a &#8220;reboot instances 1, 2, 5 and 8&#8243; to a shadowy, not-part-of-the-resource-model controller endpoint that can do things for me. In effect, for some operations I want to be able to address explicit resources in a RESTful way, but for some others (query, collection operations) I want to be able to send them &#8220;in the Cloud&#8221; to be handled by some invisible infrastructure controller. And of course there should be a tie between these two sets of invocations (e.g. the use of hypermedia in the responses). I should probably do a full blog entry on this dichotomy.</p>
<p>WRT to DELETE I think this becomes again a bit complex and variable. Paul Downey, for example, seemed to think in his reply post that DELETE indeed means you only return 410 Gone on it (but you could still stuff in some info in the 410 reply). It might be easier to provide a simple way to access deleted resources than to finesse the per-media-type semantics of DELETE. Though on that one I could actually be convinced to find a way to make DELETE work as we want.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Jacques Dubray</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-797</link>
		<dc:creator>Jean-Jacques Dubray</dc:creator>
		<pubDate>Thu, 25 Feb 2010 19:57:49 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-797</guid>
		<description>Paul:

it seems that there is a disconnect. You seem to not understand (kind of) the problem that I am referencing. I am talking about versioning the business logic behind a RESTful call (GET, POST, PUT, DELETE), not the resources themselves. I understand that versioning resources has been solved decades ago. Unless you believe that REST is directly wired to the metal, you have lots of code behind a POST or a PUT for instance. How do you version that code? 

I said &quot;kind of&quot; earlier because you explain &quot;Compatible evolution in practice is far simpler on the Web, in particular using HTML and JSON, where there is no notion of a shared model or formal contract&quot;, yet you seem to not understand what &quot;compatible evolution&quot; means. How can you be &quot;compatible&quot; without a &quot;contract&quot;. You just &quot;hope&quot; for compatibility? how can you test, certify, assert compability? without an agreed upon contract and rules for compatibility (described in the paper that I referenced earlier).

So again, I would highly recommend you take all the &quot;emotion&quot; out of the question and look at the problems in their entirety while avoiding the laconic &quot;XXX solves your problem&quot;. 

WS-* had the merit of kind of supporting loose coupling and versioning which are both impossible to achieve in REST. We are throwing away tremendous amounts of value simply because some people don&#039;t know how to use XML or XSD, let alone WSDL. That is sad. 

JJ-</description>
		<content:encoded><![CDATA[<p>Paul:</p>
<p>it seems that there is a disconnect. You seem to not understand (kind of) the problem that I am referencing. I am talking about versioning the business logic behind a RESTful call (GET, POST, PUT, DELETE), not the resources themselves. I understand that versioning resources has been solved decades ago. Unless you believe that REST is directly wired to the metal, you have lots of code behind a POST or a PUT for instance. How do you version that code? </p>
<p>I said &#8220;kind of&#8221; earlier because you explain &#8220;Compatible evolution in practice is far simpler on the Web, in particular using HTML and JSON, where there is no notion of a shared model or formal contract&#8221;, yet you seem to not understand what &#8220;compatible evolution&#8221; means. How can you be &#8220;compatible&#8221; without a &#8220;contract&#8221;. You just &#8220;hope&#8221; for compatibility? how can you test, certify, assert compability? without an agreed upon contract and rules for compatibility (described in the paper that I referenced earlier).</p>
<p>So again, I would highly recommend you take all the &#8220;emotion&#8221; out of the question and look at the problems in their entirety while avoiding the laconic &#8220;XXX solves your problem&#8221;. </p>
<p>WS-* had the merit of kind of supporting loose coupling and versioning which are both impossible to achieve in REST. We are throwing away tremendous amounts of value simply because some people don&#8217;t know how to use XML or XSD, let alone WSDL. That is sad. </p>
<p>JJ-</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Jacques Dubray</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-796</link>
		<dc:creator>Jean-Jacques Dubray</dc:creator>
		<pubDate>Thu, 25 Feb 2010 19:47:05 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-796</guid>
		<description>Stu:

hi, I am neither anti-REST nor a Pundit. I am not a brand, nor wish to have &quot;followers&quot;, I don&#039;t use my name as an argument. I use arguments and if I am wrong, I&#039;ll be the first one to admit that I am wrong.

I am not anti-REST, I am anti &quot;everything is better , solved, wonderful, and filled with puppies world&quot;. I fully support approaches such as the one from Subbu who simply says, if you are going to use HTTP in one way or another, here is how you should use it. I fully support Roy&#039;s views on REST and REST as the foundation for the Web. Now when people claim that REST is &quot;middleware&quot; or worse, REST is a &quot;programming model&quot; (that comes with its own QL, asynchrony, eventing mechanisms, ***)  far more superior to anything that already exist that&#039;s where I ... (fill in the blanks).

Now when someone makes a claim such as &quot;versioning in REST [can be achieved with] WebDAV/svn or most any DVCS is pretty RESTful compared with the impossibility of evolving SOAP messages&quot; and that someone offers no substantiation, I feel I have the right to call him both stupid and ignorant. He/She has always the choice to do like Umit did to substantiate his or her claims.

Our industry has been made so sick by its punditocracy (of which I am not part of, and will never be part of) that we have now the characteristics of the pharmaceutical industry (without the FDA and double-blind processes). The software industry is now in the business of inventing &quot;remedies&quot; to all the diseases it created by &quot;following&quot; without &quot;questioning&quot;. You get the picture, right? can you imagine what the pharmaceutical industry would look like if any one could claim whatever they wanted without &quot;questioning&quot;.

So I repeat, there is no documented versioning mechanism in REST despite what the punditocrats claim laconically. Even what Umit has written doesn&#039;t qualify as an answer, though she provides a lot of details about the context in which she made the claims. I believe her context is way too limited to define a general versioning strategy (as most of the business logic is in the RIA client, which is an anti-SOA pattern and a common problem of siloed solutions).

The RESTafarian punditocrats could have at least the decency to revisit their claims from 2007 about &quot;uniform interface&quot; for instance (in the light of RESTfulie) and come forward to express how wrong they were about claim an interface to a resource is uniform. For me, until versioning is solved (and I don&#039;t see how), for me the (other) REST (not the one of Roy) is a non starter in the Enterprise/IT. It is, so far, just a collection of recipes to use HTTP here and there to solve tactical problems. I am still waiting for the examples of enterprise solutions built in a 100% RESTful way (ERP, CRM, PLM...).</description>
		<content:encoded><![CDATA[<p>Stu:</p>
<p>hi, I am neither anti-REST nor a Pundit. I am not a brand, nor wish to have &#8220;followers&#8221;, I don&#8217;t use my name as an argument. I use arguments and if I am wrong, I&#8217;ll be the first one to admit that I am wrong.</p>
<p>I am not anti-REST, I am anti &#8220;everything is better , solved, wonderful, and filled with puppies world&#8221;. I fully support approaches such as the one from Subbu who simply says, if you are going to use HTTP in one way or another, here is how you should use it. I fully support Roy&#8217;s views on REST and REST as the foundation for the Web. Now when people claim that REST is &#8220;middleware&#8221; or worse, REST is a &#8220;programming model&#8221; (that comes with its own QL, asynchrony, eventing mechanisms, ***)  far more superior to anything that already exist that&#8217;s where I &#8230; (fill in the blanks).</p>
<p>Now when someone makes a claim such as &#8220;versioning in REST [can be achieved with] WebDAV/svn or most any DVCS is pretty RESTful compared with the impossibility of evolving SOAP messages&#8221; and that someone offers no substantiation, I feel I have the right to call him both stupid and ignorant. He/She has always the choice to do like Umit did to substantiate his or her claims.</p>
<p>Our industry has been made so sick by its punditocracy (of which I am not part of, and will never be part of) that we have now the characteristics of the pharmaceutical industry (without the FDA and double-blind processes). The software industry is now in the business of inventing &#8220;remedies&#8221; to all the diseases it created by &#8220;following&#8221; without &#8220;questioning&#8221;. You get the picture, right? can you imagine what the pharmaceutical industry would look like if any one could claim whatever they wanted without &#8220;questioning&#8221;.</p>
<p>So I repeat, there is no documented versioning mechanism in REST despite what the punditocrats claim laconically. Even what Umit has written doesn&#8217;t qualify as an answer, though she provides a lot of details about the context in which she made the claims. I believe her context is way too limited to define a general versioning strategy (as most of the business logic is in the RIA client, which is an anti-SOA pattern and a common problem of siloed solutions).</p>
<p>The RESTafarian punditocrats could have at least the decency to revisit their claims from 2007 about &#8220;uniform interface&#8221; for instance (in the light of RESTfulie) and come forward to express how wrong they were about claim an interface to a resource is uniform. For me, until versioning is solved (and I don&#8217;t see how), for me the (other) REST (not the one of Roy) is a non starter in the Enterprise/IT. It is, so far, just a collection of recipes to use HTTP here and there to solve tactical problems. I am still waiting for the examples of enterprise solutions built in a 100% RESTful way (ERP, CRM, PLM&#8230;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stu</title>
		<link>http://stage.vambenepe.com/archives/1300#comment-795</link>
		<dc:creator>Stu</dc:creator>
		<pubDate>Thu, 25 Feb 2010 16:01:07 +0000</pubDate>
		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1300#comment-795</guid>
		<description>First, JJ has long been an anti-REST pundit, whom I retain respect for.   He has many good points that are worth considering, and some hopelessly bad ones.   But, as I&#039;ve said years ago (when I stopped debating him), it&#039;s very hard to productively debate due to his repeated stooping to personal attacks, calling people stupid, ignorant, etc.

Second, William, when you say &quot;polluting the resource model with artifacts that have little to do with the business at hand&quot;, I find it curious why you would think the resource model has to be 1:1 mapped with the business at hand?   In what technology has that *ever* occurred?   Physical RDBMS design?   SOAP APIs?  The closest *might* be pure object-oriented domain models persisted via an ODBMS or a sophisticated O/R mapper.  How many of those have you seen in the wild?

On particular topics:

Long-lived operations:   Yes, an action in progress resource makes sense, as it would in a website.   Or in a database with a jobs table.  Or an EPR for a subscription to an event sink in WS-Eventing.

Query:  There are two styles of query here.  One is where the query options are described in machine-readable hypertext and POSTed back, as how we do queries today with a Form.   The other is where the query language required is indicated in hypertext, along with a description of the data model, and the agent POSTs the query language back, which is how, say SPARQL works.   I&#039;m not sure where the impracticality comes in.

Events:   This problem exists with any eventing mechanism out there, so I&#039;m not sure what the problem is here.  

Enumeration:   This is not the problem of GET.  That would be like saying it&#039;s WS-Transfer&#039;s problem, and we don&#039;t need WS-Enumeration.    This is the problem of a media type that can handle enumeration.   RFC 5005 is one solution.   OpenSearch has another.   

Filtering:   Design a model that allows you to filter results through a query?

Collections:   I&#039;m curious.   Why can&#039;t you do exactly what you described?   Under what RESTful tenant?

The afterlife:   DELETE expresses intent.   It doesn&#039;t mean it has to go away, (e.g. 410 Gone) afterwards.   You can DELETE something, then GET it, and something might still be there for posterity.    How this works is up to how the media type you&#039;re using defines the semantics of DELETE on the particular hyperlink the agent wants to DELETE.

This whole post has a flavour of &quot;REST doesn&#039;t wash my socks&quot;, and of course it doesn&#039;t, it&#039;s like saying &quot;pub/sub eventing doesn&#039;t wash my socks&quot;.     You are holding WebArch to some kind of abstract standard that you don&#039;t even hold WS-* to, meaning it&#039;s supposed to solve all my problems without requiring me to engineer solutions.

The problem with REST, and here&#039;s where I agree with JJ, it&#039;s that it&#039;s not this &quot;everything is better , solved, wonderful, and filled with puppies&quot; world that some make it out to be.     A sign that you&#039;re dealing with one of those foks is their instance on using PUT for everything and avoiding POST, because, you know, that would require more work in defining a media type that uses POST appropriate.       There&#039;s a lot of work to be done, and a lot of standard media types that would be very helpful the machine agents that are.... missing.   Atompub and its extensions are only the beginning, and it&#039;s a bit frightening that it&#039;s taken this long to make so little progress.     But that&#039;s mainly because people are building local solutions to their problems, can kind of sick of standards organizations.</description>
		<content:encoded><![CDATA[<p>First, JJ has long been an anti-REST pundit, whom I retain respect for.   He has many good points that are worth considering, and some hopelessly bad ones.   But, as I&#8217;ve said years ago (when I stopped debating him), it&#8217;s very hard to productively debate due to his repeated stooping to personal attacks, calling people stupid, ignorant, etc.</p>
<p>Second, William, when you say &#8220;polluting the resource model with artifacts that have little to do with the business at hand&#8221;, I find it curious why you would think the resource model has to be 1:1 mapped with the business at hand?   In what technology has that *ever* occurred?   Physical RDBMS design?   SOAP APIs?  The closest *might* be pure object-oriented domain models persisted via an ODBMS or a sophisticated O/R mapper.  How many of those have you seen in the wild?</p>
<p>On particular topics:</p>
<p>Long-lived operations:   Yes, an action in progress resource makes sense, as it would in a website.   Or in a database with a jobs table.  Or an EPR for a subscription to an event sink in WS-Eventing.</p>
<p>Query:  There are two styles of query here.  One is where the query options are described in machine-readable hypertext and POSTed back, as how we do queries today with a Form.   The other is where the query language required is indicated in hypertext, along with a description of the data model, and the agent POSTs the query language back, which is how, say SPARQL works.   I&#8217;m not sure where the impracticality comes in.</p>
<p>Events:   This problem exists with any eventing mechanism out there, so I&#8217;m not sure what the problem is here.  </p>
<p>Enumeration:   This is not the problem of GET.  That would be like saying it&#8217;s WS-Transfer&#8217;s problem, and we don&#8217;t need WS-Enumeration.    This is the problem of a media type that can handle enumeration.   RFC 5005 is one solution.   OpenSearch has another.   </p>
<p>Filtering:   Design a model that allows you to filter results through a query?</p>
<p>Collections:   I&#8217;m curious.   Why can&#8217;t you do exactly what you described?   Under what RESTful tenant?</p>
<p>The afterlife:   DELETE expresses intent.   It doesn&#8217;t mean it has to go away, (e.g. 410 Gone) afterwards.   You can DELETE something, then GET it, and something might still be there for posterity.    How this works is up to how the media type you&#8217;re using defines the semantics of DELETE on the particular hyperlink the agent wants to DELETE.</p>
<p>This whole post has a flavour of &#8220;REST doesn&#8217;t wash my socks&#8221;, and of course it doesn&#8217;t, it&#8217;s like saying &#8220;pub/sub eventing doesn&#8217;t wash my socks&#8221;.     You are holding WebArch to some kind of abstract standard that you don&#8217;t even hold WS-* to, meaning it&#8217;s supposed to solve all my problems without requiring me to engineer solutions.</p>
<p>The problem with REST, and here&#8217;s where I agree with JJ, it&#8217;s that it&#8217;s not this &#8220;everything is better , solved, wonderful, and filled with puppies&#8221; world that some make it out to be.     A sign that you&#8217;re dealing with one of those foks is their instance on using PUT for everything and avoiding POST, because, you know, that would require more work in defining a media type that uses POST appropriate.       There&#8217;s a lot of work to be done, and a lot of standard media types that would be very helpful the machine agents that are&#8230;. missing.   Atompub and its extensions are only the beginning, and it&#8217;s a bit frightening that it&#8217;s taken this long to make so little progress.     But that&#8217;s mainly because people are building local solutions to their problems, can kind of sick of standards organizations.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

