<?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: Your Web Service Might Not Be RESTful If&#8230;</title>
	<atom:link href="http://www.theamazingrando.com/blog/?feed=rss2&#038;p=107" rel="self" type="application/rss+xml" />
	<link>http://www.theamazingrando.com/blog/?p=107</link>
	<description>Rando's Random Ramblings</description>
	<pubDate>Tue, 07 Sep 2010 23:51:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: David Masover</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-10062</link>
		<dc:creator>David Masover</dc:creator>
		<pubDate>Wed, 04 Aug 2010 03:26:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-10062</guid>
		<description>&lt;p&gt;I'm a bit confused -- why is getting a list of URLs via some query  URL better than using tools HTTP already provides for this very purpose, like redirects? Indeed, I would think this would violate one of the principles of a URL if you're using things like www1.example.com and www2.examlpe.com -- the URL no longer identifies the resource, but where that resource happens to be at this moment, and it might change. When URLs change, there should &lt;em&gt;always&lt;/em&gt; be a redirection mechanism in place.&lt;/p&gt;

&lt;p&gt;It'd be annoying, but you &lt;em&gt;could&lt;/em&gt; switch integer IDs to UUIDs by creating a separate table to do that mapping, and forcing all new records to be constructed with UUID only. Then, just use a permanent redirect.&lt;/p&gt;

&lt;p&gt;If the client is instead meant to look up "sample project" by name, that raises two questions: First, is "name" really unique and guaranteed to be unchanging? If not, how will your client find it after someone renames or duplicates it? And if so, why not use it in the URL, instead of something cryptic like a UUID or an autoincrement ID?&lt;/p&gt;

&lt;p&gt;I tend to agree that you should provide standard navigation (as you suggest) in addition to sane URLs, and I would take it a step further and suggest that it be done in HTML, with microformats. Certainly, once I have a URL to a resource, I should be able to navigate to subresources and related resources via hyperlinks, not by constructing URLs. But at the same time, the entire purpose of a URL is not to be a transient link between documents, but a Universal Resource Locator -- universal, and actually relevant to the current location of the resource.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I&#8217;m a bit confused &#8212; why is getting a list of URLs via some query  URL better than using tools HTTP already provides for this very purpose, like redirects? Indeed, I would think this would violate one of the principles of a URL if you&#8217;re using things like www1.example.com and www2.examlpe.com &#8212; the URL no longer identifies the resource, but where that resource happens to be at this moment, and it might change. When URLs change, there should <em>always</em> be a redirection mechanism in place.</p>

<p>It&#8217;d be annoying, but you <em>could</em> switch integer IDs to UUIDs by creating a separate table to do that mapping, and forcing all new records to be constructed with UUID only. Then, just use a permanent redirect.</p>

<p>If the client is instead meant to look up &#8220;sample project&#8221; by name, that raises two questions: First, is &#8220;name&#8221; really unique and guaranteed to be unchanging? If not, how will your client find it after someone renames or duplicates it? And if so, why not use it in the URL, instead of something cryptic like a UUID or an autoincrement ID?</p>

<p>I tend to agree that you should provide standard navigation (as you suggest) in addition to sane URLs, and I would take it a step further and suggest that it be done in HTML, with microformats. Certainly, once I have a URL to a resource, I should be able to navigate to subresources and related resources via hyperlinks, not by constructing URLs. But at the same time, the entire purpose of a URL is not to be a transient link between documents, but a Universal Resource Locator &#8212; universal, and actually relevant to the current location of the resource.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Hedgehog</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-7212</link>
		<dc:creator>Hedgehog</dc:creator>
		<pubDate>Sun, 07 Feb 2010 02:41:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-7212</guid>
		<description>&lt;p&gt;Doesn't Roy explicitly contradict your second point, "'Don’t Make a Client Construct URIs" ?&lt;/p&gt;

&lt;p&gt;Specifically:
"Instead, allow servers to instruct clients on how to construct appropriate URIs, such as is done in HTML forms and URI templates, by defining those instructions within media types and link relations."&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Doesn&#8217;t Roy explicitly contradict your second point, &#8220;&#8216;Don’t Make a Client Construct URIs&#8221; ?</p>

<p>Specifically:
&#8220;Instead, allow servers to instruct clients on how to construct appropriate URIs, such as is done in HTML forms and URI templates, by defining those instructions within media types and link relations.&#8221;</p>]]></content:encoded>
	</item>
	<item>
		<title>By: ABRAR</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-6832</link>
		<dc:creator>ABRAR</dc:creator>
		<pubDate>Sat, 26 Dec 2009 11:39:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-6832</guid>
		<description>&lt;p&gt;AMAING VIDEOS &gt;&gt;&gt;WWW.4URTUBE.BLOGSPOT.COM&lt;/p&gt;

&lt;p&gt;200++ TV CHANNELS   WWW.4URTV.BLOGSPOT.COM&lt;/p&gt;

