<?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>AsynchronousBlog &#187; /usr/bin/repl</title>
	<atom:link href="http://www.asynchronous.org/blog/archives/category/usrbinrepl/feed" rel="self" type="application/rss+xml" />
	<link>http://www.asynchronous.org/blog</link>
	<description>Random stuff for search engines to index.</description>
	<lastBuildDate>Sat, 28 Nov 2009 16:10:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>numerous verbs and uniform apis</title>
		<link>http://www.asynchronous.org/blog/archives/2004/04/11/numerous-verbs-and-uniform-apis</link>
		<comments>http://www.asynchronous.org/blog/archives/2004/04/11/numerous-verbs-and-uniform-apis#comments</comments>
		<pubDate>Sun, 11 Apr 2004 07:00:00 +0000</pubDate>
		<dc:creator>jsled</dc:creator>
				<category><![CDATA[/usr/bin/repl]]></category>

		<guid isPermaLink="false">http://www.asynchronous.org/blog/?p=15</guid>
		<description><![CDATA[Wish I&#8217;d been at what sounds like a downright bloody battle down under. :) Responses to some of the points:


  The really interesting stuff came about when they were challenged about the REST aspects of the application. Again the standard REST attack of uniform interface good/rpc bad came out, amongst others. This is a [...]]]></description>
			<content:encoded><![CDATA[<p>Wish I&#8217;d been at <a href="http://jim.webber.name/#080420041140">what sounds like a downright bloody battle down under</a>. :) Responses to some of the points:</p>

<blockquote>
  <p>The really interesting stuff came about when they were challenged about the REST aspects of the application. Again the standard REST attack of uniform interface good/rpc bad came out, amongst others. This is a flawed argument in my opinion for a number reasons:</p>
  
  <p>1&#46; Malicious payloads can be propagated irrespective of your transfer semantics, and insecure code can be executed whether your service is RESTful or not. The &#8220;safe&#8221; nature of the Web doesn&#8217;t get round buggy back-end implementations.</p>
</blockquote>

<p>This must be in response to something said at the event &#8230; ?</p>

<blockquote>
  <p>2&#46; We&#8217;re past the RPC stage of Web Services, and we&#8217;ve been past it for a while now. Message to the REST community &#8211; stop telling us that we&#8217;re playing catch up and see what&#8217;s really been happening on our side of the fence.</p>
</blockquote>

<p>Fair enough.</p>

<blockquote>
  <p>3&#46; The uniform API isn&#8217;t uniform. For each HTTP verb (GET, POST, PUT, DELETE) the accompanying message can be arbitrary. That is, you can&#8217;t POST a purchase order message to a REST service that expects to receive a circuit diagram. At some point you have to understand the messages.</p>
</blockquote>

<p>There are two parts, here:
1. Application Programming Interface
2. Messages carried over API.</p>

<p>In RPC, both are arbritary, which has a known set of problems in a networked environment crossing trust boundries.  REST seeks to limit one &mdash; the API &mdash; and let the complexity be managed in the messages.  Moreover, REST encourages a well-known set of widely-agreed-to message types.</p>

<p>More importantly, however, by <em>fixing</em> the verbs &mdash; the API &mdash; you have a much better chance of being able to intermediate in those operations.  Because the semantics of the API operations are fixed, you actually have a chance to get in the middle of the communication.</p>

<blockquote>
  <p>4&#46; The HTTP verbs are too numerous. Sure only GET and POST are usually used, but these are too numerous and too protocol specific too. You really only need a processThis(SOAPMessage) method on every service if you&#8217;re in a true asynchronous Web Services environment. Granted if you want synchronous communication, that might need to return a SOAPMessage too.</p>
  
  <p>The fact is that regular Web Services have a far more uniform interface than the REST style. I&#8217;ve laid down the challenge before, but you can&#8217;t get much more uniform than one (imaginary) verb, can you?</p>
</blockquote>

<p><a href="http://www.markbaker.ca/2002/09/Blog/2004/04/10#2004-04-webber-ambushed">Mark says it better</a>, but here&#8217;s my response:</p>

<p>That&#8217;s a red herring.  The fact is that if you only have a unconstrained &#8216;do stuff&#8217; method, you&#8217;re in a far weaker position than HTTP&#8217;s 4(-6) well-defined verbs.  At thet same time, if you have an arbritary set of undefined verbs, then you&#8217;re not very well off, either.</p>

<p>The real issue is the definition of meaning of the API operations.  GET, POST &mdash; and even PUT and DELETE &#8212; have very specific defintions and requirements on their behavior.  And beyond that, there are a set of headers which further affect how those verbs behave in well-specified, well-thought-out and well-tested ways.
This is important because it enables a class of tools to operate over the traffic, as well as providing a necessary semantic base on which other specifications to be based.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.asynchronous.org/blog/archives/2004/04/11/numerous-verbs-and-uniform-apis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinFS and IPC</title>
		<link>http://www.asynchronous.org/blog/archives/2003/11/21/winfs-and-ipc</link>
		<comments>http://www.asynchronous.org/blog/archives/2003/11/21/winfs-and-ipc#comments</comments>
		<pubDate>Fri, 21 Nov 2003 07:00:00 +0000</pubDate>
		<dc:creator>jsled</dc:creator>
				<category><![CDATA[/usr/bin/repl]]></category>

		<guid isPermaLink="false">http://www.asynchronous.org/blog/?p=11</guid>
		<description><![CDATA[A friend pointed me to http://www.ozzie.net/blog/stories/2003/11/14/640kbOughtToBeEnoughForAnyone.html&#8230;

Very interesting.  I&#8217;ve been reading good things about WinFS, and generally about other facets of Longhorn, since the PDC.

And now micros~1 is releasing the Word and Excel XML schemas&#8230; with perhaps-not-unreasonable licenses.

I don&#8217;t have a lot of stock with the &#8220;official&#8221; WS-* specs or technology stack they&#8217;re creating, so [...]]]></description>
			<content:encoded><![CDATA[<p>A friend pointed me to <a href="http://www.ozzie.net/blog/stories/2003/11/14/640kbOughtToBeEnoughForAnyone.html">http://www.ozzie.net/blog/stories/2003/11/14/640kbOughtToBeEnoughForAnyone.html</a>&#8230;</p>

<p>Very interesting.  I&#8217;ve been reading good things about WinFS, and generally about other facets of Longhorn, since the PDC.</p>

<p>And now micros~1 is releasing the Word and Excel XML schemas&#8230; with perhaps-not-unreasonable licenses.</p>

<p>I don&#8217;t have a lot of stock with the &#8220;official&#8221; WS-* specs or technology stack they&#8217;re creating, so that analogy is lost on me. ;)  His analogy is empty: all those awesome Amazon WS efforts are based on REST, not SOAP + WS-*&#8230;</p>

<p>Providing the infrastructure to get applications storing structured, relational data sets is a <a href="/twiki/bin/view.pl/Main/GoodThing">GoodThing</a>.  I have a bad feeling there will be an extra level of useless complexity to it, though.</p>

<p>I don&#8217;t think that it&#8217;s going to be useful.  Programs are only as useful as they provide services &#8212; not data &#8212; to other programs.  All those cool tools that he mentioned should be HTTP servers, and speak to eachother [and to the OS] via well-defined and common [RESTful ;)] interfaces.</p>

<p>The <a href="http://www.gnome.org/">GNOME</a> people almost got it right &#8212; but chose fsck&#8217;ing CORBA as their IPC mech.  tsk-tsk-tsk.  Especially because at the time it was clear HTTP was winning.  Ah, well &#8212; I didn&#8217;t see it either.</p>

<p>Perhaps a storage mechanism can assist in that, but if it&#8217;s only at the data-transfer level, interesting functionality [mostly queries, I've been thinking, but also application semantics and manipulation constraints] will need to be re-implemented all over the place.  And that&#8217;s the hard part.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.asynchronous.org/blog/archives/2003/11/21/winfs-and-ipc/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST</title>
		<link>http://www.asynchronous.org/blog/archives/2003/10/31/rest</link>
		<comments>http://www.asynchronous.org/blog/archives/2003/10/31/rest#comments</comments>
		<pubDate>Fri, 31 Oct 2003 07:00:00 +0000</pubDate>
		<dc:creator>jsled</dc:creator>
				<category><![CDATA[/usr/bin/repl]]></category>

		<guid isPermaLink="false">http://www.asynchronous.org/blog/?p=9</guid>
		<description><![CDATA[Comments regarding plightbo&#8217;s recent anti-REST posts&#8230;

Objects vs. Resources

There is a fundamental difference between objects and resources, and it&#8217;s really important.  Objects are data + behavior, whereas  resources are just data [and links to other data, if you're smart].  It&#8217;s the associated behavior that makes things scale badly.  There is a world [...]]]></description>
			<content:encoded><![CDATA[<p>Comments regarding plightbo&#8217;s recent <a href="http://www.lightbody.net/~plightbo/archives/000014.html">anti</a>-<a href="http://www.lightbody.net/~plightbo/archives/000016.html">REST</a> posts&#8230;</p>

<h1>Objects vs. Resources</h1>

<p>There is a fundamental difference between objects and resources, and it&#8217;s <em>really</em> important.  Objects are data + behavior, whereas  resources are <em>just</em> data [and links to other data, if you're smart].  It&#8217;s the associated behavior that makes things scale badly.  There is a world apart from objects: the semantics of the data itself are of primary importance, not the semantics of an interface to that data.</p>

<h1>Tools</h1>

<p>There are plenty of tools for RESTful systems &#8230;  you&#8217;re just taking them for granted&#8230;</p>

<ul>
<li><a href="http://www.apache.org/">Apache</a> / <a href="http://jakarta.apache.org/tomcat/">Tomcat</a> / <a href="http://www.caucho.com/resin/">Resin</a> / <a href="http://www.jboss.org/">JBoss</a></li>
<li><a href="http://www.mozilla.org/products/firebird/">Web-browsers</a></li>
<li><a href="http://jakarta.apache.org/commons/httpclient/">httpclient</a> / <a href="http://www.nogoop.com">nogoop</a> / URLConnection</li>
<li><a href="http://freshmeat.net/projects/calamaris/">Log analyzers</a></li>
<li>Sophisticated <a href="http://www.squid-cache.org/">Proxies and Caches</a></li>
</ul>

<p>All these tools solve very tangible problems, and have been shaken out over a long time.  The tools for some other technologies seem to exist primarily to solve problems or reduce work created by the technology itself&#8230; though in some cases they do solve a higher-order problem, and are useful.  <a href="http://www.w3.org/TR/wsdl">WSDL</a> is a good example: a reasonable resource/interface-description language, and, hey, it can be <a href="http://diveintomark.org/archives/2003/09/08/msweb-rest">applied to RESTful interfaces very well</a>.</p>

<p>Tools aren&#8217;t overlooked because of religion &#8212; they&#8217;re overlooked because they defocus developers from solving the real problem-at-hand rather than the details around the technology brought to bear in hopes of solving the problem at hand.</p>

<h2>CRUD operations masked over a database</h2>

<p>How is GET <a href="[http://www.google.com/search?q=important+search+term]">http://www.google.com/search?q=important+search+term</a> a &#8220;simple CRUD operation thinly masked over a database&#8221;?</p>

<p>Or a POST that buys you a ticket on an airplane and moves you across the country?</p>

<p>It&#8217;s not that the operations or verbs or <em>especially</em> their implementation is simple.  It&#8217;s that there&#8217;s a simple <em>interface</em> to them.  REST requires a constrained interface, not a constrained implementation.  In fact, it enables the implemention to grow unconstrained by a tightly-coupled interface.  It&#8217;s another form of encapsulation &#8212; but of the procedural implementation, not the data.  In fact, a view of the data is given primary importance.</p>

<h2>Business tasks</h2>

<p>You&#8217;re correct in saying that business people don&#8217;t care about the implementation details &#8230; but only until you tell them &#8220;no, we&#8217;d have to spend 6 months re-architecting the system for that.&#8221;  Our job as engineers is not only to implement the currently-required functionality, but also to keep the system healthy and able to grow.  They also don&#8217;t care what language we write it in [although they do from time to time], but we choose what language to write it in for a variety of time/skill-set and growth concerns.  And with respect to this thread, I know which technology is available in nearly every language we would every even consider working with, and it isn&#8217;t SOAP, RMI or XML-RPC&#8230;</p>

<p>There are some things that require foresight, and can&#8217;t be designed for the moment; that&#8217;s why it&#8217;s called architecture, and not design.  APIs are one of them, and networked APIs even more so, especially with the expectation that the system will grow very quickly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.asynchronous.org/blog/archives/2003/10/31/rest/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
