<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>cfis : Why Is REST So Hard to Understand?</title>
    <link>http://cfis.savagexi.com</link>
    <atom:link rel="self" type="application/rss+xml" href="http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand?format=rss"/>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Charlie Savage's Blog</description>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Peter Williams</title>
      <description>&lt;p&gt;The term &amp;#8220;ROA&amp;#8221; is a bit of a problem in the context you are trying to use it.  Namely, it seems to be already used in the REST community to describe applications that are &amp;#8220;resource&amp;#8221; oriented but have missed the fact that the most single most important thing about REST is the hypertext.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 10:12:27 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:784f834c-3e36-4395-bef4-c30a486b78be</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4193</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Hey Peter,&lt;/p&gt;

&lt;p&gt;Its hard to say that hypertext is the most important part of REST since without resources and URI&amp;#8217;s you couldn&amp;#8217;t have hypertext.&lt;/p&gt;

&lt;p&gt;I think my use of ROA is appropriate - the focus of the architecture is on the resources and not the services.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 10:30:06 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7db41584-cc20-414e-80ea-e1868dd7713d</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4194</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Sean Gillies</title>
      <description>&lt;p&gt;Like S3?&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 10:34:38 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:6c0c28c5-463d-4a65-89ee-4954dbd9c7fc</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4195</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Jeremy McAnally</title>
      <description>&lt;p&gt;I think it&amp;#8217;s hard to understand because people use hard words to describe it.  A lot of the terminology I see in &amp;#8220;introductory&amp;#8221; articles would (and should) put the REST newbie off.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 10:35:04 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f71e8736-7e1b-44fc-b2ba-2e006409e492</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4196</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Peter Williams</title>
      <description>&lt;p&gt;I say that hypertext is the most important thing because if you have
&amp;#8220;hypertext&amp;#8221; you MUST have global name (URIs) and resources.  You can
conceive of global names without hypertext but an architecture
comprised of just resources with global names does not hold nearly the
same potential as a fully REST based system with hypertext.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 11:11:04 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:008a8648-dfed-4fcb-a9e0-2e545f6ff12c</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4198</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Hey Sean,&lt;/p&gt;

&lt;p&gt;What do you mean, like S3?  Are you using it as an example?&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 11:11:04 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:9985ff5f-312b-45cc-9561-83b7e06a3cd6</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4199</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Jeremy,&lt;/p&gt;

&lt;p&gt;I agree - people tend to dive right into resources, uris, http verbs, idempotent, GET vs PUT, etc.  Unfortunately, the recent article on Directions magazine (link is in first paragraph above) is a good example of causing more confusion than enlightenment.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 11:13:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:53aba43e-e7a8-47b3-b694-7f41dcf72ff3</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4200</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Peter,&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d agree with the statement that hypertext brings together all the pieces of REST (resources, single API, URIs, hyperlinked representations) and shows its full power.  So I think we are in agreements - REST without hypertext would negate many of the benefits.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 11:23:31 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8afcfd2e-ffa0-46df-acb3-13133ffbf51d</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4201</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by dstar</title>
      <description>&lt;p&gt;A &lt;em&gt;large&lt;/em&gt; part of the problem is that I have yet to see an article that explains&lt;/p&gt;

&lt;p&gt;a) Why I, as someone with an existing rails app, would want to refactor it to be RESTful
b) How to do so via simple examples&lt;/p&gt;

&lt;p&gt;but doesn&amp;#8217;t&lt;/p&gt;

&lt;p&gt;c) Assume I already know the terminology&lt;/p&gt;

