<?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>iansrobinson.com &#187; REST</title>
	<atom:link href="http://iansrobinson.com/category/rest/feed/" rel="self" type="application/rss+xml" />
	<link>http://iansrobinson.com</link>
	<description>Ian Robinson&#039;s Blog</description>
	<lastBuildDate>Thu, 02 Sep 2010 14:22:39 +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>Using Typed Links to Forms</title>
		<link>http://iansrobinson.com/2010/09/02/using-typed-links-to-forms/</link>
		<comments>http://iansrobinson.com/2010/09/02/using-typed-links-to-forms/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 14:22:39 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[REST in Practice]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=247</guid>
		<description><![CDATA[Nowadays, I tend to use a typed link leading to a form, rather than a heavily typed link alone (I&#8217;ll explain what I mean by heavily typed link shortly), to advertise unsafe operations and/or requests that require an entity body. Here&#8217;s an example of a typed link:

//Request
GET /shop HTTP/1.1
Host: restbucks.com
Accept: application/vnd.restbucks+xml

//Response
HTTP/1.1 200 OK
Date: Mon, 26 [...]]]></description>
			<content:encoded><![CDATA[<p>Nowadays, I tend to use a typed link leading to a form, rather than a heavily typed link alone (I&#8217;ll explain what I mean by heavily typed link shortly), to advertise unsafe operations and/or requests that require an entity body. Here&#8217;s an example of a typed link:</p>

<pre><code>//Request
GET /shop HTTP/1.1
Host: restbucks.com
Accept: application/vnd.restbucks+xml

//Response
HTTP/1.1 200 OK
Date: Mon, 26 Jul 2010 10:00:00 GMT
Cache-Control: public, max-age=86400
Content-Type: application/vnd.restbucks+xml
Content-Length: ...

&lt;shop xmlns=&quot;http://schemas.restbucks.com/shop&quot;&gt;
&nbsp;&nbsp;&lt;link rel=&quot;http://relations.restbucks.com/rfq&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=&quot;http://restbucks.com/request-for-quote&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;application/vnd.restbucks+xml&quot;/&gt;
&lt;/shop&gt;
</code></pre>

<p>The link here is typed with the link relation value <em>http://relations.restbucks.com/rfq</em>, which indicates that the link points to a resource where a request for a quote can be submitted. Following the link, the client retrieves a form:</p>

<pre><code>//Request
GET /request-for-quote HTTP/1.1
Host: restbucks.com
Accept: application/vnd.restbucks+xml

//Response
HTTP/1.1 200 OK
Date: Mon, 26 Jul 2010 10:00:05 GMT
Cache-Control: public, max-age=86400
Content-Type: application/vnd.restbucks+xml
Content-Length: ...

&lt;model xmlns=&quot;http://www.w3.org/2002/xforms&quot;
&nbsp;&nbsp;schema=&quot;http://schemas.restbucks.com/rfq.xsd&quot;&gt;
&nbsp;&nbsp;&lt;submission
&nbsp;&nbsp;&nbsp;&nbsp;resource=&quot;http://restbucks.com/quotes&quot; 
&nbsp;&nbsp;&nbsp;&nbsp;method=&quot;post&quot; 
&nbsp;&nbsp;&nbsp;&nbsp;mediatype=&quot;application/vnd.restbucks+xml&quot;/&gt;
&lt;/model&gt;
</code></pre>

<p>The response entity body comprises an <a href="http://www.w3.org/TR/xforms11/" title="XForms 1.1" target="_blank">XForms</a> form model. (Our custom media type definition for <code>application/vnd.restbucks+xml</code> says that one of the things a client can expect to receive in a response is an XForms form model.) The form&#8217;s <code>&lt;submission&gt;</code> element includes several pieces of control data: it indicates which verb to use when submitting the form (<code>POST</code>), where to submit the form (<em>http://restbucks.com/quotes</em>), and which content or media type to use when submitting the form (<em>application/vnd.restbucks+xml</em>). Because the definition of our custom media type includes more than one XML schema (much as the Atom specification defines two schemas, one for feeds and one for entries), the form&#8217;s control data needs to further clarify what <em>/quotes</em> expects to receive in a <code>POST</code> request. To clarify which schema the <code>POST</code> request body should adhere to, the <code>&lt;model&gt;</code> element&#8217;s <code>schema</code> attribute references the <em>rfq.xsd</em> schema.</p>

<p>Here, then, we have all the information a client needs to construct and submit a valid request to the <em>/quotes</em> resource. And all without any fields for the client to fill out.</p>

<h2>Heavily typed links</h2>

<p>A heavily typed link is one where the link relation describes not only the relationship to the linked resource, but also the HTTP idioms &#8211; the control data &#8211; necessary to manipulate that resource.</p>

<p>Using a heavily typed link our shop could link directly to the <em>/quotes</em> resource, instead of to a form:</p>

<pre><code>&lt;shop xmlns=&quot;http://schemas.restbucks.com/shop&quot;&gt;
&nbsp;&nbsp;&lt;link rel=&quot;http://relations.restbucks.com/quotes&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=&quot;http://restbucks.com/quotes&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;application/vnd.restbucks+xml&quot;/&gt;
&lt;/shop&gt;
</code></pre>

<p>Here, the definition of the link relation <em>http://relations.restbucks.com/quotes</em> might be something like: &#8220;Indicates a collection of quotes. To request a quote, <code>POST</code> a <code>&lt;request-for-quote&gt;</code> with a <code>Content-Type</code> header of <code>application/vnd.restbucks+xml</code> to the linked resource.&#8221;</p>

<p>That&#8217;s a perfectly respectable way of using links and link relations; in fact, it&#8217;s the strategy we employ in <a href="http://restinpractice.com" title="REST in Practice" target="_blank"><em>REST in Practice</em></a>. But it can have its downsides. Most importantly, it can increase the coupling between the client and any resources that employ link relations.</p> 

<p>Make no mistake: link relation semantics comprise out-of-band knowledge. There&#8217;s no magic here: link relations introduce a degree of coupling between a client and any server-governed resources that adopt them. The trick is to keep this coupling as low as possible. By putting control data in the link relation definition, we perhaps introduce more coupling than is strictly necessary.</p>

<p>Out-of-band data is less visible, and more difficult and more costly to change, than data that is inlined in the message. Whilst the control data may not change all that often, changes can and do sometimes happen; inlining the data allows these changes to be propagated to clients sooner rather than later. Control data produced at the time the response is generated is generally more recent than control data defined through some out-of-band mechanism.</p>

<p>Using lightly typed links helps separate semantics from control data. A &#8220;light&#8221; link relation indicates <em>what</em> the linked resource means in the context of the current representation &#8211; that&#8217;s all. This helps mitigate against a second, somewhat more subtle, downside of adding control data to link relations: the tendency to introduce <em>action</em> semantics. It&#8217;s no great step to shorten the link relation value above to <em>http://relations.restbucks.com/quote</em>, and to rewrite its semantic to read &#8220;Indicates an opportunity to request a quote by <code>POST</code>ing a <code>&lt;request-for-quote&gt;</code> with a <code>Content-Type</code> header of <code>application/vnd.restbucks+xml</code> to the linked resource.&#8221; At this point, our link has effectively become an operation. The typed-link-to-form strategy helps us concentrate on describing what a linked resource <em>is</em>, rather than what a link <em>does</em>. Link relations do not necessarily imply action semantics, but they can very easily be made to do so.</p>

<p>(Note: when adding links to representations, I still prefer to use a <code>&lt;link rel=&quot;...&quot; href=&quot;...&quot;&gt;</code> construct, or something similar, rather than <code>&lt;order-form href=&quot;...&quot;&gt;</code>. The reason for this is that elements such as <code>&lt;link&gt;</code> separate link syntax from semantic context, as explained <a href="http://iansrobinson.com/2009/07/16/how-do-you-link/" title="How Do You Link?" target="_blank">here</a>; and this is a good thing, because what a link ought look like &#8211; its syntax &#8211; changes far less than what a link might mean in a particular context. By separating these concerns, we make it easier to evolve a distributed application.)</p>

<p>Interestingly, on the wire, the result of submitting an XForm form looks exactly the same as if we&#8217;d simply <code>POST</code>ed a <code>&lt;request-for-quote&gt;</code> directly to <em>/quotes</em>:</p>

<pre><code>//Request
POST /quotes HTTP/1.1
Host: restbucks.com
Content-Type: application/vnd.restbucks+xml
Content-Length: ...

&lt;request-for-quote xmlns=&quot;http://schemas.restbucks.com/rfq&quot;&gt;
&nbsp;&nbsp;&lt;items&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Costa Rica Tarrazu&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;amount&gt;250g&lt;/amount&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Guatemala Elephant Beans&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;amount&gt;250g&lt;/amount&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;
&nbsp;&nbsp;&lt;/items&gt;
&lt;/request-for-quote&gt;
</code></pre>

<p>Knowing this, we could always add both a lightly typed link to a form <em>and</em> a heavily typed link to our shop representation:</p>

<pre><code>&lt;shop xmlns=&quot;http://schemas.restbucks.com/shop&quot;&gt;
&nbsp;&nbsp;&lt;link rel=&quot;http://relations.restbucks.com/rfq&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=&quot;http://restbucks.com/request-for-quote&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;application/vnd.restbucks+xml&quot;/&gt;
&nbsp;&nbsp;&lt;link rel=&quot;http://relations.restbucks.com/quotes&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=&quot;http://restbucks.com/quotes&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;application/vnd.restbucks+xml&quot;/&gt;
&lt;/shop&gt;
</code></pre>

<p>Two paths to the same result. I don&#8217;t recommend doing this: I include simply to highlight how a linked form achieves the exact same result, but with the added beenfit of having inlined control data.</p>

<h2>Pre-filled forms/self-describing requests</h2>

<p>Here&#8217;s another example of using a typed link to a form:<p>
  
<pre><code>//Request
GET /quotes/1234
Host: restbucks.com
Accept: application/vnd.restbucks+xml

//Response
HTTP/1.1 200 OK
Cache-Control: public
Date: Mon, 26 Jul 2010 10:01:00 GMT
Expires: Mon, 02 Aug 2010 10:01:00 GMT
Content-Type: application/vnd.restbucks+xml
Content-Length: ...

&lt;quote xmlns=&quot;http://schemas.restbucks.com/quote&quot;&gt;
&nbsp;&nbsp;&lt;items&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Costa Rica Tarrazu&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;amount&gt;250g&lt;/amount&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price currency=&quot;GBP&quot;&gt;4.40&lt;/price&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Guatemala Elephant Beans&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;amount&gt;250g&lt;/amount&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price currency=&quot;GBP&quot;&gt;5.30&lt;/price&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;
&nbsp;&nbsp;&lt;/items&gt;
&nbsp;&nbsp;&lt;link rel=&quot;http://relations.restbucks.com/order-form&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=&quot;http://restbucks.com/order-forms/1234&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;application/vnd.restbucks+xml&quot;/&gt;
&lt;/quote&gt;
</code></pre>
  
<p>The link relation <em>http://relations.restbucks.com/order-form</em> indicates that the linked resource is something that allows an order to be submitted. Following this link, the client retrieves an order form:<p>

<pre><code>//Request
GET /order-forms/1234
Host: restbucks.com
Accept: application/vnd.restbucks+xml

//Response
HTTP/1.1 200 OK
Cache-Control: public
Date: Mon, 26 Jul 2010 10:01:05 GMT
Expires: Mon, 02 Aug 2010 10:01:00 GMT
Content-Type: application/vnd.restbucks+xml
Content-Length: ...
Content-Location: http://restbucks.com/quotes/1234

&lt;model xmlns=&quot;http://www.w3.org/2002/xforms&quot;&gt;
&nbsp;&nbsp;&lt;instance&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;quote xmlns=&quot;http://schemas.restbucks.com/quote&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;items&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Costa Rica Tarrazu&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;amount&gt;250g&lt;/amount&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price currency=&quot;GBP&quot;&gt;4.40&lt;/price&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Guatemala Elephant Beans&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;amount&gt;250g&lt;/amount&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price currency=&quot;GBP&quot;&gt;5.30&lt;/price&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/items&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link rel=&quot;self&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href=&quot;http://restbucks.com/quotes/1234&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;application/vnd.restbucks+xml&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/quote&gt;
&nbsp;&nbsp;&lt;/instance&gt;
&nbsp;&nbsp;&lt;submission
&nbsp;&nbsp;&nbsp;&nbsp;resource=&quot;http://restbucks.com/orders&quot; 
&nbsp;&nbsp;&nbsp;&nbsp;method=&quot;post&quot; 
&nbsp;&nbsp;&nbsp;&nbsp;mediatype=&quot;application/vnd.restbucks+xml&quot;/&gt;
&lt;/model&gt;
</code></pre>

<p>Once again, I&#8217;ve used an XForms form model, but this time I&#8217;ve pre-filled it with an <code>&lt;instance&gt;</code> element. Even so, there are no form fields to fill in; all the client needs to do is operate the form according to the inlined control data.</p>

<p>The interesting thing here is that <em>/order-forms/1234</em> simply returns a different representation of the quote resource identified by <em>/quotes/1234</em> (the response indicates as much in its <code>Content-Location</code> header). By supplying a forms-based representation of the quote, we inline all the information necessary to submit an order to an order processing engine. The client doesn&#8217;t need to compose an entity body; it simply needs to operate the form according to its control data. This results in a self-describing message being sent to <em>/orders</em>.<p>

<p>(In a real-world application I&#8217;d likely include a signature in the form body. This signature would guarantee that the client hasn&#8217;t tampered with the form contents prior to submitting the form to the order processing engine. The effectiveness of the signature depends on an out-of-band trust relationship having been established between the quoting engine and the order processing engine.)</p>

<p>The result of first following the link to the form, and then submitting the form, is to transition the overall state of the distributed application from <em>Quote Requested</em> to <em>Order Placed</em>, as illustrated in the following diagram:</p>

<p><img src="http://iansrobinson.com/wp-content/uploads/2010/09/application-state-transition.png" alt="Application state transition" title="Application state transition" width="450" height="252" class="size-full wp-image-96" /></p>

<p>Every request-response pair transforms application state. Retrieving the form <em>enriches</em> the client&#8217;s understanding of the current application state; that is, it opens up new opportunities for interacting with other resources. <code>POST</code>ing the form causes the application state to <em>transition</em> from <em>Quote Requested</em> to <em>Order Placed</em>.</p>

<p>The fact that the overall state of the application has changed is of no consequence to the server resources involved; the application state model is nowhere baked into the server resources. As far as the quote resource is concerned, it has simply been asked to surface a forms-based representation of itself. As far as the orders resource is concerned, it has simply created a new, subordinate order resource. This change in application state is, however, important to the client.</p>

<h2>Summary</h2>

<p>Understand the tradeoffs between inlining and putting control data in an out-of-band mechanism. Use the right controls for the job; understand the many different hypermedia capabilities at your disposal. The best resource for this is Mike Amundsen&#8217;s <a href="http://www.amundsen.com/hypermedia/" title="Hypermedia Types" target="_blank">in-depth study</a> of the hypermedia capabilities of many different kinds of hypermedia control. Recently, Andrew Wahbe started examining the need for <a href="http://linkednotbound.net/2010/08/25/m2m-hypermedia/" title="" target="_blank">machine-to-machine hypermedia</a>, and the differences between controls for machines and controls for humans. Watch his blog for further discussion.</p>

<p>My understanding of hypermedia controls has been heavily influenced by my experience of the human web, where links and forms predominate. But when we talk about forms in a machine-to-machine context, it&#8217;s not the form field elements that are of interest, it&#8217;s the control data elements. These control data elements help program the client on the fly. The term &#8220;form&#8221; as it applies in a machine-to-machine context is likely an inappropriate metaphor; nonetheless, it does emphasize the fact that unsafe requests &#8211; and requests that have an entity body &#8211; require different hypermedia capabilities from simple <code>GET</code>s.</p>

<p>Because in the past I&#8217;ve tended to think form fields are redundant in machine-to-machine scenarios, I&#8217;ve avoided using forms at all, and have instead overloaded link relations with control data. But link relations are not a &#8220;get out of jail free&#8221; card. In overloading link relations, we add unnecessary coupling.</p>

<p>Coupling, of course, is not an all-or-nothing affair. There are degrees of coupling. We choose to accept some coupling because of the benefits it brings. But that doesn&#8217;t mean we should accept more coupling than is necessary; doing so can only inhibit our ability to evolve a distributed application.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/09/02/using-typed-links-to-forms/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>REST in Practice Tutorials, Sept-Oct</title>
		<link>http://iansrobinson.com/2010/08/27/rest-in-practice-tutorials-sept-oct/</link>
		<comments>http://iansrobinson.com/2010/08/27/rest-in-practice-tutorials-sept-oct/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 13:34:10 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=236</guid>
		<description><![CDATA[Over the next couple of months, Jim Webber and I will be running several day-long REST tutorials:


Following JavaZone, we&#8217;ll be at Oslo&#8217;s Henning Solberg on Friday, 10th September. You can register for JavaZone here, and for the tutorial here.
At the beginning of October, we&#8217;re at the wonderful JAOO Aarhus, with the tutorial running throughout the [...]]]></description>
			<content:encoded><![CDATA[<p>Over the next couple of months, <a href="http://jim.webber.name" title="Jim Webber's blog" target="_blank">Jim Webber</a> and I will be running several day-long REST tutorials:</p>

<ul>
<li>Following <a title="JavaZone" target="_blank" href="http://jz10.java.no/">JavaZone</a>, we&#8217;ll be at Oslo&#8217;s <a title="REST in Practice" target="_blank" href="http://www.programutvikling.no/kurskalenderoversikt.aspx?mid_1=1352&#038;mid=1535&#038;id=858735">Henning Solberg</a> on Friday, 10th September. You can register for JavaZone <a href="http://shop.java.no/" title="Register for JavaZone" target="_blank">here</a>, and for the tutorial <a title="Register for REST in Practice, Henning Solberg" target="_blank" href="http://www.programutvikling.no/kurs_bestill.aspx?mid_1=1354&#038;step=2&#038;mid=1549&#038;course=858750&#038;type=858735&#038;lang=no">here</a>.</li>
<li>At the beginning of October, we&#8217;re at the wonderful JAOO Aarhus, with the tutorial running throughout the day on Friday 8th October. Register <a title="Register for JAOO" target="_blank" href="https://secure.trifork.com/aarhus-2010/registration/">here</a>, with a 20% discount if you use the <em>JAOOspeakerfollower</em> promo code.</li>
<li>Closer to home, we&#8217;ll be at <a href="http://www.software-architect.co.uk/sessions/postworkshops.asp">Software Architect 2010</a> in London on Friday, 22nd October. You can register for the conference and tutorial <a title="Register for Software Architect 2010" target="_blank" href="http://www.software-architect.co.uk/registration/">here</a>.</li>
</ul>

<p>The tutorial agenda closely follows the structure of <a title="REST in Practice" target="_blank" href="http://restinpractice.com"><em>REST in Practice</em></a>, which hits the shelves on Sept 24th:</p>

<ul>
<li>The Web Architecture: HTTP and URIs</li>
<li>The Richardson Maturity Model</li>
<li>CRUD Services using URI templates and HTTP</li>
<li>Hypermedia and the REST architectural style</li>
<li>Implementing domain application protocols</li>
<li>Atom- and AtomPub-based event-driven systems</li>
<li>Scalability through caching</li>
<li>Semantics using Microformats and RDF</li>
<li>Security and the -ilities</li>
</ul>

<p>With ThoughtWorks recently having opened an office in Germany, I&#8217;ll also be presenting at <a href="http://www.herbstcampus.de/" target="_blank" title="Herbstcampus">Herbstcampus</a> in Nuremberg, 12-15th October.</p>

<p>And finally, if your want to enjoy some <em>REST in Practice</em> from the comfort of your own office (or home), there&#8217;s still time to sign up for the ThoughtWorks&#8217; Webinar, <a href="http://thoughtworker.com/events/master-class-online-designing-and-implementing-restful-application-protocols" target="_blank" title="Master Class Online - Designing and Implementing RESTful Application Protocols"><em>Designing and Implementing RESTful Application Protocols</em></a>, which takes place on Wednesday, 1st September, at 6.30pm IST (that&#8217;s, er, sometime in the afternoon GMT).</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/08/27/rest-in-practice-tutorials-sept-oct/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WS-REST 2010 Proceedings</title>
		<link>http://iansrobinson.com/2010/04/28/ws-rest-2010-proceedings/</link>
		<comments>http://iansrobinson.com/2010/04/28/ws-rest-2010-proceedings/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 19:19:19 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=220</guid>
		<description><![CDATA[The preliminary proceedings for ]]></description>
			<content:encoded><![CDATA[<p>The preliminary proceedings for <a href="http://www.ws-rest.org/Program" title=WS-REST 2010 First International Workshop on RESTful Design" target="_blank">WS-REST 2010</a> are now available <a href="http://www.ws-rest.org/Proceedings" title="Proceeedings" target="_blank">online</a>. Thanks to <a href="http://www.inf.usi.ch/faculty/pautasso/" title="Cesare Pautasso" target="_blank">Cesare Pautasso</a>, <a href="http://dret.net/netdret/" title="Erik Wilde" target="_blank">Erik Wilde</a>, and <a href="http://www2.surrey.ac.uk/computing/people/marinos_alexandros/" title="Alexandros Marinos" target="_blank">Alexandros Marinos</a> for organising what proved to be a very engaging and wide-ranging workshop; and to <a href="http://blog.caelumobjects.com/" title="Guilherme Silveira" target="_blank">Guilherme Silveira</a>, who &#8211; much to my amusement &#8211; 20 minutes before the workshop started wrote the Restfulie implementation to accompany the paper that we were there to present. The slides for this paper, which was written by <a href="http://savas.me/" title="Savas Parastatidis" target="_blank">Savas</a>, <a href="http://jim.webber.name/" title="Jim Webber" target="_blank">Jim</a>, Guilherme and me, can be downloaded <a href="http://www.ws-rest.org/files/02-The%20Role%20of%20Hypermedia%20in%20Distributed%20Application%20Development.pdf" title="The Role of Hypermedia in Distributed Application Development" target="_blank">here</a>.</p>

<p>I understand that someone recorded the panel session at the end of the day: I&#8217;ll post details as soon as the recording becomes available.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/04/28/ws-rest-2010-proceedings/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Counterintuitive Web</title>
		<link>http://iansrobinson.com/2010/03/15/the-counterintuitive-web/</link>
		<comments>http://iansrobinson.com/2010/03/15/the-counterintuitive-web/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 12:47:53 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=215</guid>
		<description><![CDATA[The slides from last week&#8217;s talk at QCon, The Counterintuitive Web, are now available online. 

In the talk I described how we can implement rich and interesting business processes in (RESTful) Web applications, but only if we think in terms of protocol resources, not coarse-grained domain resources. By embracing the Web as first and foremost [...]]]></description>
			<content:encoded><![CDATA[<p>The slides from last week&#8217;s talk at QCon, <a href="http://qconlondon.com/london-2010/presentation/The+Counterintuitive+Web" title="The Counterintuitive Web" target="_blank"><em>The Counterintuitive Web</em></a>, are now <a href="http://qconlondon.com/london-2010/file?path=/qcon-london-2010/slides/IanRobinson_TheCounterintuitiveWeb.pdf" title="Slides (11 MB)" target="_blank">available online</a>.</p> 

<p>In the talk I described how we can implement rich and interesting business processes in (RESTful) Web applications, but only if we think in terms of protocol resources, not coarse-grained domain resources. By embracing the Web as first and foremost a web of data, an open set of resource representations manipulated in the same-old-same-old ways using a closed set of verbs, our designs capture the behaviours most CRUD-based, data-centric applications so sorely lack.</p>

<p>Many thanks to <a href="http://dannorth.net/" title="Dan North's blog" target="_blank">Dan North</a> for inviting me to speak on his <a href="http://qconlondon.com/london-2010/tracks/show_track.jsp?trackOID=329" title="Irresponsible Architectures and Unusual Architects" target="_blank"><em>Irresponsible Architectures and Unusual Architects</em></a> track.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/03/15/the-counterintuitive-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>London Geek Night</title>
		<link>http://iansrobinson.com/2010/02/12/london-geek-night/</link>
		<comments>http://iansrobinson.com/2010/02/12/london-geek-night/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 16:25:41 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=192</guid>
		<description><![CDATA[Updated The video of Thursday&#8217;s London Geek Night is now online. Thanks to Ikenna Okpala and Skills Matter for recording the event.

Thank you to everyone who came along to the London Geek Night last night. There were many good questions and comments throughout the evening. I didn&#8217;t respond to all of them satisfactorily at the [...]]]></description>
			<content:encoded><![CDATA[<p><b>Updated</b> The video of Thursday&#8217;s London Geek Night is now <a href="http://skillsmatter.com/podcast/ajax-ria/hydra-and-hypermedia" title="Hydras and Hypermedia" target="_blank">online</a>. Thanks to <a href="http://ikennaokpala.wordpress.com/" title="Ikenna Okpala's blog" target="_blank">Ikenna Okpala</a> and <a href="http://skillsmatter.com/" title="Skills Matter" target="_blank">Skills Matter</a> for recording the event.</p>

<p>Thank you to everyone who came along to the London Geek Night last night. There were many good questions and comments throughout the evening. I didn&#8217;t respond to all of them satisfactorily at the time, so I thought I&#8217;d expand on a few of them here.</p>

<h3>Enforcing the protocol</h3>

<p><a href="http://alexscordellis.blogspot.com/" title="Alex Scordellis's blog" target="_blank">Alex Scordellis</a> asked a very challenging question: how does the server prevent the client from &#8220;teleporting&#8221; to locations that aren&#8217;t immediately accessible from its current location? In other words, how do we stop the client jumping around the app, ignoring the advertised URIs, going off the rails, and interacting with resources in a way that contravenes the application protocol?</p>

<p>One solution to this problem is to use ephemeral URIs. Remember, other than the entry point URI, every URI the client encounters will have been minted by the server as it generates representations. By appending an expiry time, signed using a private key held only by the server, to each URI, we can ensure that each URI the client is given is valid only for a short period of time. <a href="http://www.subbu.org/" title="Subbu Allamaraju's blog" target="_blank">Subbu Allamaraju</a> and <a href="http://www.amundsen.com/blog/" title="Mike Amundsen's blog" target="_blank">Mike Amundsen</a> talk about ephemeral URIs in their forthcoming book, <a href="http://www.restful-webservices-cookbook.org/" title="RESTful Web Services Cookbook" target="_blank">RESTful Web Services Cookbook</a>. Amazon S3 offers the capability to sign URIs in just this fashion so as to limit access to resources.</p>

<p>Of course, this still leaves a short &#8220;teleport&#8221; window open, which the client can use to make multiple requests of a resource that it ought no longer access. To close this window, we might consider maintaining a secret resource access counter per ephemeral URI inside the server implementation. When the counter limit is reached, the server replies with 204 No Content. The only way for the client to access this resource again would be for it to play fair by the application protocol, navigating advertised transitions until it comes upon a representation containing a link (with new ephemeral URI) to the desired resource.</p>

<p>It can be argued that a GET that increments a secret counter associated with a resource (at an ephemeral URI) is no longer safe. Is the incrementing of a secret counter an unintended user-visible side-effect? The argument is played out in the comments to a post from <a href="http://intertwingly.net/blog/" title="Sam Ruby's blog" target="_blank">Sam Ruby</a> from 2002. Read the comments <a href="http://intertwingly.net/blog/2002/09/02/Shades-of-Grey" title="Shades of Grey" target="_blank">here</a> and make up your own mind.</p>

<h3>Resource design</h3>

<p><a href="http://www.oshineye.com/theAbode.html" title="Adewale Oshineye's blog" target="_blank">Adewale Oshineye</a> asked how a design ought accommodate making small changes to large resources &#8211; is this necessarily an inefficient operation that requires the client to PUT the entire representation back? He also asked how one might support large batch operations in an efficient manner.</p>

<p>HTTP PATCH supplies one mechanism for dealing with partial updates, which fall under Adewale&#8217;s first question. Taken together, however, I feel Adewale&#8217;s questions lead us to reflect on the role of resource design in the overall design and implementation of a RESTful application. If we model our resources based simply on an understanding of business resources, we can end up with a resource landscape that&#8217;s not amenable to being manipulate din the way we require.</p>

<p>The first piece of advice usually given a would-be service designer is: identify your resources and assign them URIs. But this can all too easily lead us to identify only business resources &#8211; customer, product, order, etc &#8211; and equate these business resources with the resources our service exposes. But remember, the resources we deal with on the Web are information resources, which are somewhat more abstract than the business resources we typically capture in a domain model.<p>

<p>The design and implementation strategy that <a href="http://jim.webber.name/" title="Jim Webber's blog" target="_blank">Jim</a>, <a href="http://savas.me/" title="Savas Parastatidis's blog" target="_blank">Savas</a> and I recommend in <a href="http://www.facebook.com/RESTinPractice" title="REST in Practice" target="_blank"><em>REST in Practice</em></a> is:</p>

<ol start="1">
<li>Design applications in terms of application protocol state machines</li>
<li>Implement them in terms of resource lifecycles</li>
<li>Advertise/document them using media types, link relation values and HTTP idioms</li>
</ol>

<p>The transition from 1. to 2. here requires the service designer to decompose an application protocol into whatever information resources and information resource lifecycles are necessary to realise the protocol. The kinds of resources you identify using this approach may look a little different from the ones you would have identified had you taken a business domain resource approach.</p>

<p>I&#8217;m being a little vague here, but it&#8217;s a subject I plan to develop in more detail at <a href="http://qconlondon.com/london-2010/presentation/The+Counterintuitive+Web" title="The Counterintuitive Web" target="_blank">QCon London</a>.</p>

<h3>And finally&#8230;</h3>

<p>In other comments, <a href="http://twitter.com/otfrom" title="Bruce Durling" target="_blank">Bruce Durling</a> pointed out I was mixing up 3rd edition <em>D&#038;D</em> and 1st edition <em>AD&#038;D</em> rules. Guilty as charged. -1 Credibility, no saving throw.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/02/12/london-geek-night/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Hydras and Hypermedia at London Geek Night</title>
		<link>http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/</link>
		<comments>http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:42:16 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=178</guid>
		<description><![CDATA[

On February 11th I&#8217;ll be presenting Hydras and Hypermedia at London Geek Night.

Do you know what your enterprise apps get up to in their time off? Fighting fantasy, pick-your-path, hypermedia-driven, RESTful Web application adventures &#8211; of course.

In this speculative dungeon delve I&#8217;ll show how we can use hypermedia-driven Web applications to model rich workflows. We&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<div class="vcalendar">

<p>On February 11th I&#8217;ll be presenting <em>Hydras and Hypermedia</em> at <a href="http://londongeeknights.wetpaint.com/page/Hydras%20and%20Hypermedia" title="London Geek Night" target="_blank">London Geek Night</a>.</p>

<p>Do you know what your enterprise apps get up to in their time off? Fighting fantasy, pick-your-path, hypermedia-driven, RESTful Web application adventures &#8211; of course.</p>

<p>In this speculative dungeon delve I&#8217;ll show how we can use hypermedia-driven Web applications to model rich workflows. We&#8217;ll tackle the many-headed Hydra of HATEOAS, the &#8220;Hypermedia as the Engine of Application State&#8221; monster; level up through the Web services maturity heuristic; and meet the dwarves with grudges. On the way, we&#8217;ll learn how to model business processes as domain application protocols, implement them in terms of resource lifecycles, and advertise them using HTTP idioms, media types and link relation values.</p>

<dl id="hcalendar-Hydras-and-Hypermedia" class="vevent">
<dt>Event</dt>
<dd><a href="http://londongeeknights.wetpaint.com/page/Hydras%20and%20Hypermedia" class="url summary" title="London Geek Night" target="_blank">London Geek Night</a></dd>
<dt>Description</dt>
<dd><em class="description">Hydras and Hypermedia</em></dd>
<dt>Date</dt>
<dd><span class="eventdate">11th February</span></dd>
<dt>Time</dt>
<dd><span class="eventtime"><abbr title="20100211T1900+0100" class="dtstart">7 pm</abbr> &#8211; <abbr title="20100211T2200+0100" class="dtend">10 pm</abbr></span></dd>
<dt>Location</dt>
<dd class="location">
	<div class="vcard">
		<span class="fn org">ThoughtWorks UK Office</span>
		<div class="adr">
			<span class="street-address">Berkshire House</span>
			<span class="locality">168-173 High Holborn</span>
			<span class="region">London</span>
			<span class="postal-code">WC1V 7AA</span>
		</div>
	</div>
</dd>
</dl>

</div>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>When to Use Atom</title>
		<link>http://iansrobinson.com/2010/01/19/when-to-use-atom/</link>
		<comments>http://iansrobinson.com/2010/01/19/when-to-use-atom/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 17:00:47 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=170</guid>
		<description><![CDATA[There are two extremes of Atom usage: everything&#8217;s an Atom extension (direct extension) versus everything goes in the atom:content element (enveloping).

A little while ago, Bill de hÓra expressed his preference for direct extension over enveloping. At its worst, enveloping results in near anaemic Atom entries, with very few of the Atom metadata elements put to [...]]]></description>
			<content:encoded><![CDATA[<p>There are two extremes of Atom usage: <em>everything&#8217;s an Atom extension</em> (direct extension) versus <em>everything goes in the <code>atom:content</code> element</em> (enveloping).</p>

<p>A little while ago, Bill de hÓra expressed his preference for <a href="http://www.dehora.net/journal/2009/11/28/extensions-v-envelopes/" title="Extensions v Envelopes" target="_blank">direct extension over enveloping</a>. At its worst, enveloping results in near anaemic Atom entries, with very few of the Atom metadata elements put to good use, rightly prompting Bill&#8217;s question: &#8220;why bother using Atom at all?&#8221;</p>

<p>Like Bill, I&#8217;ve gone back and forth between these two options. At present, I&#8217;m inclined to use enveloping more than direct extension, but only if I can still put the Atom metadata to good use. If I find I&#8217;m having to fill out Atom metadata elements with lots of dummy information, just so that I can use Atom to transfer some opaque data between applications, I quickly turn to another format.</p>

<p>To my mind, Atom&#8217;s &#8220;meta-purpose&#8221; is to establish a domain processing context for some content. In AtomPub, Atom artefacts establish a publishing context for Web content. When used to establish this publishing context, the Atom artefacts are called collections and members, rather than feeds and entries.</p>

<p>I prefer not to extend Atom beyond the domain processing context I&#8217;m trying to model: instead, I push the thing to be processed down into the content. This allows for <em>media type composition</em>, whereby one media type processor hands off to another as it works its way through a representation. A reasonably &#8220;generic&#8221; Atom client can resurrect the domain processing context, which then remains in force whilst a specialized media type handler deals with the content (according to its media type).</p>

<p>In the past I&#8217;ve illustrated this point by showing how <a href="http://www.infoq.com/presentations/robinson-restful-enterprise" title="RESTful Enterprise Development" target="_blank">Atom feeds can be used to represent streams of events</a>. The event metadata maps nicely to Atom metadata. The content itself contains a snapshot of some other resource&#8217;s state at the point the event occurred. In other words, the Atom metadata establishes an event-ish processing context for the content. When the client invokes a specialised handler for the content, it does so in the knowledge that its dealing with a representation of state at a particular point of time.</p>

<p>If I can&#8217;t separate a given problem into 1) an activity and accompanying processing context (e.g. &#8220;eventing&#8221;, &#8220;publishing&#8221;), and 2) the thing to be acted on, I&#8217;ll consider using something other than Atom.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/01/19/when-to-use-atom/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Call for Papers: WS-REST 2010</title>
		<link>http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/</link>
		<comments>http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 11:59:11 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=158</guid>
		<description><![CDATA[Paper Submission: February 8, 2010

Call for Papers

The First International Workshop on RESTful Design (WS-REST 2010) aims to provide a forum for discussion and dissemination of research on the emerging resource-oriented style of Web service design.

Background

Over the past few years, several discussions between advocates of the two major architectural styles for designing and implementing Web services [...]]]></description>
			<content:encoded><![CDATA[<p>Paper Submission: February 8, 2010</p>

<h2>Call for Papers</h2>

<p>The First International Workshop on RESTful Design (WS-REST 2010) aims to provide a forum for discussion and dissemination of research on the emerging resource-oriented style of Web service design.</p>

<h2>Background</h2>

<p>Over the past few years, several discussions between advocates of the two major architectural styles for designing and implementing Web services (the RPC/ESB-oriented approach and the resource-oriented approach) have been mainly held outside of the research and academic community, within dedicated mailing lists, forums and practitioner communities. The RESTful approach to Web services has also received a significant amount of attention from industry as indicated by the numerous technical books being published on the topic.</p>

<p>This first edition of WS-REST, co-located with the WWW2010 conference, aims at providing an academic forum for discussing current emerging research topics centered around the application of REST, as well as advanced application scenarios for building large scale distributed systems.</p>

<p>In addition to presentations on novel applications of RESTful Web services technologies, the workshop program will also include discussions on the limits of the applicability of the REST architectural style, as well as recent advances in research that aim at tackling new problems that may require to extend the basic REST architectural style. The organizers are seeking novel and original, high quality paper submissions on research contributions focusing on the following topics:</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>All workshop papers are peer-reviewed and accepted papers will be published as part of the ACM Digital Library. Two kinds of contributions are sought: short position papers (not to exceed 4 pages in ACM style format) describing particular challenges or experiences relevant to the scope of the workshop, and full research papers (not to exceed 8 pages in the ACM style format) describing novel solutions to relevant problems. Technology demonstrations are particularly welcome, and we encourage authors to focus on &#8220;lessons learned&#8221; rather than describing an implementation.</p>

<p>Papers must be submitted electronically in PDF format. Submit at the <a href="http://ws-rest.org/Submit">WS-REST 2010 EasyChair installation</a>.</p>

<h2>Important Dates</h2>
<ul>
	<li>Submission deadline: February 8, 2010, 23.59 Hawaii time</li>
	<li>Notification of acceptance: March 1, 2010</li>
	<li>Camera-ready versions of accepted papers: March 14, 2010</li>
	<li>WS-REST 2010 Workshop: April 26, 2010</li>
</ul>

<h2>Program Committee Chairs</h2>

<ul>
	<li>Cesare Pautasso, Faculty of Informatics, USI Lugano, Switzerland</li>
	<li>Erik Wilde, School of Information, UC Berkeley, USA</li>
	<li>Alexandros Marinos, Faculty of Engineering &#038; Physical Sciences, University of Surrey, UK</li>
</ul>

<h2>Program Committee</h2>

<ul>
	<li>Rosa Alarcon, Pontificia Universidad Catolica de Chile</li>
	<li>Subbu Allamaraju, Yahoo Inc., USA</li>
	<li>Tim Bray, Sun Microsystems, USA</li>
	<li>Bill Burke, Red Hat, USA</li>
	<li>Benjamin Carlyle, Australia</li>
	<li>Stuart Charlton, Elastra, USA</li>
	<li>Joe Gregorio, Google, USA</li>
	<li>Michael Hausenblas, DERI, Ireland</li>
	<li>Rohit Khare, 4K Associates, USA</li>
	<li>Frank Leymann, University of Stuttgart, Germany</li>
	<li>Mark Nottingham, Yahoo Inc., Australia</li>
	<li>Aristotle Pagaltzis, Germany</li>
	<li>Ian Robinson, Thoughtworks, USA</li>
	<li>Richard Taylor, UC Irvine, USA</li>
	<li>Stefan Tilkov, innoQ, Germany</li>
	<li>Steve Vinoski, Verivue, USA</li>
	<li>Jim Webber, Thoughtworks, USA</li>
	<li>Olaf Zimmermann, IBM Zurich Research Lab, Switzerland</li>
</ul>

<h2>Contact</h2>

<ul>
	<li>WS-REST Web site:<a href="http://ws-rest.org/"> http://ws-rest.org/</a></li>
	<li>WS-REST Email: <a href="mailto:chairs@ws-rest.org">chairs@ws-rest.org</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QCon San Francisco 2009</title>
		<link>http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/</link>
		<comments>http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 18:52:29 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=151</guid>
		<description><![CDATA[The slides from the day-long tutorial, REST in Practice, that Jim Webber and I gave at QCon San Francisco can be found here.

Also as part of QCon, I gave a talk, Beginning an SOA Initiative, the slides of which can be downloaded here.

Jim and I will be giving the REST tutorial at QCon London next [...]]]></description>
			<content:encoded><![CDATA[<p>The slides from the day-long tutorial, <a href="http://qconsf.com/sf2009/presentation/REST+in+Practice.+A+Tutorial+on+Web-based+Services" title="REST in Practice. A Tutorial on Web-based Services" target="_blank"><em>REST in Practice</em></a>, that <a href="http://jim.webber.name/" title="Jim Webber's blog" target="_blank">Jim Webber</a> and I gave at <a href="http://qconsf.com/sf2009/" title="QCon San Francisco 2009" target="_blank">QCon San Francisco</a> can be found <a href="http://dl.dropbox.com/u/2877247/Tutorial.pdf.zip" title="Download pdf" target="_blank">here</a>.</p>

<p>Also as part of QCon, I gave a talk, <a href="http://qconsf.com/sf2009/presentation/Beginning+an+SOA+Initiative" title="Beginning an SOA Initiative" target="_blank"><em>Beginning an SOA Initiative</em></a>, the slides of which can be downloaded <a href="http://qconsf.com/sf2009/file?path=/qcon-sanfran-2009/slides/IanRobinson_BeginningAnSOAInitiative.pdf" title="Download pdf" target="_blank">here</a>.</p>

<p>Jim and I will be giving the REST tutorial at <a href="http://qconlondon.com/london-2010/" title="QCon London 2010" target="_blank">QCon London</a> next year. We&#8217;re already planning plenty of changes so as to make it a little more hands-on and practical.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>JAOO Slides</title>
		<link>http://iansrobinson.com/2009/10/07/jaoo-slides/</link>
		<comments>http://iansrobinson.com/2009/10/07/jaoo-slides/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 06:15:30 +0000</pubDate>
		<dc:creator>iansrobinson</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://iansrobinson.com/?p=147</guid>
		<description><![CDATA[The slides from yesterday&#8217;s talk are here. Thank you to everyone who attended &#8211; there were some great questions both during and after.]]></description>
			<content:encoded><![CDATA[<p>The slides from yesterday&#8217;s talk are <a href="http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/IanRobinson_HydrasAndHypermedia.pdf" title="Hydras and Hypermedia" target="_blank">here</a>. Thank you to everyone who attended &#8211; there were some great questions both during and after.</p>]]></content:encoded>
			<wfw:commentRss>http://iansrobinson.com/2009/10/07/jaoo-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
