<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.subbu.org/wp-atom.php">
	<title type="text">subbu.org</title>
	<subtitle type="text">HTTP, REST and some Cycling</subtitle>

	<updated>2008-11-18T22:25:10Z</updated>
	<generator uri="http://wordpress.org/" version="2.7-beta3">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://www.subbu.org" />
	<id>http://www.subbu.org/feed/atom</id>
	

			<geo:lat>37.75735</geo:lat><geo:long>-121.952138</geo:long><link rel="self" href="http://feeds.feedburner.com/SubbuDotOrg" type="application/atom+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FSubbuDotOrg" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSubbuDotOrg" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/SubbuDotOrg" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSubbuDotOrg" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSubbuDotOrg" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSubbuDotOrg" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[POST Caching Example]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/457692458/post-caching-example" />
		<id>http://www.subbu.org/?p=662</id>
		<updated>2008-11-18T22:25:10Z</updated>
		<published>2008-11-18T22:25:10Z</published>
		<category scheme="http://www.subbu.org" term="HTTP" />		<summary type="html"><![CDATA[Here is a good example of caching of POST responses by Henrik Nordström in the HTTP WG.


The classic example of where a cacheable response to POST makes sense is the guestbook example (or unmoderated blog comments for those needing a more modern example, basically the same thing in a different era) where the visitor POSTs [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/11/post-caching-example">&lt;p&gt;Here is a good example of caching of POST responses by &lt;a href="http://www.henriknordstrom.net/"&gt;Henrik Nordström&lt;/a&gt; in the HTTP WG.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-662"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The classic example of where a cacheable response to POST makes sense is the guestbook example (or unmoderated blog comments for those needing a more modern example, basically the same thing in a different era) where the visitor POSTs an addition to the page currently viewed, or &amp;#8220;separate entity that accepts annotations&amp;#8221; as it&amp;#8217;s expressed in the RFC. The response given to the POST is the new representation of the page. Both&lt;br /&gt;
GET and POST uses the same URL in this example.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;followed by&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note that the POST request as such can never be satisfied from cache. A repeated POST with the same form content will not yield the same result even if the response is cacheable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The context of this thread was whether the HTTP method should be included in the cache key. See &lt;a href="http://lists.w3.org/Archives/Public/ietf-http-wg/2008OctDec/0200.html"&gt;this thread&lt;/a&gt; for a complete summary. &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=oHMON"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=oHMON" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=GQVDn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=GQVDn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=Vpatn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=Vpatn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/457692458" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/11/post-caching-example#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/11/post-caching-example/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/11/post-caching-example</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Analytics for Web APIs]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/456764894/analytics-for-web-apis" />
		<id>http://www.subbu.org/?p=648</id>
		<updated>2008-11-18T04:44:16Z</updated>
		<published>2008-11-18T04:40:37Z</published>
		<category scheme="http://www.subbu.org" term="HTTP" /><category scheme="http://www.subbu.org" term="JAX-WS" /><category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[Runtime linking in RESTful apps can reduce  client-server coupling as the server can tweak the workflow at runtime without completely breaking client apps. Here is one more reason to switch from static pre-published URIs to runtime linking.

Say, you built a cool Web API. Folks are excited about your API are are actively using it. [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/11/analytics-for-web-apis">&lt;p&gt;&lt;a href="http://www.subbu.org/blog/2008/09/on-linking-part-1"&gt;Runtime linking&lt;/a&gt; in RESTful apps can reduce  client-server coupling as the server can tweak the &lt;a href="http://www.subbu.org/blog/2008/11/who-is-composing-your-app"&gt;workflow&lt;/a&gt; at runtime without completely breaking client apps. Here is one more reason to switch from static pre-published URIs to runtime linking.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-648"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Say, you built a cool Web API. Folks are excited about your API are are actively using it. You now have some better ideas, and want to find the effectiveness of some options you have. How do you go about testing the effectiveness of each option before flipping on the big switch?&lt;/p&gt;
&lt;p&gt;For consumer-facing web apps, &lt;a href="http://en.wikipedia.org/wiki/A/B_testing"&gt;A/B testing&lt;/a&gt; provides an effective technique for segmented testing of various design/implementation options. Here is one simple way to build hooks for A/B testing into web pages.&lt;/p&gt;
&lt;pre name="code" class="java"&gt;
  // Embed test variables into links.

  trackId = createLink(&amp;lt;some ID&amp;gt;, &amp;lt;some test variables&amp;gt;);

  // Store test variables for later analysis

  storeTest(trackId, &amp;lt;test variables&amp;gt;);

  // Render link

  ... + &amp;quot;&amp;#038;track=&amp;quot; + trackId + &amp;quot;...&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;This may produce a URI like the following.&lt;/p&gt;
&lt;pre name="code" class="html"&gt;
  &amp;lt;a href=&amp;quot;http://example.org/blahBlah?someParams&amp;amp;track=xyz&amp;gt;...&amp;lt;/a&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Subsequently, when a user actives this link, the server can correlate that link to the test variables used. This correlation data forms the basis for post-hoc analysis for A/B and other forms of bucketed testing.&lt;/p&gt;
&lt;p&gt;By using runtime linking for Web APIs, i.e., by making them take advantage of the HATEOAS constraint of REST, we can use the same technique for correlating API calls to test variables and conduct A/B testing. That is, when clients are discovering URIs at runtime based on known &lt;a href="http://www.subbu.org/blog/2008/10/generalized-linking"&gt;link relations&lt;/a&gt;, servers have a chance to get smarter.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=kuJ4N"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=kuJ4N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=Dp5Xn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=Dp5Xn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=mRoZn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=mRoZn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/456764894" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/11/analytics-for-web-apis#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/11/analytics-for-web-apis/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/11/analytics-for-web-apis</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Directory Structure-like URIs]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/450990408/directory-structure-like-uris" />
		<id>http://www.subbu.org/?p=630</id>
		<updated>2008-11-13T01:05:04Z</updated>
		<published>2008-11-12T18:54:38Z</published>
		<category scheme="http://www.subbu.org" term="Uncategorized" /><category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[Alex Rodriguez in RESTful Web services: The basics says:

REST Web service URIs should be intuitive to the point where they are easy to guess. Think of a URI as a kind of self-documenting interface that requires little, if any, explanation or reference for a developer to understand what it points to and to derive related [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/11/directory-structure-like-uris">&lt;p&gt;Alex Rodriguez in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-restful/index.html?ca=dgr-jw22RESTfulBasics&amp;amp;S_Tact=105AGX59&amp;amp;S_CMP=GRsitejw22"&gt;RESTful Web services: The basics&lt;/a&gt; says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;REST Web service URIs should be intuitive to the point where they are easy to guess. Think of a URI as a kind of self-documenting interface that requires little, if any, explanation or reference for a developer to understand what it points to and to derive related resources. To this end, the structure of a URI should be straightforward, predictable, and easily understood.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span id="more-630"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;What is interesting is that, the example cited in this paper carefully tries to skirt around the problem of how a client can determine what a URI is supposed to do. Well, if the structure of the URI is such that it is &lt;i&gt;self-describing&lt;/i&gt;, the problem is solved. Right? Sorry Alex. No. The answer is &lt;a href="http://www.subbu.org/blog/2008/09/on-linking-part-1"&gt;linking&lt;/a&gt;. This is unfortunate, coming from IBM Developer Works.&lt;/p&gt;
&lt;p&gt;Here is a more interesting advice:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Instead of using the 404 Not Found code if the request URI is for a partial path, always provide a default page or resource as a response.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wish he tried to explain this with an example, as that would have allowed him to see the consequences of masquerading errors in success responses.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=OavMN"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=OavMN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=Kwjmn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=Kwjmn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=ZJRrn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=ZJRrn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/450990408" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/11/directory-structure-like-uris#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/11/directory-structure-like-uris/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/11/directory-structure-like-uris</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Who is Composing Your App?]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/448690126/who-is-composing-your-app" />
		<id>http://www.subbu.org/?p=621</id>
		<updated>2008-11-16T05:36:00Z</updated>
		<published>2008-11-10T18:48:49Z</published>
		<category scheme="http://www.subbu.org" term="Uncategorized" /><category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[As I was debating some comments with JJ over the weekend on a paper that I am writing on describing RESTful applications, the question on composition came up. In particular, who is composing your app? The server? Or the client? The context of our discuss was the difference between describing the contract of a RESTful [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/11/who-is-composing-your-app">&lt;p&gt;As I was debating some comments with &lt;a href="http://www.ebpml.org/ebpml_radio.htm"&gt;JJ&lt;/a&gt; over the weekend on a paper that I am writing on describing RESTful applications, the question on composition came up. In particular, who is composing your app? The server? Or the client? The context of our discuss was the difference between describing the contract of a RESTful application vs describing that of a web service (the SOAP kind) using WSDL.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-621"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In the SOAP-land, services express their interface via WSDL documents. A WSDL is nothing but a group of message exchange patterns, expressed in a context-free manner. Each pattern accomplishes some discrete function, which may or may not be interesting and useful on its own. Clients combine various message exchange patterns into an application to accomplish something of value. For instance, an app doing implementing some HR functions may be talking to some payroll services. Only the client knows the context in which it is using those payroll services. As far as the payroll service is concerned, it is just &amp;#8220;message in and, optionally, message out&amp;#8221;. It does not know what the client is trying to accomplish.&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/2008/11/ws-composition.png" alt="Compsing a client app in the SOAP-land" /&gt;&lt;/p&gt;
&lt;p&gt;In this model, how does the client know how to compose such services into its application? In particular, how does it know whether it is okay to send a particular message &amp;#8220;M&amp;#8221; to a service &amp;#8220;A&amp;#8221; before sending message &amp;#8220;N&amp;#8221; to a service &amp;#8220;B&amp;#8221;? WSDL does not have this info. So, it has to make some assumptions either on its own, or rely some composition framework or language (like BPEL). In either case, the service does not have much to say.&lt;/p&gt;
&lt;p&gt;In the REST-land, resources rely on the uniform interface, media types, and links to express the contract. More interestingly, the links that the server provides inform the client of what it can do subsequently. That is, the links in a representation let the server incrementally express the interface between the client and the resources it is interacting with.&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/2008/11/rest-composition.png" alt="Compsing a client app in the REST-land" /&gt;&lt;/p&gt;
&lt;p&gt;In this model, the contract is contextual. The client does not make assumptions about this contract. Nor does it need an external composition framework. If it finds some links with some known relations, it means that it can do certain things. If, at a later stage, it does not find those links, it means that it can not do those things.&lt;/p&gt;
&lt;p&gt;This is an important difference worth calling out, as it has a number of consequences:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The same client/server code can not support both REST and WS-*. Code sharing may be possible at lower levels, but not at the application level. This is where I don&amp;#8217;t agree with Alan Dean&amp;#8217;s statement that &lt;a href="http://alandean.blogspot.com/2008/11/separating-rest-facts-from-fallacies-at.html"&gt;a system can compose both REST and WS-*&lt;/a&gt;. I hope I am interpreting his statement right. The differences between client-side and server-side processing are significant enough to demand code isolation.&lt;/li&gt;
&lt;li&gt;A RESTful server can change or finetune the contract at runtime. So, the client must be prepared to accept changes in the workflow at runtime.&lt;/li&gt;
&lt;li&gt;A RESTful server can move resources around or even upgrade resources in a compatible manner at runtime, and a RESTful client will not even notice such changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to JJ for his time.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=9B7fN"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=9B7fN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=twUzn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=twUzn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=iGdVn"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=iGdVn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/448690126" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/11/who-is-composing-your-app#comments" thr:count="6" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/11/who-is-composing-your-app/feed/atom" thr:count="6" />
		<thr:total>6</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/11/who-is-composing-your-app</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Please Vote for &#8220;That One&#8221;]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/436216134/please-vote-for-that-one" />
		<id>http://www.subbu.org/?p=579</id>
		<updated>2008-10-30T02:59:38Z</updated>
		<published>2008-10-29T20:25:15Z</published>
		<category scheme="http://www.subbu.org" term="Uncategorized" />		<summary type="html"><![CDATA[I live in the US, but I can not yet vote in this country. If you are passing by this blog, and can vote, here is my request. Please vote. Please vote for &#34;that one&#34;.
Sorry - closing comments for this post.
]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/10/please-vote-for-that-one">&lt;p&gt;I live in the US, but I can not yet vote in this country. If you are passing by this blog, and can vote, here is my request. Please vote. Please vote for &amp;quot;that one&amp;quot;.&lt;/p&gt;
&lt;p&gt;Sorry - closing comments for this post.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=V8hpM"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=V8hpM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=Us6Bm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=Us6Bm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=rPf1m"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=rPf1m" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/436216134" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/10/please-vote-for-that-one#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/10/please-vote-for-that-one/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/10/please-vote-for-that-one</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Comments on SOFEA]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/435004342/comments-on-sofea" />
		<id>http://www.subbu.org/?p=577</id>
		<updated>2008-10-28T18:46:04Z</updated>
		<published>2008-10-28T18:46:04Z</published>
		<category scheme="http://www.subbu.org" term="Uncategorized" /><category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[In the same session on &#34;RESTful Web Apps&#34;, I briefly discussed about SOFEA and some offshoots like Appcelerator. Here is a follow up thread.
]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/10/comments-on-sofea">&lt;p&gt;In the &lt;a href="http://www.subbu.org/blog/2008/10/slides-from-the-colorado-software-summit"&gt;same&lt;/a&gt; session on &amp;quot;RESTful Web Apps&amp;quot;, I briefly discussed about &lt;a href="http://groups.google.com/group/sofea"&gt;SOFEA&lt;/a&gt; and some offshoots like &lt;a href="http://www.appcelerator.com"&gt;Appcelerator&lt;/a&gt;. &lt;a href="http://groups.google.com/group/sofea/browse_thread/thread/258893e72868151e"&gt;Here&lt;/a&gt; is a follow up thread.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=ohdZM"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=ohdZM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=FFMVm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=FFMVm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=dUuRm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=dUuRm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/435004342" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/10/comments-on-sofea#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/10/comments-on-sofea/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/10/comments-on-sofea</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[JSF is Not Fixable]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/433187636/jsf-is-not-fixable" />
		<id>http://www.subbu.org/?p=539</id>
		<updated>2008-10-28T15:45:58Z</updated>
		<published>2008-10-27T04:02:37Z</published>
		<category scheme="http://www.subbu.org" term="Uncategorized" /><category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[Last week, at the Colorado Software Summit, I gave a session on RESTful Web Apps. In this session, I made a comment that the proponents of JSF failed to consider the web architecture, and that it is not fixable. My goal in that session was to point out the consequences of design choices made by [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/10/jsf-is-not-fixable">&lt;p&gt;Last week, at the &lt;a href="http://www.coloradosoftwaresummit.com/"&gt;Colorado Software Summit&lt;/a&gt;, I gave a session on &lt;a href="http://www.subbu.org/uploads/2008/10/RESTfulWebApps.pdf"&gt;RESTful Web Apps&lt;/a&gt;. In this session, I made a comment that the proponents of JSF failed to consider the web architecture, and that it is not fixable. My goal in that session was to point out the consequences of design choices made by some web frameworks, but not necessarily to point fingers at those frameworks.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-539"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Matt Riable attended my session, and shared his notes on his blog at &lt;a href="http://raibledesigns.com/rd/entry/restful_web_applications_with_subbu"&gt;RESTful Web Applications with Subbu Allamaraju&lt;/a&gt;. His post incited some comments, to one of which I would like to respond here.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://plentz.org/"&gt;Diego Plentz&lt;/a&gt; said that&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I haven&amp;apos;t come to the conclusion that JSF is not fixable yet. It looks like there are some major overhauls going on related to state saving and RESTful URLs in JSF 2.0.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think this comment misunderstands what it means to be &amp;quot;RESTful&amp;quot;. The ability of an app to create a link that can be submitted via GET to some non-JSF app does not make the app RESTful. Period. I don&amp;apos;t have problems with JSF focusing on usability, but I do think it should have paid attention to the web architecture. Given that JSF is a Java standard, those who want to rely on standards have no choice but to build web apps that fail the web architecture and can not take advantage of common web infrastructure. The design choices made in JSF are poor, and I don&amp;apos;t see an exit strategy other than dumping the current standard, and going back to the drawing board. Bill de hÓra echoed a similar thought:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But it&amp;#8217;s hard to be non-critical about a spec that got things so wrong - not just REST, but basic HTTP usage. A JSF that supports REST is going to be a complete overhaul, no?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have not read the latest JSF 2.0 draft thoroughly, but upon a quick reading of all the changes, I don&amp;apos;t see anything to address the basic web usage. Unless there are more changes coming that will magically fix the core without an overhaul, JSF should the follow JAX-RPC into the JSR-graveyard.&lt;/p&gt;
&lt;div class="note"&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Looking at some of the heated comments below and the links posted, I can&amp;apos;t help but comment that JSF (community) has recently discovered the web architecture, viz., that GET is the de facto means of navigation and that POST is an exception and used solely for unsafe and non-idempotent operations. This is unfortunate for a standard. Secondly, the ability to pass parameters to a URI does not fix JSF as long as JSF&amp;apos;s notion of a form is always driven by POST. That does not make JSF a bad framework, it just makes it a special-purpose framework that can be used to build certain kind of stateful applications. That, IMHO, is a too low a bar for a standard framework.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=cPgrM"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=cPgrM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=JKGJm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=JKGJm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=VVHnm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=VVHnm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/433187636" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/10/jsf-is-not-fixable#comments" thr:count="18" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/10/jsf-is-not-fixable/feed/atom" thr:count="18" />
		<thr:total>18</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/10/jsf-is-not-fixable</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Slides from the Colorado Software Summit]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/433168690/slides-from-the-colorado-software-summit" />
		<id>http://www.subbu.org/?p=535</id>
		<updated>2008-10-28T17:21:31Z</updated>
		<published>2008-10-27T03:30:05Z</published>
		<category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[I spent last week at 9300ft above the sea level at Keystone (CO) attending the Colorado Software Summit. This is one of the best conferences I have attended in a long time, with just about 300 attendees and serious sessions with very little fluff and absolutely no product/vendor pitch of any kind. This is one [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/10/slides-from-the-colorado-software-summit">&lt;p&gt;I spent last week at 9300ft above the sea level at Keystone (CO) attending the &lt;a href="http://www.coloradosoftwaresummit.com/"&gt;Colorado Software Summit&lt;/a&gt;. This is one of the best conferences I have attended in a long time, with just about 300 attendees and serious sessions with very little fluff and absolutely no product/vendor pitch of any kind. This is one conference that I can recommend to any one who value their money and time spent on conferences.&lt;/p&gt;
&lt;p&gt;Here are the slides for my sessions:&lt;/p&gt;
&lt;p&gt;&lt;span id="more-535"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pragmatic REST&lt;/strong&gt;: This session is about building HTTP APIs RESTfully.&lt;/p&gt;
&lt;div style="width:425px;text-align:left" id="__ss_699233"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/sallamar/pragmatic-rest-presentation?type=powerpoint" title="Pragmatic Rest"&gt;Pragmatic Rest&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=pragmaticrest-1225213907285838-8&amp;#038;stripped_title=pragmatic-rest-presentation" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=pragmaticrest-1225213907285838-8&amp;#038;stripped_title=pragmatic-rest-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View SlideShare &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/sallamar/pragmatic-rest-presentation?type=powerpoint" title="View Pragmatic Rest on SlideShare"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint"&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style="text-decoration:underline;" href="http://slideshare.net/tag/rest"&gt;rest&lt;/a&gt;)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Here is the &lt;a href="http://www.subbu.org/uploads/2008/10/PragmaticREST.pdf"&gt;link&lt;/a&gt; to download a PDF version.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RESTful Web Apps&lt;/strong&gt;: This session is about the RESTful aspects of the web, and how certain mainstream Java web frameworks make it harder to build web apps that play nice with the web architecture. My slides for this session are not as polished as I would have liked, but well - that&amp;apos;s all the time I have.&lt;/p&gt;
&lt;div style="width:425px;text-align:left" id="__ss_699245"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/sallamar/restful-web-apps-facts-vs-fiction-presentation?type=powerpoint" title="RESTful Web Apps - Facts vs Fiction"&gt;RESTful Web Apps - Facts vs Fiction&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=restfulwebapps-1225214252037687-8&amp;#038;stripped_title=restful-web-apps-facts-vs-fiction-presentation" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=restfulwebapps-1225214252037687-8&amp;#038;stripped_title=restful-web-apps-facts-vs-fiction-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View SlideShare &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/sallamar/restful-web-apps-facts-vs-fiction-presentation?type=powerpoint" title="View RESTful Web Apps - Facts vs Fiction on SlideShare"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint"&gt;Upload&lt;/a&gt; your own.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Here is the &lt;a href="http://www.subbu.org/uploads/2008/10/RESTfulWebApps.pdf"&gt;link&lt;/a&gt; to download a PDF version.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=bQ9YM"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=bQ9YM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=jBSbm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=jBSbm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=V4LCm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=V4LCm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/433168690" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/10/slides-from-the-colorado-software-summit#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/10/slides-from-the-colorado-software-summit/feed/atom" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/10/slides-from-the-colorado-software-summit</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Where Do Resources Come From?]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/429152676/where-do-resources-come-from" />
		<id>http://www.subbu.org/?p=522</id>
		<updated>2008-10-28T15:47:58Z</updated>
		<published>2008-10-23T02:10:35Z</published>
		<category scheme="http://www.subbu.org" term="REST" /><category scheme="http://www.subbu.org" term="Uncategorized" />		<summary type="html"><![CDATA[Here is the approach I used in my session at the Colorado Software Summit on REST (I will post the slides over the weekend) to find resources.



Domain Nouns:  This is the most natural approach for finding resources, but it can end up with an inconvenient resource model. For instance, the NYT Movie Reviews API [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/10/where-do-resources-come-from">&lt;p&gt;Here is the approach I used in my session at the &lt;a href="http://coloradosoftwaresummit.org"&gt;Colorado Software Summit&lt;/a&gt; on REST (I will post the slides over the weekend) to find resources.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-522"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.subbu.org/uploads/2008/10/finding_resources.png" alt="Finding Resources" title="Finding Resources" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Domain Nouns: &lt;/strong&gt; This is the most natural approach for finding resources, but it can end up with an inconvenient resource model. For instance, the &lt;a href="http://developer.nytimes.com/docs/movie_reviews_api/"&gt;NYT Movie Reviews API&lt;/a&gt; has things like Movies, Reviews, Critics, Critic&amp;apos;s picks, Reviews by reviewer identified as resources. These can provide a good starting point, but may not meet the needs of client apps, which leads to the next step.
    &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Composites: &lt;/strong&gt; These are combinations of other resources, created primarily to address client app needs. Composites can also fix the urge for batching. An example is &amp;quot;a user profile with 5 contacts plus favorite colors plus 10 latest updates&amp;quot; identified as a single resource, so that the client developer can get with a single GET.
    &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tasks and Processes: &lt;/strong&gt; An example is an account transfer with some back-end process to complete the transfer at the end of the business day. Some in the audience wondered if it is RESTful to identify such an account transfer &amp;quot;process&amp;quot; (something that is typically identified as a verb). But why not? Such processes can be resources themselves with their own state and lifecycle.
    &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=4SYTM"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=4SYTM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=RHjEm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=RHjEm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=OgtSm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=OgtSm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/429152676" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/10/where-do-resources-come-from#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/10/where-do-resources-come-from/feed/atom" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/10/where-do-resources-come-from</feedburner:origLink></entry>
		<entry>
		<author>
			<name>subbu</name>
						<uri>http://www.subbu.org</uri>
					</author>
		<title type="html"><![CDATA[Explaining State in HATEOAS]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/SubbuDotOrg/~3/428649287/explaining-state-in-hateoas" />
		<id>http://www.subbu.org/?p=503</id>
		<updated>2008-10-22T16:54:01Z</updated>
		<published>2008-10-22T15:16:22Z</published>
		<category scheme="http://www.subbu.org" term="REST" />		<summary type="html"><![CDATA[Explaining &#34;state&#34; in &#34;Hypermedia as the Engine of Application State&#34; (HATEOAS) is a bit tricky, particularly when you have to do it under two minutes.
The problem is that, the word &#34;state&#34; means different things to different people. For most of us coming from some background in web development, state usually involves numbers, strings, booleans, and [...]]]></summary>
		<content type="html" xml:base="http://www.subbu.org/blog/2008/10/explaining-state-in-hateoas">&lt;p&gt;Explaining &amp;quot;state&amp;quot; in &amp;quot;Hypermedia as the Engine of Application State&amp;quot; (HATEOAS) is a bit tricky, particularly when you have to do it under two minutes.&lt;/p&gt;
&lt;p&gt;The problem is that, the word &amp;quot;state&amp;quot; means different things to different people. For most of us coming from some background in web development, state usually involves numbers, strings, booleans, and other objects stored in some place, say, in an in-memory session. For instance, every beginner-level book on web development includes a shopping cart style sample that stores the cart in an in-memory session. If we extend that notion to understand or explain HATEOAS, it would make us jump to the conclusion that, to make hypermedia as the engine of application state, the server will have to encode similar objects into some XML or such form of representation in response to each request. This line of thinking is a trap.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-503"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Here is why. Once the server includes such state in a representation, the next step for the client is to replay the state in future requests to the server. Then we are talking about exchanging those objects back and forth, and not every HTTP verb has enough room to carry that state. This line of thinking will then start to shoot holes into the notion of a uniform interface because, to fit the state in a request, the client may have to resort to POST. I can almost see message passing over POST as the next logical step. At this stage, whoever is trying to explain HATEOAS may have make some lame excuses and move on. Whoever is listening will then conclude that &amp;quot;yeah, this won&amp;apos;t work for my apps&amp;quot;. &lt;/p&gt;
&lt;p&gt;Here is an example that I find most useful to explain the &amp;quot;state&amp;quot; in HATEOAS.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are three pages in a UI. The first page has a link to go to the second page. The second page has a link to go to the previous page as well as the third page. The third has a link to the second page and another link to the first page.&lt;/p&gt;
&lt;p&gt;A client starts from the first page, and then through the link on that page, goes to the second page. The fact that this page has one link to the first page and another to the third page implies that the current state of the application (i.e. the interactions) is that &amp;quot;the client is viewing the second page&amp;quot;. That is what it means by hypermedia as the engine of application state. It does not necessarily mean serializing application state, such as &amp;quot;&lt;code&gt;&amp;lt;page&amp;gt;2&amp;lt;/page&amp;gt;&lt;/code&gt;&amp;quot; into representations. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I admit that I am simplifying this a bit. The point is that state does not necessarily mean some data stored in representations. HATEOAS means that representations reflect the current state of the app through &lt;a href="http://www.subbu.org/blog/2008/10/generalized-linking"&gt;links&lt;/a&gt; with known relations. Those links may contain opaque references to some persistent state on the server.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=T6Y3M"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=T6Y3M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=LZnSm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=LZnSm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SubbuDotOrg?a=VMT7m"&gt;&lt;img src="http://feeds.feedburner.com/~f/SubbuDotOrg?i=VMT7m" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SubbuDotOrg/~4/428649287" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.subbu.org/blog/2008/10/explaining-state-in-hateoas#comments" thr:count="6" />
		<link rel="replies" type="application/atom+xml" href="http://www.subbu.org/blog/2008/10/explaining-state-in-hateoas/feed/atom" thr:count="6" />
		<thr:total>6</thr:total>
	<feedburner:origLink>http://www.subbu.org/blog/2008/10/explaining-state-in-hateoas</feedburner:origLink></entry>
	</feed><!-- Dynamic Page Served (once) in 0.463 seconds --><!-- Cached page served by WP-Super-Cache --><!-- Compression = gzip -->