&lt;p&gt;A related issue is that all the articles I&amp;#8217;v seen so far seem to think that because I&amp;#8217;m building a RESTful app, I want to be serving XML and HTML and perhaps other formats via the same action, which is orthagonal to REST and does nothing more than complicate the issue (indeed, one article I looked at seemed to thing that moving to REST was the only way to do so).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d really &lt;em&gt;like&lt;/em&gt; an article that fit criteria a, b, and c &amp;#8211; I don&amp;#8217;t suppose you know of one?&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 12:19:39 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e381e5a9-1a68-4d52-874a-fc10e8106dfe</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4205</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Sean Gillies</title>
      <description>&lt;p&gt;Yes, I meant S3 as an example of a services that eschews links.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 12:23:51 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d8bf6b70-7827-4c8f-b87d-033b3b1222f2</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4206</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Dstar,&lt;/p&gt;

&lt;p&gt;I took a stab at a) and b) last year - see my article about a &lt;a href="http://cfis.savagexi.com/articles/2006/03/26/rest-controller-for-rails" rel="nofollow"&gt;REST Controller for Rails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As for c), I like Joe Gregorio&amp;#8217;s &lt;a href="http://www.xml.com/pub/au/225" rel="nofollow"&gt;articles&lt;/a&gt; on xml.com&lt;/p&gt;

&lt;p&gt;And for your last point, it is part of REST  since a resource can be represented using any number of formats (HTML, XML, JSON, ATOM, etc.).  But whether you want to do such a thing or not is up to you (I find it helpful, see  my &lt;a href="http://cfis.savagexi.com/articles/2007/08/06/making-rails-better-content-negotiation" rel="nofollow"&gt;article &lt;/a&gt; about content negotiation).&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 12:36:12 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d27662a3-7d31-4dba-b41a-1a68b0d40f66</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4207</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Sean,&lt;/p&gt;

&lt;p&gt;Ah.  I wasn&amp;#8217;t eschewing links though, did I come across that way?&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 12:39:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:098f0ff3-982d-4002-8807-2762fb9612a7</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4208</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by dstar</title>
      <description>&lt;p&gt;Charlie,&lt;/p&gt;

&lt;p&gt;Thanks for the pointer &amp;#8211; that helped a fair amount. I do still have some questions, though.&lt;/p&gt;

&lt;p&gt;For example, in my app, I have Stories, which have Chapters. I have two seperate actions which correspond to show &amp;#8211; show, which shows the chapter in its normal form, and show_draft, which shows comments and includes links to edit the individual paragraphs. How could I map both of those to a GET operation? It seems to me that I&amp;#8217;ll have to include the action in the URL after all, to disambiguate.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 12:45:24 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ea576b12-f100-43c9-9d19-5772052299a0</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4209</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Sean Gillies</title>
      <description>&lt;p&gt;I don&amp;#8217;t think you did, Charlie. I was just offering a concrete example to help people understand comment #1.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 13:05:42 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:faf88c52-215f-4b59-8ea6-ad6d95ff4c31</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4210</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Dstar,&lt;/p&gt;

&lt;p&gt;There are two things here.  First, you have &amp;#8220;nested&amp;#8221; resources.  From the outside, the url could look like this:&lt;/p&gt;

&lt;p&gt;/stories/1/chapter/2&lt;/p&gt;

&lt;p&gt;As far as editing and showing a draft, what we do is:&lt;/p&gt;

&lt;p&gt;/stories/1
/stories/editor/1&lt;/p&gt;

&lt;p&gt;Thus a story editor is separate resource.&lt;/p&gt;

&lt;p&gt;There is a no clear &amp;#8220;right&amp;#8221; way to do this, what we do is different than what the Rails core teams suggests.  The link above talk a bit about this issue.  Also, Peter recently wrote an &lt;a href="http://pezra.barelyenough.org/blog/2007/07/hierarchical-resources-in-rails/" rel="nofollow"&gt;article&lt;/a&gt; about nested resources you might want to look at.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 13:37:39 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:aa0303bb-5a41-4344-a148-e1f6593ee100</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4211</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Sean,&lt;/p&gt;