&lt;p&gt;SEND FREE SMS IN PAKISTAN ANY NETWORK UNLEMITED &amp; SEND FREE SMS IN WORLD    WWW.4URFREESMS.BLOGSPOT.COM&lt;/p&gt;

&lt;p&gt;FREE CHAT ROOM IN PAKISTAN &amp; AND  ALL WORLD
WWW.4URCHATROOM.BLOGSPOT.COM&lt;/p&gt;

&lt;p&gt;WWW.PAKDESK.TK&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>AMAING VIDEOS &gt;&gt;&gt;WWW.4URTUBE.BLOGSPOT.COM</p>

<p>200++ TV CHANNELS   <a href="http://WWW.4URTV.BLOGSPOT.COM" rel="nofollow">http://WWW.4URTV.BLOGSPOT.COM</a></p>

<p>SEND FREE SMS IN PAKISTAN ANY NETWORK UNLEMITED &amp; SEND FREE SMS IN WORLD    <a href="http://WWW.4URFREESMS.BLOGSPOT.COM" rel="nofollow">http://WWW.4URFREESMS.BLOGSPOT.COM</a></p>

<p>FREE CHAT ROOM IN PAKISTAN &amp; AND  ALL WORLD
<a href="http://WWW.4URCHATROOM.BLOGSPOT.COM" rel="nofollow">http://WWW.4URCHATROOM.BLOGSPOT.COM</a></p>

