<?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"
	>
<channel>
	<title>Comments on: Versioning REST Web Services (Tricks and Tips)</title>
	<atom:link href="http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/</link>
	<description></description>
	<pubDate>Thu, 04 Dec 2008 05:20:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
		<item>
		<title>By: Peter Williams</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-52490</link>
		<dc:creator>Peter Williams</dc:creator>
		<pubDate>Wed, 21 May 2008 15:10:24 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-52490</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;it does not seem to be a stretch to suggest adding a new qualifier:  “text/plain; v=1.0″, etc. The absence of a version parameter can be treated as equivalent to asking for the most recent version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The idea of using a version media type parameter is probably workable.  However, I disagree with your idea regarding handling the absence of such a parameter.  The default value for such a parameter would have to be to be "most compatible" version available.  In most cases that means the oldest version.&lt;/p&gt;

&lt;p&gt;Consider the following scenario.  You deploy some service.  A third party writes an application that acts a consumer of the service, but they do not include an explicit version parameter.  A few months after they have finished work and moved on to something else you deploy a new version of the service.  Now, suddenly, this external application stops working for no particularly obvious reason.&lt;/p&gt;

&lt;p&gt;One core principle of versioning must be that any request that works in one version of the API will, in all future versions of the API, either a) continue to work in a compatible way, or b) fail with an explicit version compatibility error.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
<p>it does not seem to be a stretch to suggest adding a new qualifier:  “text/plain; v=1.0″, etc. The absence of a version parameter can be treated as equivalent to asking for the most recent version.</p>
</blockquote>
<p>The idea of using a version media type parameter is probably workable.  However, I disagree with your idea regarding handling the absence of such a parameter.  The default value for such a parameter would have to be to be &#8220;most compatible&#8221; version available.  In most cases that means the oldest version.</p>
<p>Consider the following scenario.  You deploy some service.  A third party writes an application that acts a consumer of the service, but they do not include an explicit version parameter.  A few months after they have finished work and moved on to something else you deploy a new version of the service.  Now, suddenly, this external application stops working for no particularly obvious reason.</p>
<p>One core principle of versioning must be that any request that works in one version of the API will, in all future versions of the API, either a) continue to work in a compatible way, or b) fail with an explicit version compatibility error.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Amundsen</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-52406</link>
		<dc:creator>Mike Amundsen</dc:creator>
		<pubDate>Wed, 21 May 2008 02:58:24 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-52406</guid>
		<description>&lt;p&gt;About version-controlled MIME types and standard types such as Atom:&lt;/p&gt;

