<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>subbu.org &#187; Uncategorized</title>
	<atom:link href="http://www.subbu.org/blog/category/uncategorized/feed" rel="self" type="application/rss+xml" />
	<link>http://www.subbu.org</link>
	<description>HTTP, REST and some Cycling</description>
	<lastBuildDate>Tue, 13 Jul 2010 00:09:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BigPipe Done in Node.js</title>
		<link>http://www.subbu.org/blog/2010/07/bigpipe-done-in-node-js</link>
		<comments>http://www.subbu.org/blog/2010/07/bigpipe-done-in-node-js#comments</comments>
		<pubDate>Mon, 12 Jul 2010 21:53:32 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1194</guid>
		<description><![CDATA[Stephan Schmidt says

I’ve implemented a proof of concept of BigPipe in Java (should run as-is in every servlet container):

See his blog post for the Java servlet class.
Here is the same (or more?) written in Node.js.

var http = require('http');
var sys = require('sys');
var url = require("url");

http.createServer(function(request, response) {
    // Write the document
   [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://codemonkeyism.com">Stephan Schmidt</a> says</p>
<blockquote><p>
I’ve implemented a proof of concept of BigPipe in Java (should run as-is in every servlet container):
</p></blockquote>
<p>See his <a href="http://codemonkeyism.com/facebook-bigpipe-java/">blog post</a> for the Java servlet class.</p>
<p>Here is the same (or more?) written in Node.js.</p>
<pre class='brush: js'>
var http = require('http');
var sys = require('sys');
var url = require("url");

http.createServer(function(request, response) {
    // Write the document
    response.writeHead(200, {"Content-Type" : "text/html"});
    response.write("&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"" +
            "   \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"&gt;");
    response.write("&lt;script type=\"text/javascript\"&gt;function arrived(id,text) { var b=document.getElementById(id); b.innerHTML = text; }&lt;/script&gt;");
    response.write("&lt;/head&gt;&lt;body&gt;&lt;div&gt;Progressive Loading");
    for(var i = 0; i < 6; i++) {
        response.write("&lt;div id='" + i + "'&gt;&;lt;/div&gt;");
    }
    response.write("&lt;/div&gt;");

    // Now the snippets
    var down = 6;
    for (i = 0; i < 6; i++) {
        var proxy = http.createClient(2000, "localhost");
        var proxyRequest = proxy.request("GET", "/?id=" + i,
                                         {"host" : "localhost"});
        proxyRequest.addListener('response', function (proxyResponse) {
            --down;
            proxyResponse.addListener('data', function(chunk) {
                response.write(chunk, 'binary');
            });
            proxyResponse.addListener('end', function() {
                if(down == 0) {
                    response.end();
                }
            });
        });
        proxyRequest.close();
    }
    response.write("&lt;/body&gt;&lt;/html&gt;");

}).listen(8080);

http.createServer(function(request, response) {
    // Some delay upto upto 2 seconds
    var delay = Math.round(Math.random() * 2000);

    setTimeout(function() {
        var params = url.parse(request.url, true);
        var id = params.query.id;
        response.writeHead(200, {"Content-Type" : "text/html"});
        var content = "&lt;span&gt;Content of Module " + id + "&lt;/span&gt;";
        response.write("&lt;script&gt;" +
            "arrived('" + id + "', '" + content + "');" +
             "&lt;/script&gt;");
        response.close();
	}, delay);
}).listen(2000);
</pre>
<p>I've no comments on the technique itself. The basic idea may have been implemented a number of times in different languages. The mileage varies based on the language/environment used.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/07/bigpipe-done-in-node-js/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Co-Motion Tandem</title>
		<link>http://www.subbu.org/blog/2010/05/new-co-motion</link>
		<comments>http://www.subbu.org/blog/2010/05/new-co-motion#comments</comments>
		<pubDate>Sun, 30 May 2010 03:32:10 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cycling]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1179</guid>
		<description><![CDATA[
Co-Motion Periscope Torpedo Tandem &#8211; Shimano Ultegra &#8211; FSA Gossamer 52-39-30 &#8211; 12&#215;28 &#8211; S+S couplers &#8211; Custom built &#8211; Fit by Counter Balance Bicycles (University Village, Seattle)
Still learning to maneuver &#8211; 103 flat miles in the first week
]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.flickr.com/photos/subbu_allamaraju/4651788660/" title="Co-Motion Persiscope Torpedo Tandem"><img src="http://farm5.static.flickr.com/4059/4651788660_e28140fb39.jpg" width="500" height="375" alt="P5290256" /></a></p>
<p><a href="http://www.co-motion.com">Co-Motion</a> Periscope Torpedo Tandem &#8211; Shimano Ultegra &#8211; FSA Gossamer 52-39-30 &#8211; 12&#215;28 &#8211; S+S couplers &#8211; Custom built &#8211; Fit by Counter Balance Bicycles (University Village, Seattle)</p>
<p>Still learning to maneuver &#8211; 103 flat miles in the first week</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/05/new-co-motion/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uncomplicated Hypermedia &#8211; Facebook&#8217;s Graph API</title>
		<link>http://www.subbu.org/blog/2010/04/uncomplicated-hypermedia-facebooks-graph-api</link>
		<comments>http://www.subbu.org/blog/2010/04/uncomplicated-hypermedia-facebooks-graph-api#comments</comments>
		<pubDate>Wed, 21 Apr 2010 20:01:27 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1168</guid>
		<description><![CDATA[It is a pleasure to read the Facebook Graph API. It avoided many of the traps that web services offered by the other major players in the industry suffer from. Facebook&#8217;s API is simple, consistent and inter-connected. It is true to the spirit of the web.
It is simple, because as a developer, I do not [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>It is a pleasure to read the <a href="http://developers.facebook.com/docs/api">Facebook Graph API</a>. It avoided many of the traps that web services offered by the other major players in the industry suffer from. Facebook&#8217;s API is simple, consistent and inter-connected. It is true to the spirit of the web.</p>
<p><strong>It is simple</strong>, because as a developer, I do not have to learn about 10 different web services for each of users, pages, events, groups, applications etc. Having a separate web service for each is like having &quot;end points&quot; &#8211; resources that are not connected, each with a different set of conventions. In the Facebook Graph API, there are no end-points.</p>
<p><strong>It is consistent</strong>, because all the representations look similar. Each representation has an identifier, a self-link, timestamps, and links to related resources. Apart from these being the ideal characteristics of representations on the web, for a developer, such representations are a pleasure to work with. Facebook just proves that you don&#8217;t need to focus heavily on formats like <a href="http://code.google.com/apis/gdata/index.html">Google Data Protocol</a> or <a href="http://www.odata.org/">Open Data Protocol</a> to design representations that are consistent.</p>
<p><strong>It is interconnected</strong> as every representation is linked to related resources. For instance, an album representation is linked to the profile that posted the album. Each user representation is linked to a collection of groups that the user is member of. This is hypermedia in action. <strong>Hypermedia does not have to be complicated &#8211; and Facebook just proves it.</strong></p>
<p>I am sure it is possible to nitpick on minor details, but the underlying philosophy cannot be ignored. Finally, support for OAuth 2.0 is the icing on the cake. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/04/uncomplicated-hypermedia-facebooks-graph-api/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Using PATCH</title>
		<link>http://www.subbu.org/blog/2010/04/using-patch</link>
		<comments>http://www.subbu.org/blog/2010/04/using-patch#comments</comments>
		<pubDate>Sat, 03 Apr 2010 04:24:14 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1157</guid>
		<description><![CDATA[Now that HTTP PATCH is official, would lack of standard media types and patch formats to describe partial updates to resource hamper its adoption? Most likely not.
The problem with any write request is maintaining integrity of the data in the backend. When a client submits POST or PUT requests, the server has to ensure that [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Now that HTTP <code>PATCH</code> is <a href="http://tools.ietf.org/html/rfc5789">official</a>, would lack of standard media types and patch formats to describe partial updates to resource hamper its adoption? Most likely not.</p>
<p>The problem with any write request is maintaining integrity of the data in the backend. When a client submits <code>POST</code> or <code>PUT</code> requests, the server has to ensure that the representation in the request is consistent with the business rules that govern what is valid and what is not. The media types used for representations along with documentation can describe client developers how to make such write requests that honor server&apos;s business rules.</p>
<p>The introduction of <code>PATCH</code> complicates this a bit more. In addition to describing valid resource representations for creating, updating, or doing <a href="http://my.safaribooksonline.com/9780596809140/recipe-how-to-use-controllers">other kinds of things</a> with <code>POST</code> and <code>DELETE</code>, the server now needs to tell clients what combinations of partial updates are valid for use with the <code>PATCH</code> method. General diff formats would leave the door open for clients to submit invalid combinations of partial updates that violate the business rules on the server side. To avoid this, it is better to come up with application specific representations for partial updates. See <a href="http://my.safaribooksonline.com/9780596809140/recipe-how-to-use-patch">How to Use PATCH</a> for an example. Lack of standard media type for diffs should not hold you from using the <code>PATCH</code> method.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/04/using-patch/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>RESTful Web Services Cookbook Released</title>
		<link>http://www.subbu.org/blog/2010/03/restful-web-services-cookbook-released</link>
		<comments>http://www.subbu.org/blog/2010/03/restful-web-services-cookbook-released#comments</comments>
		<pubDate>Thu, 11 Mar 2010 18:23:36 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1154</guid>
		<description><![CDATA[I am happy to announce that the RESTful Web Services Cookbook is now available in stores.

Many thanks to Mark Nottingham, Eben Hewitt, Colin Jack, Stefan Tilkov, Norbert Lindenberg, Chris Westin, Dan Theurer, Shaunak Kashyap, Larry Cable, Alan Dean, Surya Suravarapu, Jim D&#8217;Ambrosia, Randolph Kahle, Dhananjay Nene and Brian Sletten for their valuable and critical feedback [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I am happy to announce that the <a href="http://www.restful-webservices-cookbook.org">RESTful Web Services Cookbook</a> is now available in stores.</p>
<p><a href="http://www.flickr.com/photos/subbu_allamaraju/4424656487/"><img alt="" src="http://farm3.static.flickr.com/2771/4424656487_50e6234c55_d.jpg" title="RESTful Web Services Cookbook" class="alignnone" width="375" height="500" /></a></p>
<p>Many thanks to <a href="http://mnot.net">Mark Nottingham</a>, <a href="http://www.ebenhewitt.com/">Eben Hewitt</a>, <a href="http://colinjack.blogspot.com/">Colin Jack</a>, <a href="http://www.innoq.com/blog/st/">Stefan Tilkov</a>, Norbert Lindenberg, Chris Westin, Dan Theurer, Shaunak Kashyap, Larry Cable, <a href="http://alandean.blogspot.com/">Alan Dean</a>, <a href="http://www.suryasuravarapu.com/">Surya Suravarapu</a>, Jim D&#8217;Ambrosia, Randolph Kahle, <a href="http://blog.dhananjaynene.com/">Dhananjay Nene</a> and Brian Sletten for their valuable and critical feedback on this book.</para>
<p>If you are interested reviewing the book, please email me directly. The Yahoo! Developer Network may be interested in publishing a review.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/03/restful-web-services-cookbook-released/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Writing for O&#8217;Reilly</title>
		<link>http://www.subbu.org/blog/2010/02/writing-for-oreilly</link>
		<comments>http://www.subbu.org/blog/2010/02/writing-for-oreilly#comments</comments>
		<pubDate>Fri, 12 Feb 2010 03:08:43 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1148</guid>
		<description><![CDATA[
A source control system (Subversion) to manage the drafts from day 1
DocBook as the preferred format &#8211; which let me use IntelliJ with DocBook DTDs attached for validation
An auto-triggered build that generates a PDF version that looks more or less like the printed book
An editor that provides the right dose of nudging on occasion
Tool staff [...]]]></description>
			<content:encoded><![CDATA[<p></p><ul>
<li>A source control system (Subversion) to manage the drafts from day 1</li>
<li>DocBook as the preferred format &#8211; which let me use IntelliJ with DocBook DTDs attached for validation</li>
<li>An auto-triggered build that generates a PDF version that looks more or less like the printed book</li>
<li>An <a href="http://twitter.com/MaryTreseler">editor</a> that provides the right dose of nudging on occasion</li>
<li>Tool staff that are ready to help with tools and provide guidance on preferred use of DocBook</li>
<li>Copy editors that remind how badly I write, and painstakingly provide corrections</li>
<li>Production staff that follow through the process meticulously</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/02/writing-for-oreilly/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Keechelus Ridge Snowshoeing</title>
		<link>http://www.subbu.org/blog/2010/01/keechelus-ridge-snowshoeing</link>
		<comments>http://www.subbu.org/blog/2010/01/keechelus-ridge-snowshoeing#comments</comments>
		<pubDate>Sun, 31 Jan 2010 00:38:08 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[snowshoeing]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1144</guid>
		<description><![CDATA[We hiked up the Keechelus Ridge today. This is a moderately steep climb from the Price Creek Sno-Park. In just about three miles, this trail climbs over 1600 ft.

]]></description>
			<content:encoded><![CDATA[<p></p><p>We hiked up the <a href="http://www.wta.org/go-hiking/hikes/keechelus-ridge-snowshoe">Keechelus Ridge</a> today. This is a moderately steep climb from the Price Creek Sno-Park. In just about three miles, this trail climbs over 1600 ft.</p>
<p><object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fsubbu_allamaraju%2Fsets%2F72157623191492743%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fsubbu_allamaraju%2Fsets%2F72157623191492743%2F&#038;set_id=72157623191492743&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fsubbu_allamaraju%2Fsets%2F72157623191492743%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fsubbu_allamaraju%2Fsets%2F72157623191492743%2F&#038;set_id=72157623191492743&#038;jump_to=" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/01/keechelus-ridge-snowshoeing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envelope for Signatures</title>
		<link>http://www.subbu.org/blog/2010/01/envelope-for-signatures</link>
		<comments>http://www.subbu.org/blog/2010/01/envelope-for-signatures#comments</comments>
		<pubDate>Thu, 21 Jan 2010 05:49:11 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[HTTP]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1129</guid>
		<description><![CDATA[In Magic Signatures for Salmon, John Panzer describes a way to pass signed XML data without involving XML canonicalization (c14n). Anyone who has dealt with WS-Security specs knows that canonicalization can be fragile (back in my days at BEA, getting signatures to work on the WebLogic stack turned out to be hard due to bugs [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In <a href="http://www.abstractioneer.org/2010/01/magic-signatures-for-salmon.html">Magic Signatures for Salmon</a>, <a href="http://www.abstractioneer.org">John Panzer</a> describes a way to pass signed XML data without involving XML <a href="http://www.w3.org/TR/xml-c14n">canonicalization</a> (c14n). Anyone who has dealt with WS-Security specs knows that canonicalization can be fragile (back in my days at <a href="http://web.archive.org/web/20070830052359/www.bea.com/framework.jsp?CNT=homepage_main.jsp&#038;FP=/content">BEA</a>, getting signatures to work on the WebLogic stack turned out to be hard due to bugs in the c14n implementation) and slow. John Panzer&#8217;s approach is quite simple, but it requires introducing an XML based envelope format.</p>
<p><span id="more-1129"></span></p>
<p>In John&#8217;s approach, to send signed XML, the sender does the following.</p>
<ul>
<li>Serialize the XML using into UTF-8 encoded text.</li>
<li>Generate a signature of the BASE64 encoded data.</li>
<li>Use an XML envelope to send the BASE64 encoded data and the signature.</li>
</ul>
<p>Before decoding BASE64 data, the receiver first verifies the signature of the BASE64 encoded data. If the signature matches, the receiver BASE64 decodes the data, and then parses the decoded text into XML.The most elegant part of this process is that canonicalization is not needed.</p>
<p>The envelope in his example looks like the following:</p>
<pre class="brush: xml"  wrap-lines: true">
&lt;me:env xmlns:me='http://salmon-protocol.org/ns/magic-env'&gt;
  &lt;me:data type='application/atom+xml' encoding='base64'&gt;
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KPGVudHJ5IHhtbG5
zPSdodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20nPgogIDxpZD50YWc6ZXhhbXBsZ
S5jb20sMjAwOTpjbXQtMC40NDc3NTcxODwvaWQ-ICAKICA8YXV0aG9yPjxuYW1lPnRlc3RAZXhhbXBsZS5jb208L25hbWU-PHVyaT5hY2N0OmpwYW56ZXJAZ29vZ2xlLmNvbTwvdXJpPjwvYXV0aG9yPgogIDx0
aHI6aW4tcmVwbHktdG8geG1sbnM6dGhyPSdodHRwOi8vcHVybC5vcmcvc3luZGljYX
Rpb24vdGhyZWFkLzEuMCcKICAgICAgcmVmPSd0YWc6YmxvZ2dlci5jb20sMTk5OTp
ibG9nLTg5MzU5MTM3NDMxMzMxMjczNy5wb3N0LTM4NjE2NjMyNTg1Mzg4NTc5
NTQnPnRhZzpibG9nZ2VyLmNvbSwxOTk5OmJsb2ctODkzNTkxMzc0MzEzMzEyNzM
3LnBvc3QtMzg2MTY2MzI1ODUzODg1Nzk1NAogIDwvdGhyOmluLXJlcGx5LXRvPgog
IDxjb250ZW50PlNhbG1vbiBzd2ltIHVwc3RyZWFtITwvY29udGVudD4KICA8dGl0bGU-U2FsbW9uIHN3aW0gdXBzdHJlYW0hPC90aXRsZT4KICA8dXBkYXRlZD4yMDA5LTEyLT
E4VDIwOjA0OjAzWjwvdXBkYXRlZD4KPC9lbnRyeT4KICAgIA==&lt;/me:data&gt;
  &lt;me:alg&gt;RSA-SHA1&lt;/me:alg&gt;
  &lt;me:sig&gt;EvGSD2vi8qYcveHnb-rrlok07qnCXjn8YSeCDDXlbhILSabgvNsPpbe
76up8w63i2fWHvLKJzeGLKfyHg8ZomQ==&gt;/me:sig&gt;
&lt;/me:env&gt;
</pre>
<p>In this XML envelope, the <code>me:data</code> element contains BASE64 encoded data. The <code>type</code> attribute tells that the data is an Atom document. The <code>me:sig</code> element contains the signature.</p>
<p>But does sending a signature require an envelope? Here is an alternative that does not use an envelope.</p>
<pre class="brush: xml"  wrap-lines: true">
Content-Encoding: base64
Content-Type: application/atom+xml;chatset=UTF-8
Authorization: salmon EvGSD2vi8qYcveHnb-rrlok07qnCXjn8YSeCDDXlbhILSabgvNsPpbe76up8w63i2fWHvLKJzeGLKfyHg8ZomQ==

D94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KPGVudHJ5IHhtbG5
zPSdodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20nPgogIDxpZD50YWc6ZXhhbXBsZ
S5jb20sMjAwOTpjbXQtMC40NDc3NTcxODwvaWQ-ICAKICA8YXV0aG9yPjxuYW1lPnRlc3RAZXhhbXBsZS5jb208L25hbWU-PHVyaT5hY2N0OmpwYW56ZXJAZ29vZ2xlLmNvbTwvdXJpPjwvYXV0aG9yPgogIDx0
aHI6aW4tcmVwbHktdG8geG1sbnM6dGhyPSdodHRwOi8vcHVybC5vcmcvc3luZGljYX
Rpb24vdGhyZWFkLzEuMCcKICAgICAgcmVmPSd0YWc6YmxvZ2dlci5jb20sMTk5OTp
ibG9nLTg5MzU5MTM3NDMxMzMxMjczNy5wb3N0LTM4NjE2NjMyNTg1Mzg4NTc5
NTQnPnRhZzpibG9nZ2VyLmNvbSwxOTk5OmJsb2ctODkzNTkxMzc0MzEzMzEyNzM
3LnBvc3QtMzg2MTY2MzI1ODUzODg1Nzk1NAogIDwvdGhyOmluLXJlcGx5LXRvPgog
IDxjb250ZW50PlNhbG1vbiBzd2ltIHVwc3RyZWFtITwvY29udGVudD4KICA8dGl0bGU-U2FsbW9uIHN3aW0gdXBzdHJlYW0hPC90aXRsZT4KICA8dXBkYXRlZD4yMDA5LTEyLT
E4VDIwOjA0OjAzWjwvdXBkYXRlZD4KPC9lbnRyeT4KICAgIA==
</pre>
<p>In this case, the <code>Authorization</code> header contains the signature, and the body of HTTP message contains base64 encoded bytes. I extended <code>Content-Encoding</code> to specify <code>base64</code>. I left out details like the signature method name, and the <code>Authorization</code> header can be extended to include such data, or such details can be specified as part of the authorization scheme (the way basic auth, digest auth, or OAuth do).</p>
<p>The magic envelope is HTTP (thanks to MIME).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/01/envelope-for-signatures/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cache Invalidation</title>
		<link>http://www.subbu.org/blog/2010/01/cache-invalidation</link>
		<comments>http://www.subbu.org/blog/2010/01/cache-invalidation#comments</comments>
		<pubDate>Tue, 19 Jan 2010 04:58:18 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[HTTP]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1122</guid>
		<description><![CDATA[In the ideal world, what we see is the current. In the distributed software world, what we see may be stale. We can&apos;t tell. Would not it be nice to specify a cache invalidation API such that the source of the change can notify everyone that it changed? That is what an OpenSocial 1.0 draft [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In the ideal world, what we see is the current. In the distributed software world, what we see may be stale. We can&apos;t tell. Would not it be nice to specify a cache invalidation API such that the source of the change can notify everyone that it changed? That is what <a href="http://www.opensocial.org/Technical-Resources/draft/Core-API-Server.xml#Cache-Service">an OpenSocial 1.0 draft</a> aims to do.</p>
<p><span id="more-1122"></span></p>
<blockquote>
<p>Containers MUST support the invalidation endpoint even if they do not perform any caching and MUST provide an entry for it in their XRDS. To invalidate content a developer&#8217;s backend notifies the container of the content it wishes to invalidate by making a 2-legged OAuth call to the Cache service with one or many keys to be invalidated. The consumer key in the 2-legged OAuth call is used by the container to identify the calling application.</p>
</blockquote>
<p>This text is followed by an example.</p>
<pre>
POST /api/rest/cache/invalidate HTTP/1.1
Host: api.example.org
Authorization: hh5s93j4hdidpola
Content-Type: application/json

{
  "invalidationKeys" : [
      "http://www.myapp.com/gadgetspec.xml",
      "http://www.myapp.com/messagebundle.xml"
  ]
}
</pre>
<p>Excellent.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/01/cache-invalidation/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WS-REST 2010 Call for Papers</title>
		<link>http://www.subbu.org/blog/2010/01/ws-rest-2010-call-for-papers</link>
		<comments>http://www.subbu.org/blog/2010/01/ws-rest-2010-call-for-papers#comments</comments>
		<pubDate>Fri, 15 Jan 2010 16:54:35 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=1110</guid>
		<description><![CDATA[The due date (February 8, 2010) for WS-REST 2010 First International Workshop on RESTful Design is fast approaching. There is still time to submit papers for this workshop. Topics include:

Applications of the REST architectural style to novel domains
Design Patterns and Anti-Patterns for RESTful services
RESTful service composition
Inverted REST (REST for push events)
Integration of Pub/Sub with REST
Performance [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>The due date (February 8, 2010) for <a href="http://www.ws-rest.org">WS-REST 2010 First International Workshop on RESTful Design</a> is fast approaching. There is still time to submit papers for this workshop. Topics include:</p>
<ul>
<li>Applications of the REST architectural style to novel domains</li>
<li>Design Patterns and Anti-Patterns for RESTful services</li>
<li>RESTful service composition</li>
<li>Inverted REST (REST for push events)</li>
<li>Integration of Pub/Sub with REST</li>
<li>Performance and QoS Evaluations of RESTful services</li>
<li>REST compliant transaction models</li>
<li>Mashups</li>
<li>Frameworks and toolkits for RESTful service implementations</li>
<li>Frameworks and toolkits for RESTful service consumption</li>
<li>Modeling RESTful services</li>
<li>Resource Design and Granularity</li>
<li>Evolution of RESTful services</li>
<li>Versioning and Extension of REST APIs</li>
<li>HTTP extensions and replacements</li>
<li>REST compliant protocols beyond HTTP</li>
<li>Multi-Protocol REST (REST architectures across protocols)</li>
</ul>
<p>This list is exhaustive. In particular, I would love to see contributions presenting on <strong>performance and QoS</strong>, <strong>tradeoffs</strong>, <strong>HTTP extensions</strong> and <strong>client/server side frameworks</strong>. See the <a href="http://www.ws-rest.org/CfP">call for papers</a> for more details.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2010/01/ws-rest-2010-call-for-papers/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