<p><a href="http://WWW.PAKDESK.TK" rel="nofollow">http://WWW.PAKDESK.TK</a></p>]]></content:encoded>
	</item>
	<item>
		<title>By: Cool articles – SEO, blogging, internet marketing(july19-august16 2009) &#171; Stefanm, my link collection</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4806</link>
		<dc:creator>Cool articles – SEO, blogging, internet marketing(july19-august16 2009) &#171; Stefanm, my link collection</dc:creator>
		<pubDate>Tue, 18 Aug 2009 14:52:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4806</guid>
		<description>&lt;p&gt;[...] Your Web Service Might Not Be RESTful If you have a API/Key/Token in a header/URL, have a version st...; [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Your Web Service Might Not Be RESTful If you have a API/Key/Token in a header/URL, have a version st&#8230;; [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: &#187; links for 2009-08-15 (Dhananjay Nene)</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4766</link>
		<dc:creator>&#187; links for 2009-08-15 (Dhananjay Nene)</dc:creator>
		<pubDate>Sat, 15 Aug 2009 20:01:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4766</guid>
		<description>&lt;p&gt;[...] The Amazing Blog : Your Web Service Might Not Be RESTful If… (tags: rest) [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] The Amazing Blog : Your Web Service Might Not Be RESTful If… (tags: rest) [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Resting on Rails considered harmful &#8211; gnapse.com</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4584</link>
		<dc:creator>Resting on Rails considered harmful &#8211; gnapse.com</dc:creator>
		<pubDate>Thu, 06 Aug 2009 19:59:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4584</guid>
		<description>&lt;p&gt;[...] perhaps more digestible and to the point than this paper is a blog post recently published by Paul Sandauskas in his blog, where he warns developer about not being fully [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] perhaps more digestible and to the point than this paper is a blog post recently published by Paul Sandauskas in his blog, where he warns developer about not being fully [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Ernesto</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4562</link>
		<dc:creator>Ernesto</dc:creator>
		<pubDate>Wed, 05 Aug 2009 20:48:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4562</guid>
		<description>&lt;p&gt;Hi Paul,&lt;/p&gt;

&lt;p&gt;I like your article and I understand your point of view and the need for "getting it right". But I still have a couple to doubts, some even related to past comments in this entry.&lt;/p&gt;

&lt;p&gt;First issue...&lt;/p&gt;

&lt;p&gt;For instance, Michael S. asks in comment #6 above about searching to avoid clients to retrieve (GET) all resources of a given kind to then find/navigate to a specific one.&lt;/p&gt;

&lt;p&gt;You then answered in comment #13 with "suggestions". But since clients ignore any specifics about the API of a system, and need only to know a single entry point with hyperlinks to the available services, how are clients suppose to "discover" or learn how to search? I mean, they might learn that product resources can be find at "/products", but if they want to filter or search within all products, how do they know what querystring parameter to use, or any other implementation specification to search this resources?&lt;/p&gt;

&lt;p&gt;And the second issue, which is not a doubt but a rant. Ruby on Rails, which on one hand has contributed a lot by "spreading the word" of restul interfaces (I first knew about REST from rails) but today with your article and roy fielding's original dissertation about it, I have learned that rails, far from helping, has spread the wrong idea about what a RESTful interface is, because rails is not [fully] compliant.&lt;/p&gt;

&lt;p&gt;Rails relies on a predetermined URI structure, but when a design implementation changes this structure, all clients get broken. ActiveResource, for instance, relies heavily on this. And I have learned today all this and I feel so bad. It's preferable not to adopt it at all, than to wrongly adopt it.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hi Paul,</p>

<p>I like your article and I understand your point of view and the need for &#8220;getting it right&#8221;. But I still have a couple to doubts, some even related to past comments in this entry.</p>

<p>First issue&#8230;</p>

<p>For instance, Michael S. asks in comment #6 above about searching to avoid clients to retrieve (GET) all resources of a given kind to then find/navigate to a specific one.</p>

<p>You then answered in comment #13 with &#8220;suggestions&#8221;. But since clients ignore any specifics about the API of a system, and need only to know a single entry point with hyperlinks to the available services, how are clients suppose to &#8220;discover&#8221; or learn how to search? I mean, they might learn that product resources can be find at &#8220;/products&#8221;, but if they want to filter or search within all products, how do they know what querystring parameter to use, or any other implementation specification to search this resources?</p>

<p>And the second issue, which is not a doubt but a rant. Ruby on Rails, which on one hand has contributed a lot by &#8220;spreading the word&#8221; of restul interfaces (I first knew about REST from rails) but today with your article and roy fielding&#8217;s original dissertation about it, I have learned that rails, far from helping, has spread the wrong idea about what a RESTful interface is, because rails is not [fully] compliant.</p>

<p>Rails relies on a predetermined URI structure, but when a design implementation changes this structure, all clients get broken. ActiveResource, for instance, relies heavily on this. And I have learned today all this and I feel so bad. It&#8217;s preferable not to adopt it at all, than to wrongly adopt it.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Code Mongrel &#124; Episode 2: A Festivus for the REST of us!</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4446</link>
		<dc:creator>Code Mongrel &#124; Episode 2: A Festivus for the REST of us!</dc:creator>
		<pubDate>Mon, 27 Jul 2009 10:03:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4446</guid>
		<description>&lt;p&gt;[...] Your Web Service Might Not Be RESTful If… [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Your Web Service Might Not Be RESTful If… [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Rob Heittman</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4432</link>
		<dc:creator>Rob Heittman</dc:creator>
		<pubDate>Sat, 25 Jul 2009 14:36:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4432</guid>
		<description>&lt;p&gt;Good article.  I also agree with August -- following this guidance produces a better API.  It's not just pedantry.&lt;/p&gt;

&lt;p&gt;Still, there may be occasional valid reasons to diverge, usually in especially complex cases:  Amazon certainly thought out their S3 authentication scheme carefully, though it is outside this guidance.&lt;/p&gt;

&lt;p&gt;I'm not convinced about versioned APIs.  I fully agree this practice should be minimized, and I've seen it abused.  But I also know of lots of cases where the API significantly and incompatibly differs and there is a user base reliant on a previous version.  I am imagining a developer with a widely used REST API reads this blog post and goes back and rethinks their design (e.g. minimizing the starting points) -- content negotiation alone might not cover the differences.&lt;/p&gt;

&lt;p&gt;So if a developer is not sure their REST API is correct, final, or long-term supportable, proactively introducing a version number is probably a good defensive practice giving you more flexibility to get it right in the future.  IIRC Richardson and Ruby had stuff to say about this in their O'Reilly book, which has led many developers to REST, and may account for the prevalance of this practice.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Good article.  I also agree with August &#8212; following this guidance produces a better API.  It&#8217;s not just pedantry.</p>

<p>Still, there may be occasional valid reasons to diverge, usually in especially complex cases:  Amazon certainly thought out their S3 authentication scheme carefully, though it is outside this guidance.</p>

<p>I&#8217;m not convinced about versioned APIs.  I fully agree this practice should be minimized, and I&#8217;ve seen it abused.  But I also know of lots of cases where the API significantly and incompatibly differs and there is a user base reliant on a previous version.  I am imagining a developer with a widely used REST API reads this blog post and goes back and rethinks their design (e.g. minimizing the starting points) &#8212; content negotiation alone might not cover the differences.</p>

<p>So if a developer is not sure their REST API is correct, final, or long-term supportable, proactively introducing a version number is probably a good defensive practice giving you more flexibility to get it right in the future.  IIRC Richardson and Ruby had stuff to say about this in their O&#8217;Reilly book, which has led many developers to REST, and may account for the prevalance of this practice.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Banwart&#8217;s Blog &#187; Blog Archive &#187; Distributed Weekly 7</title>
		<link>http://www.theamazingrando.com/blog/?p=107&#038;cpage=1#comment-4418</link>
		<dc:creator>Scott Banwart&#8217;s Blog &#187; Blog Archive &#187; Distributed Weekly 7</dc:creator>
		<pubDate>Fri, 24 Jul 2009 13:04:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.theamazingrando.com/blog/?p=107#comment-4418</guid>
		<description>&lt;p&gt;[...] Your Web Service Might Not Be RESTful If… [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Your Web Service Might Not Be RESTful If… [...]</p>]]></content:encoded>
	</item>
</channel>
</rss>

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