&lt;p&gt;It seems that standard MIME types can be used along with additional 'q-type' values ('v' values?). Since the idea here is to create new media types anyway (application/vnd....) it does not seem to be a stretch to suggest adding a new qualifier: "text/plain; v=1.0", etc. The absence of a version parameter can be treated as equivalent to asking for the most recent version.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>About version-controlled MIME types and standard types such as Atom:</p>
<p>It seems that standard MIME types can be used along with additional &#8216;q-type&#8217; values (&#8217;v&#8217; values?). Since the idea here is to create new media types anyway (application/vnd&#8230;.) it does not seem to be a stretch to suggest adding a new qualifier: &#8220;text/plain; v=1.0&#8243;, etc. The absence of a version parameter can be treated as equivalent to asking for the most recent version.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: codeoncotton &#187; Blog Archive &#187; Versioning REST web services</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-52110</link>
		<dc:creator>codeoncotton &#187; Blog Archive &#187; Versioning REST web services</dc:creator>
		<pubDate>Mon, 19 May 2008 18:25:11 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-52110</guid>
		<description>&lt;p&gt;[...] the way: He also outlines the downsides of his approach and provides some  ways to migrate the negative [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[&#8230;] the way: He also outlines the downsides of his approach and provides some  ways to migrate the negative [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Williams</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-52105</link>
		<dc:creator>Peter Williams</dc:creator>
		<pubDate>Mon, 19 May 2008 15:19:37 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-52105</guid>
		<description>&lt;p&gt;Frank,&lt;/p&gt;

&lt;p&gt;I do have some thought on how this versioning approach relates to standard formats.  However, I have not worked in an environment where I have needed to do that so my thoughts are not fully formed yet.&lt;/p&gt;

&lt;p&gt;I will try to write those up and publish them soon.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Frank,</p>
<p>I do have some thought on how this versioning approach relates to standard formats.  However, I have not worked in an environment where I have needed to do that so my thoughts are not fully formed yet.</p>
<p>I will try to write those up and publish them soon.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frank Alic</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-52101</link>
		<dc:creator>Frank Alic</dc:creator>
		<pubDate>Mon, 19 May 2008 11:38:11 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-52101</guid>
		<description>&lt;p&gt;Hey Peter! Your approach sounds interesting and makes sense to me. But how about version-controlled content negotiation when it comes to the point where you want to combine APP and REST? APP has its own content type. Wouldn't the version-controlled content type break the clients? I'm aware that your proposal is focused on the ressource in the common sense asuming, one has defined his own exchange protocol. How about using a custom Version header to rely on a specific API version? In the context of the APP and REST scenario this makes more sense to me.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hey Peter! Your approach sounds interesting and makes sense to me. But how about version-controlled content negotiation when it comes to the point where you want to combine APP and REST? APP has its own content type. Wouldn&#8217;t the version-controlled content type break the clients? I&#8217;m aware that your proposal is focused on the ressource in the common sense asuming, one has defined his own exchange protocol. How about using a custom Version header to rely on a specific API version? In the context of the APP and REST scenario this makes more sense to me.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Versioning RESTful Web Services &#171; Ka anyi kwuo okwu</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-52011</link>
		<dc:creator>Versioning RESTful Web Services &#171; Ka anyi kwuo okwu</dc:creator>
		<pubDate>Sun, 18 May 2008 22:58:59 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-52011</guid>
		<description>&lt;p&gt;[...] RESTful Web&#160;Services  18 05 2008   Peter Lacey posts here and here on how to version RESTful Web Services using custom MIME media types and I find this very [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[&#8230;] RESTful Web&nbsp;Services  18 05 2008   Peter Lacey posts here and here on how to version RESTful Web Services using custom MIME media types and I find this very [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Williams</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-51811</link>
		<dc:creator>Peter Williams</dc:creator>
		<pubDate>Sat, 17 May 2008 18:19:44 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-51811</guid>
		<description>&lt;p&gt;Dan,&lt;/p&gt;

&lt;p&gt;I am not fond of the putting the version information in a parameter on the MIME type.  (MIME type parameters are not specific to HTTP 1.1, but rather are a general feature of MIME media types.)  The use of a parameter implies to me that the server can provide a reasonable default value for that parameter. I suppose you can do this for versions but it leads to some unfortunate outcomes.&lt;/p&gt;

&lt;p&gt;For example, if I support 3 different versions of some format and I
get a request for 'application/vnd.myformat' what version should I
return?  From a safety stand point I would have to return the oldest
(i.e. least preferred) version because there might be clients out
there that only support that version of the API.  Unfortunately, that
is probably the MIME type that will be used when newcomers are
exploring the interface.  So you are forced to encourage the use of
the least preferred API available.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Dan,</p>
<p>I am not fond of the putting the version information in a parameter on the MIME type.  (MIME type parameters are not specific to HTTP 1.1, but rather are a general feature of MIME media types.)  The use of a parameter implies to me that the server can provide a reasonable default value for that parameter. I suppose you can do this for versions but it leads to some unfortunate outcomes.</p>
<p>For example, if I support 3 different versions of some format and I<br />
get a request for &#8216;application/vnd.myformat&#8217; what version should I<br />
return?  From a safety stand point I would have to return the oldest<br />
(i.e. least preferred) version because there might be clients out<br />
there that only support that version of the API.  Unfortunately, that<br />
is probably the MIME type that will be used when newcomers are<br />
exploring the interface.  So you are forced to encourage the use of<br />
the least preferred API available.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dan Kubb</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-51806</link>
		<dc:creator>Dan Kubb</dc:creator>
		<pubDate>Sat, 17 May 2008 16:26:32 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-51806</guid>
		<description>&lt;p&gt;Peter, in RFC 2616 section 14.1 there's a reference to a content-type versioning system built into Content Negotiation.  Note how some of the examples show a "level" parameter added to the media range examples.  Specifically it shows that you can specify different versions of HTML to be higher precedence than others.&lt;/p&gt;

&lt;p&gt;This same parameter can be seen in other RFCs and some Apache documentation too.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Peter, in RFC 2616 section 14.1 there&#8217;s a reference to a content-type versioning system built into Content Negotiation.  Note how some of the examples show a &#8220;level&#8221; parameter added to the media range examples.  Specifically it shows that you can specify different versions of HTML to be higher precedence than others.</p>
<p>This same parameter can be seen in other RFCs and some Apache documentation too.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Subbu Allamaraju</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services-tricks-and-tips/#comment-51342</link>
		<dc:creator>Subbu Allamaraju</dc:creator>
		<pubDate>Thu, 15 May 2008 18:52:03 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=336#comment-51342</guid>
		<description>&lt;p&gt;Very interesting idea.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Very interesting idea.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