&lt;p&gt;Doh - now I get it!  Sorry for my confusion.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 13:38:01 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:fd6421ac-49c0-4f98-be5a-8e0d80805898</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4212</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by dstar</title>
      <description>&lt;p&gt;Okay, I think I get it now &amp;#8211; instead of &amp;#8216;show&amp;#8217; and &amp;#8216;show_draft&amp;#8217; actions, I would treat them as separate things:
/stories/1/chapter/draft/1
/stories/1/chapter/1/&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 13:57:13 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:13cc2116-29d2-491c-8f6d-3e9d022d4385</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4213</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;dstar,&lt;/p&gt;

&lt;p&gt;Yup, that&amp;#8217;s what I would do.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 14:14:45 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:37e4d5c6-b03b-47f7-abe9-ba054fdc3d45</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4214</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Jeremy McAnally</title>
      <description>&lt;p&gt;dstar: It would actually be /stories/1/chapter/1/draft&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2007 16:56:54 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d5ca8c17-d393-4896-b2b2-e80ffe58db49</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4215</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Espen</title>
      <description>&lt;p&gt;Your article did at least give me a new perspective on a subject I am struggling to understand.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Aug 2007 01:51:24 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:75f71c67-b6d1-4c7a-93ee-5202c78829af</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4217</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Dennis Doubleday</title>
      <description>&lt;p&gt;Thanks for the interesting take. I need to learn more about REST.&lt;/p&gt;

&lt;p&gt;But I&amp;#8217;ll provide some feedback anyway. I think REST proponents tend to hand wave away the complexity of large scale distributed systems by saying, &amp;#8220;look, it&amp;#8217;s just URLs and a few simple operations.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Well, yes, but the innate complexity of the system is still there, it&amp;#8217;s just expressed differently. Suppose you need to do 100 different things with data. You can write an API with a 100 different service methods, or you can have 4 methods and move a lot of the complexity into the data itself.&lt;/p&gt;

&lt;p&gt;And the various manifestations of SOA spend a lot of time and complexity on describing data in generic, cross-platform ways because it is HARD to make things interoperable. I believe those difficulties still exist in making REST resources interoperable, but the culture allows for a certain amount of &amp;#8220;we&amp;#8217;ll make it work&amp;#8221; rather than nailing down all the details.&lt;/p&gt;

&lt;p&gt;Finally, &amp;#8220;How well does the ROA approach work in the real world? Well, the web is the most success distributed computer system in the world, so I would say quite well.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t think that is proof at all. The  web is VERY forgiving of errors, missing resources, and inadequately structured data because navigation of the web is primarily driven by human intelligence, which can handle sloppiness better than automated distributed systems.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Aug 2007 12:04:16 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e2708cac-d0c3-48d0-a85e-e93d85a1e107</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4221</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Hi Dennis,&lt;/p&gt;

&lt;p&gt;Thanks for your thoughts.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;On your first point, remember in SOA that interoperability can only happen when a client and server can find each other (via a URI on the web), agree on an API and agree on a data format.&lt;/p&gt;

&lt;p&gt;In ROA the API barrier is removed - a client and server have to find each other and agree on a data format.  So now you only have to solve the data format issue.&lt;/p&gt;

