<?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: Versioning REST Web Services</title>
	<atom:link href="http://barelyenough.org/blog/2008/05/versioning-rest-web-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/</link>
	<description>… and there is much to be learned</description>
	<lastBuildDate>Thu, 02 Feb 2012 14:46:19 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Jason Heiss</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-2/#comment-85794</link>
		<dc:creator>Jason Heiss</dc:creator>
		<pubDate>Thu, 02 Feb 2012 14:46:19 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85794</guid>
		<description>Peter,
In your comments both here and on the &quot;response to Jean&quot; post you indicate that you don&#039;t think an accept-extension like &quot;level&quot; or &quot;version&quot; is appropriate for indicating incompatible (i.e. major version) changes.  However my reading of the examples in the HTTP spec and related historical documents leads me to believe that was exactly the intended purpose.  All usage of the &quot;level&quot; extension historically seems to have been in relation to the &quot;text/html&quot; MIME type, and specifically to indicate major versions of the HTML spec (HTML 2, HTML 3, etc.)  This page (http://www.w3.org/MarkUp/table-deployment) dated 1995 clearly shows usage of a &quot;text/html; level=3&quot; media type to indicate to HTML 2 only clients that they won&#039;t understand the markup and should not attempt to do so.

That said, this is largely an academic exercise.  In the absence of specific definition it seems like media types must be treated as opaque strings, so &quot;application/vnd.mycompany.myapp-v2+xml&quot; and &quot;application/vnd.mycompany.myapp+xml; level=2&quot; both serve the same purpose.  Since there seems to be consensus that the former is the better format to use I&#039;ll be going that way, I just don&#039;t see any reason that the later format is any less valid.  And in fact using the &quot;level&quot; extension for minor versioning seems counter to historical precedent, but (IMHO) acceptable and harmless if used on a custom MIME time.</description>
		<content:encoded><![CDATA[<p>Peter,<br />
In your comments both here and on the &#8220;response to Jean&#8221; post you indicate that you don&#8217;t think an accept-extension like &#8220;level&#8221; or &#8220;version&#8221; is appropriate for indicating incompatible (i.e. major version) changes.  However my reading of the examples in the HTTP spec and related historical documents leads me to believe that was exactly the intended purpose.  All usage of the &#8220;level&#8221; extension historically seems to have been in relation to the &#8220;text/html&#8221; MIME type, and specifically to indicate major versions of the HTML spec (HTML 2, HTML 3, etc.)  This page (<a href="http://www.w3.org/MarkUp/table-deployment" rel="nofollow">http://www.w3.org/MarkUp/table-deployment</a>) dated 1995 clearly shows usage of a &#8220;text/html; level=3&#8243; media type to indicate to HTML 2 only clients that they won&#8217;t understand the markup and should not attempt to do so.</p>
<p>That said, this is largely an academic exercise.  In the absence of specific definition it seems like media types must be treated as opaque strings, so &#8220;application/vnd.mycompany.myapp-v2+xml&#8221; and &#8220;application/vnd.mycompany.myapp+xml; level=2&#8243; both serve the same purpose.  Since there seems to be consensus that the former is the better format to use I&#8217;ll be going that way, I just don&#8217;t see any reason that the later format is any less valid.  And in fact using the &#8220;level&#8221; extension for minor versioning seems counter to historical precedent, but (IMHO) acceptable and harmless if used on a custom MIME time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Williams</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-2/#comment-85785</link>
		<dc:creator>Peter Williams</dc:creator>
		<pubDate>Tue, 27 Dec 2011 16:46:15 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85785</guid>
		<description>Michael,
It absolutely applies to the content type of POST and PUT requests. Just as the accept header field of GET requests allows the server to give the client the particular representation it requires, the content-type header field of POST and PUT requests gives the server the information it needs to correctly interpret the data set by the client.</description>
		<content:encoded><![CDATA[<p>Michael,<br />
It absolutely applies to the content type of POST and PUT requests. Just as the accept header field of GET requests allows the server to give the client the particular representation it requires, the content-type header field of POST and PUT requests gives the server the information it needs to correctly interpret the data set by the client.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-2/#comment-85778</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Fri, 23 Dec 2011 02:08:13 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85778</guid>
		<description>You talk about using the ACCEPT header - does the same apply to the Content-type of a POST/PUT? Tha API consists of both input AND output.</description>
		<content:encoded><![CDATA[<p>You talk about using the ACCEPT header &#8211; does the same apply to the Content-type of a POST/PUT? Tha API consists of both input AND output.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Williams</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-2/#comment-85765</link>
		<dc:creator>Peter Williams</dc:creator>
		<pubDate>Thu, 08 Dec 2011 15:36:00 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85765</guid>
		<description>The important characteristic of PUTs is that they must be idempotent, not that they do not allow partial updates. It is very common for the body of PUT request to not include every property of the resource. For example, last updated timestamp fields.

I this case the put would be idempotent. The older client neither knows nor cares about this new property and so it does not really care how it&#039;s values are handled. Either of the ways you mentioned to handle the missing property value would be ok.

Caches will take care of themselves. Caches don&#039;t use the body of the PUT. They merely invalidate the previously cached representations for that resource. That means the next GET request for that resource will go to the server and it&#039;s response will be cached. Assuming the new property is always returned the caches will keep up to date.</description>
		<content:encoded><![CDATA[<p>The important characteristic of PUTs is that they must be idempotent, not that they do not allow partial updates. It is very common for the body of PUT request to not include every property of the resource. For example, last updated timestamp fields.</p>
<p>I this case the put would be idempotent. The older client neither knows nor cares about this new property and so it does not really care how it&#8217;s values are handled. Either of the ways you mentioned to handle the missing property value would be ok.</p>
<p>Caches will take care of themselves. Caches don&#8217;t use the body of the PUT. They merely invalidate the previously cached representations for that resource. That means the next GET request for that resource will go to the server and it&#8217;s response will be cached. Assuming the new property is always returned the caches will keep up to date.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Purbrick</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-2/#comment-85764</link>
		<dc:creator>Jim Purbrick</dc:creator>
		<pubDate>Thu, 08 Dec 2011 14:34:54 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85764</guid>
		<description>How does this work with read/write APIs? If I add an attribute as a non-breaking change and so don&#039;t change the media type, old clients will continue to PUT and POST data missing the new  attribute. I can fix this on the server by setting the attribute to a default value, or leaving the current value of the attribute unchanged, but does it cause problems with caches, which may replace their cached version with the partial update? Isn&#039;t this effectively the same problem as doing partial updates with PUT?</description>
		<content:encoded><![CDATA[<p>How does this work with read/write APIs? If I add an attribute as a non-breaking change and so don&#8217;t change the media type, old clients will continue to PUT and POST data missing the new  attribute. I can fix this on the server by setting the attribute to a default value, or leaving the current value of the attribute unchanged, but does it cause problems with caches, which may replace their cached version with the partial update? Isn&#8217;t this effectively the same problem as doing partial updates with PUT?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Link dump for August 31st &#124; The Queue Incorporated</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-2/#comment-85729</link>
		<dc:creator>Link dump for August 31st &#124; The Queue Incorporated</dc:creator>
		<pubDate>Thu, 01 Sep 2011 04:03:15 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85729</guid>
		<description>[...] Peter Williams &#8211; Versioning REST Web Services &#8211; an old article but a nice alternative for handling API versioning [...]</description>
		<content:encoded><![CDATA[<p>[...] Peter Williams &#8211; Versioning REST Web Services &#8211; an old article but a nice alternative for handling API versioning [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: links for 2011-07-11 &#171; Blarney Fellow</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-1/#comment-85712</link>
		<dc:creator>links for 2011-07-11 &#171; Blarney Fellow</dc:creator>
		<pubDate>Tue, 12 Jul 2011 00:10:33 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85712</guid>
		<description>[...] Peter Williams &#8211; Versioning REST Web Services (tags: rest api http) [...]</description>
		<content:encoded><![CDATA[<p>[...] Peter Williams &#8211; Versioning REST Web Services (tags: rest api http) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: A few great things to read on REST (technical) &#124; jemery.com</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-1/#comment-85707</link>
		<dc:creator>A few great things to read on REST (technical) &#124; jemery.com</dc:creator>
		<pubDate>Tue, 28 Jun 2011 21:21:17 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85707</guid>
		<description>[...] VERSIONING REST WEB SERVICES [...]</description>
		<content:encoded><![CDATA[<p>[...] VERSIONING REST WEB SERVICES [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Using Mementos for Rest Data &#171; My Weblog</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-1/#comment-85684</link>
		<dc:creator>Using Mementos for Rest Data &#171; My Weblog</dc:creator>
		<pubDate>Wed, 23 Mar 2011 23:27:32 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85684</guid>
		<description>[...] impact of this versioning of the data. There are some discussions about this by Peter Williams, Versioning Rest Web Services, and Ganesh Prasad asks, Does Rest Need [...]</description>
		<content:encoded><![CDATA[<p>[...] impact of this versioning of the data. There are some discussions about this by Peter Williams, Versioning Rest Web Services, and Ganesh Prasad asks, Does Rest Need [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Quora</title>
		<link>http://barelyenough.org/blog/2008/05/versioning-rest-web-services/comment-page-1/#comment-85680</link>
		<dc:creator>Quora</dc:creator>
		<pubDate>Fri, 18 Mar 2011 13:00:33 +0000</pubDate>
		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/?p=335#comment-85680</guid>
		<description>&lt;strong&gt;Should a RESTful web service API be versioned?...&lt;/strong&gt;

No, I do not believe it is necessary to &quot;version&quot; a REST api. It is certainly possible to build RESTful apis and manage breaking changes without ever including version numbers in the URI.    By far the most important thing to ensure is that clients a...</description>
		<content:encoded><![CDATA[<p><strong>Should a RESTful web service API be versioned?&#8230;</strong></p>
<p>No, I do not believe it is necessary to &#8220;version&#8221; a REST api. It is certainly possible to build RESTful apis and manage breaking changes without ever including version numbers in the URI.    By far the most important thing to ensure is that clients a&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