&lt;p&gt;So I agree the data format (representation) is very important, but in practice it has turned out be solvable since ROA makes the representation a point of extensibility (for example, in the last few years we&amp;#8217;ve seen RSS and Atom emerge as new agreed-upon representation formats).&lt;/p&gt;

&lt;p&gt;As far as the existence of the Web not  being proof that it works - I have to disagree with you there.  Sure the Web is forgiving - but maybe that means you need to have a forgiving system to scale  globally.  Also navigation is driven by links - machines can follow them just as well - otherwise Google wouldn&amp;#8217;t exist.&lt;/p&gt;

&lt;p&gt;I do agree for automated systems, HTML/XHTML leave a lot be desired as formats - but that&amp;#8217;s ok because for automated systems they&amp;#8217;ll be replaced by Atom and the Atom Publishing Protocol as I&amp;#8217;ve talked about &lt;a href="http://cfis.savagexi.com/articles/2007/04/26/atom-will-change-the-world" rel="nofollow"&gt;before&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Aug 2007 14:32:31 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:421cd128-641f-45dd-9b86-3630ba7c2fb4</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4223</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Jeremy Cothran</title>
      <description>&lt;p&gt;Hi Charlie,&lt;/p&gt;

&lt;p&gt;Thanks for the articles and explanations concerning REST and ROA.  Hopefully we&amp;#8217;ll be able to go back to putting the services/software cart after the data/format horse instead of the other way around.&lt;/p&gt;

&lt;p&gt;My focus has been on format with ObsKML &lt;a href="http://nautilus.baruch.sc.edu/twiki_dmcc/bin/view/Main/ObsKML" rel="nofollow"&gt;http://nautilus.baruch.sc.edu/twiki_dmcc/bin/view/Main/ObsKML&lt;/a&gt; for my work with observations systems, in utilizing KML&amp;#8217;s Metadata tag to help with data reuse beyond the limits of the single string description tag only.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 08:36:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:78db835c-d4fa-4a4c-992e-6340c80fbd33</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4233</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Samuel A. Falvo II</title>
      <description>&lt;blockquote&gt;&lt;p&gt;Take a look around - when is the last
time you saw a large distributed
computer system working across multiple
organizational boundaries that is based
on COM, CORBA, RMI, SOAP web services,
etc?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Every single day of my life.  In fact, I help maintain software which is based on proprietary RPC calls.  Previous lifetimes has seen me developing user management systems for ISPs using CORBA.  And somewhere in the middle, I worked for a company that used SOAP pretty well exclusively to make its internal software work.&lt;/p&gt;

&lt;p&gt;So, yeah, I&amp;#8217;ve seen these packages running and the benefits to society that they offer VERY often indeed.  And I continue to use and support them today.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 09:44:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:4b87a029-0256-41f6-84d7-6a702d638ce2</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4234</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Samuel A. Falvo II</title>
      <description>&lt;blockquote&gt;&lt;p&gt;Anything of interest gets a globally
unique identifier, which is done via
URIs.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;CORBA objects each receive an IOR, guaranteed to be unique in the known universe.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Next, the service becomes uninteresting
because every service has the exact same
API. On the Web, the service API is
defined by  HTTP verb&amp;#8217;s GET, POST, PUT,
DELETE, etc.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This is not an API.  This is a networking layer.  Sure, it&amp;#8217;s an API between web browser and web server, but this &amp;#8220;transport&amp;#8221; (as it&amp;#8217;s called) is completely transparent to the higher-level software.&lt;/p&gt;

&lt;p&gt;Likewise, CORBA also implements its own transport that is demonstrably superior to HTTP.  It&amp;#8217;s stateful, thus eliminating outright the need for the megabytes of software that exist PURELY to manage cookies, sessions, and other bizarre concepts.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Since all interesting data has a
globally unique identifier, it becomes
possible to create a web of links&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Since all CORBA objects refer to other objects via their IORs, CORBA also supports creating a web of object links.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Since there is only one service API,
it becomes possible to create a single
client (think of a browser) that can
access an infinite number of services
(think of websites)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This is actually false on the global scale &amp;#8211; that is, it is true ONLY for a certain subset of applications (namely, those applications whose data is formatted conveniently for human consumption).  For all others, you end up base-64 encoding binary data, thus resulting in 25% additional bandwidth overheads, or worse, using XML to encapsulate data structures which are well known to both sides of the connection, thus increasing bandwidth requirements to an amazing 200% to 500% in the process.&lt;/p&gt;

&lt;p&gt;EA-IFF-85a files are binary files with recursive descent characteristics &amp;#8211; they solve the exact same problem as XML does, but it does so without the bloat of XML.  It allows for textual or binary data (indeed, IFF files are designed specifically with binary files in mind).  But, alas, it died out, having been seen ONLY as a &amp;#8220;file format for that Amiga platform that nobody SERIOUS uses.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll admit that there is SOME coupling that occurs with CORBA&amp;#8217;s IIOP protocol, but let&amp;#8217;s not forget that both the client and the server have to agree on an interface to communicate to begin with.  Since both interfaces are already known in advance on both sides of the connection, IN PRACTICE, tight coupling at the IIOP level has not been a problem.&lt;/p&gt;

&lt;p&gt;Versioning of interfaces happens by changing the name of the interface.  If I release an object that implements Foo, and suddenly I find I need new functionality in Foo, I might re-release the object as Foo2, which inherits Foo as a base interface to support backward compatibility.  IIOP allows this, and even encourages this.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Versioning issues between clients and
services are greatly reduced (although
they still happen  when HTTP changes)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;They still happen even when HTTP &lt;em&gt;doesn&amp;#8217;t&lt;/em&gt; change.  Remember, HTTP is used only as a transport.&lt;/p&gt;

&lt;p&gt;See above point on how IIOP/CORBA handles versioning of interfaces.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;State can be taken out of the system
and made into its own resource,
thereby making the system much more
scaleable&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;IIOP connections are stateful in nature, and that is true.  But that doesn&amp;#8217;t mean the objects behind them have to be stateful.  Indeed, architecturally, there is NO difference between a CORBA ORB and an HTTP server.  None.  The difference lies in how the connections are managed.  As soon as an HTTP server is done spewing porn, spam, and advertisements down the pipe, it closes the connection.  As soon as IIOP is done spewing, the connection remains live.&lt;/p&gt;

&lt;p&gt;In order for a service built on top of HTTP to remain stateful, complex mechanisms employing cookies and &amp;#8220;sessions&amp;#8221; are required.  An incredible amount of software goes into maintaining sessions &amp;#8211; so much so, in fact, that most languages now have specialized web design toolkits (Ruby on Rails, Zope, etc) which abstract away much of this duldrum.&lt;/p&gt;

&lt;p&gt;CORBA does not need this kind of complexity, since the objects on the other end CAN reliably be stateful.  And, if the connection is lost for some reason, you can reconnect to that object and pick up where you left off (unless it&amp;#8217;s a transactional object, in which case you&amp;#8217;ll need to start your transaction over).&lt;/p&gt;

&lt;p&gt;In retrospect, it is patently clear that there is &lt;em&gt;nothing&lt;/em&gt; new under the sun here.  Just as those who are unaware of Unix are doomed to repeat it, poorly, so to is the case with distributed services: those who don&amp;#8217;t know CORBA are doomed to repeat CORBA &amp;#8230; poorly.&lt;/p&gt;

&lt;p&gt;There is a silver lining to this tornado cell though.  For those who are able to stretch their imaginations a bit, and are even half-way familiar with Haskell, you can think of the session management functionalities as implementing a state monad.  Therefore, the HTTP approach tends to be look &amp;#8220;functional&amp;#8221; in nature; it has to, as the protocol is a stateless protocol.  The only way to reliably maintain state from page to page, therefore, is to pass your state around as hidden form entries or as parts of the URL (both of which are considered &amp;#8220;parameters&amp;#8221; to the web-based functions you&amp;#8217;re hitting).&lt;/p&gt;

&lt;p&gt;Unfortunately, this state monad is muddied by the fact that you&amp;#8217;re now maintaining state in a database, which just screams for an imperative method of programming.  If we&amp;#8217;re going to be using state monads to model state in a program, then there is certainly nothing preventing the use of CORBA at the level of a functional program either, since socket I/O is just another case of using a state monad.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re back once more to where CORBA shines and HTTP is simply inadequate.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 10:15:27 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:4075d212-5d32-4b10-8208-e668ba37b5d3</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4235</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Hi Jeremy,&lt;/p&gt;

&lt;p&gt;Thanks for the note and link.  Funny for me to say this - but have you looked at the observation functionality built into GML?  I haven&amp;#8217;t used it myself, so no comments on its suitability for what you need.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 12:23:03 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:1ce667db-b95f-42e3-b698-1187a0836c25</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4237</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Jeremy Cothran</title>
      <description>&lt;p&gt;I hadn&amp;#8217;t taken a look at GML&amp;#8217;s observation functionality, but based on the description(fields are time,location,resultOf,using,subject) at &lt;a href="http://geoweb.blog.com/313930/" rel="nofollow"&gt;http://geoweb.blog.com/313930/&lt;/a&gt; it doesn&amp;#8217;t provide the level of detail that I&amp;#8217;m looking for directly although the ObsKML schema which provides the necessary detail(an observation list bound by the same time/location with each observation having a observation type, unit of measure type and measurement value(and optional elevation) could be linked/nested within GML,etc similar to what I&amp;#8217;m doing with KML.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 14:39:05 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e95c8a02-6ff5-4169-aa8a-d456d7a38cd3</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4239</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Oisin Hurley</title>
      <description>&lt;p&gt;Samuel said:&lt;/p&gt;

&lt;p&gt;  &amp;#8220;This is not an API. This is a networking layer. Sure,
  it&#8217;s an API between web browser and web server, but
  this &#8220;transport&#8221; (as it&#8217;s called) is completely
  transparent to the higher-level software.&amp;#8221;&lt;/p&gt;

&lt;p&gt;One of the core issues here is whether you approach solutions as a &amp;#8216;layerist&amp;#8217; - that is, you isolate the protocol from the programming, as CORBA does, or an &amp;#8216;applicationist&amp;#8217; - the protocol directly maps to the agent that is to process the request.&lt;/p&gt;

&lt;p&gt;Your statement above indicates &amp;#8216;layerist&amp;#8217; thinking, however most REST aficionados (and certainly ones that use HTTP as the basis for examples), will be part of the &amp;#8216;applicationist&amp;#8217; camp.&lt;/p&gt;

&lt;p&gt;This fork in thinking is a vital and fundamental differentiator - for the REST-with-HTTP guy, those POST/PUT/GET methods &lt;em&gt;are the API&lt;/em&gt;, the API to a resource.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 14:46:17 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5357718f-6d07-4f77-bb6f-e547c8af3b34</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4240</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Charlie</title>
      <description>&lt;p&gt;Hi Samuel,&lt;/p&gt;

&lt;p&gt;Wow - you win the contest for submitting the longest comment in the history of this blog. Let me respond to a couple of things you said, although maybe the better idea would be to write another post.&lt;/p&gt;

&lt;p&gt;To start, I&amp;#8217;m not anti-CORBA or anti-JMI or anti-DCOM, etc. Such systems provide a workable solution within organizations - however I do not think they work inter-organizationally. I would be interested in hearing more about the examples you mentioned in your first comment.&lt;/p&gt;

&lt;p&gt;Next, I&amp;#8217;ll disagree with you on HTTP - its a transfer, or application, level protocol and thus its purpose in life is to provide a single API for clients and servers that support it. No doubt HTTP has been abused by various protocols that simply use it as a bit stream to avoid firewalls, but that&amp;#8217;s not HTTP&amp;#8217;s fault.&lt;/p&gt;

&lt;p&gt;Now is IIOP better than HTTP? Is a non-question since they are such different beasts. HTTP is stateless, text-based protocol designed to provide a single application level API used to tranfer chunks of content. IIOP is stateful, binary protocol designed to support distributed objects.&lt;/p&gt;

&lt;p&gt;As far as versioning in CORBA, its sounds similar to COM (I&amp;#8217;ve done a lot of COM/DCOM programming, but not CORBA), where a published interface is immutable. Its sounds good in practice, but reality has shown it doesn&amp;#8217;t work very well. Perhaps you can dismiss this as Microsoft&amp;#8217;s incompetence, but I think that&amp;#8217;s a simplistic viewpoint. Versioning is a deep, hard problem which I won&amp;#8217;t pretend to know anything about. But any distributed system based on interfaces will run right into it.&lt;/p&gt;

&lt;p&gt;So I stick to my point that CORBA and REST are fundamentally different - CORBA focuses on services and REST on resources. In my opinion, the focus on resources is in fact something new under the sun.&lt;/p&gt;

&lt;p&gt;To finish up, your musing on Haskell/monads/state/HTTP are interesting. HTTP&amp;#8217;s statelessness is a good thing (leads to scalability), but dealing with application state (versus resource state) is a pain. Part of the problem is that browsers haven&amp;#8217;t provided any infrastructure for managing application state (it belongs on the client), until very recently with the WHATG spec (though kudos to IE for offering some local storage for a long time now). And part of the problem is the cookie spec isn&amp;#8217;t very good. But neither are the fault of HTTP.&lt;/p&gt;

&lt;p&gt;Anyway, thanks for your thoughts, and I enjoy reading your blog.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 15:52:51 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:384ee9f2-5d1f-4074-a721-815b2cc30aa9</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4242</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by Samuel A. Falvo II</title>
      <description>&lt;p&gt;Wow.  I must have had a REALLY bad day yesterday.  Although the content wasn&amp;#8217;t intended to be offensive, and I still don&amp;#8217;t take it as such, I still think I could have worded things a whole lot better.  Not only that, but, I completely missed half of what you wrote.&lt;/p&gt;

&lt;p&gt;Yes, I am a layerist, because at some point, SOME kind of interface has to exist.  Each layer means more software to maintain, which means more bugs.  Collapsing the stack is critical to me; my brain can only handle so much.&lt;/p&gt;

&lt;p&gt;That being said, I do have some other issues with REST &amp;#8211; many compare REST to &amp;#8220;what OO should have been&amp;#8221; (to paraphrase a page on the restWiki &amp;#8211; I can&amp;#8217;t remember the link though).  I see this as a flawed analogy; OO has always been about not just the data, but what you can do with it.  Hence, data and functionality together.&lt;/p&gt;

&lt;p&gt;REST is an extension of the bus interface of the CPU &amp;#8211; a CPU can read from memory, and write to it.  That&amp;#8217;s it.  Ditto for the Commodore 8-bit Kernals &amp;#8211; they were file oriented long before Unix became a household name, and implements an interface that some argue is purer than Plan-9&amp;#8217;s.  You had only four functions: open, read, write, close.  That&amp;#8217;s it; literally everything else was done either through tunneling through an overtly documented command channel, or through reading/writing state.  Almost RESTful.  It only lacked representational standards.  Moving one step further, we have the WWW, where RESTful applications are essentially &amp;#8220;active RAM.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I would like to see how security is addressed though.  Object capabilities and ACLs both have been demonstrated to be equivalent, but object capabilities are much more scalable (control over individual methods for individual programs for individual users, something which ACLs are absolutely cumbersome at achieving).  Yet, except for .htaccess-style ACLs, I can&amp;#8217;t see how to map object capabilities to this model.  As a result, I see security in a RESTful environment as being a significant challenge &amp;#8211; something SOAP and its ilk can implement much more easily.&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;</description>
      <pubDate>Thu, 16 Aug 2007 13:07:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ac267040-4fcb-4224-aa46-345890f6ba69</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4248</link>
    </item>
    <item>
      <title>Comment on Why Is REST So Hard to Understand? by William Tanksley</title>
      <description>&lt;p&gt;Object capabilities could be implemented with REST by naming the URI path components according to the HMAC hashes of the names rather than the pure English names.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Aug 2007 13:24:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ef44716a-dec0-4613-89fd-79245b108889</guid>
      <link>http://cfis.savagexi.com/2007/08/13/why-is-rest-so-hard-to-understand#comment-4252</link>
    </item>
  </channel>
</rss>
