{"id":278,"date":"2004-02-13T11:24:00","date_gmt":"2004-02-13T15:24:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=278"},"modified":"2004-02-13T11:24:00","modified_gmt":"2004-02-13T15:24:00","slug":"savas-on-rest-again","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2004\/02\/savas-on-rest-again\/","title":{"rendered":"Savas on REST again"},"content":{"rendered":"<p>More good\n<a href=\"http:\/\/savas.parastatidis.name\/2004\/02\/12\/f8d5a670-962b-4672-a1ec-e0a62b7359ff.aspx\">insight from Savas<\/a> on REST.<\/p>\n\n<p>He writes;<\/p>\n\n<blockquote>\nThe human factor is involved. If a resource (e.g., a web page) has moved, applications don&#8217;t break. It&#8217;s just that there is nothing to see. We are frustrated that it&#8217;s not there. If an application depends on that resource being there, that application breaks.\n<\/blockquote>\n\n<p>Yep.  But how is that any different than a service which you depend on not\nbeing there?  At least HTTP responses code are well-defined, and handle a lot\nof common cases, including redirection, retiring, retry-later, etc..  I don&#8217;t\nsee how this is human-centric at all; it&#8217;s just dealing with inevitable\nerrors in distribution across trust boundaries.<\/p>\n\n<p>I&#8217;m not sure what he means by using HTML for &#8220;interfaces&#8221;, but he then\nlater speaks my language again when he describes HTML as a format for\ndescribing resource state;<\/p>\n\n<blockquote>\nIf a resource&#8217;s representation is described in HTML, all is fine. Everyone knows how to read HTML. How about an arbitrary XML document though? Did we have a way of specifying to the recipient of the resource&#8217;s representation about the structure of the document? Perhaps they wouldn&#8217;t have requested it if they knew about it.\n<\/blockquote>\n\n<p>XML is fine and dandy, and I use it whenever I can, but it&#8217;s just a\nsyntax.  As such, it doesn&#8217;t do anything to alleviate the issue that\nunderstanding an XML document is an all-or-nothing proposition.  That&#8217;s\nwhy when I use XML, I almost always use RDF.  It enables a machine to\nextract triples from an arbitrary RDF\/XML document, and triples are much\nfiner grained pieces of information than a whole document.  It allows me\nto process the triples I understand, and ignore the ones I don&#8217;t, which\nanother way of saying that it provides a self-descriptive extensibility\nmodel.  See <a href=\"http:\/\/www.markbaker.ca\/Talks\/2004-xmlself\/slide24-0.html\">this example<\/a>.<\/p>\n\n<blockquote>\nIf we are going to glue applications\/organisations together when building large scale applications, we need to make sure that contracts for the interactions are in place. We need to define message formats. That&#8217;s what WSDL is all about.\n<\/blockquote>\n\n<p>Agreed, but that&#8217;s also an important part of HTTP.  It just defines message\nformats in a more self-descriptive way (i.e. that doesn&#8217;t require a separate\ndescription document to understand what the message means).<\/p>\n\n<blockquote>\nAlso, we talk about exchanging messages between applications and\/or organisations. Do we care how these are transferred? Do we care about the underlying infrastructure? I say that we don&#8217;t; at least, not at the application level.\n<\/blockquote>\n\n<p>I&#8217;m not sure we&#8217;ll get past this nomenclature problem, but in my world, documents are\ntransferred while messages are transported.  I do agree that how message transport occurs\ndoesn&#8217;t matter, but I don&#8217;t agree that how document transfer occurs doesn&#8217;t matter.\nAs an example, consider a document transferred with HTTP PUT, versus that same document\ntransferred with HTTP POST.  Both messages mean entirely different things (more below).<\/p>\n\n<blockquote>\n<p>If there is a suggestion that constrained interfaces are necessary for loose-coupling and internet-scale computing, then here&#8217;s a suggestion&#8230; What if the only assumption we made was that we had only one operation available, called &quot;SEND&quot;? Here are some examples:<\/p>\n\n<p>TCP\/IP:SEND, CORBA:SEND, HTTP:POST, EMAIL:SEND, FTP:PUT, SNAIL:POST (for letters), etc.<\/p>\n<\/blockquote>\n\n<p>Ah, this one again. 8-)<\/p>\n\n<p>You can&#8217;t compare TCP\/IP &#8220;SEND&#8221; with HTTP POST or SMTP DATA.\nTCP\/IP is a transport protocol and therefore defines no operations.  You can put\noperations in the TCP\/IP envelope yourself (e.g. by sending &#8220;buyBook isbn:123412341234&#8221;),\nor you can have them be implicit by the port number by\n<a href=\"http:\/\/www.iana.org\/assignments\/protocol-numbers\">registering<\/a> your &#8220;Book\nBuying&#8221; protocol with IANA, only ever using that one operation (&#8220;buyBook&#8221;), and\nsending just &#8220;isbn:123412341234&#8221;).  On the other hand, HTTP, SMTP, and FTP, all <em>do<\/em>\ndefine their own very generic operations.<\/p>","protected":false},"excerpt":{"rendered":"More good insight from Savas on REST. He writes; The human factor is involved. If a resource (e.g., a web page) has moved, applications don&#8217;t break. It&#8217;s just that there is nothing to see. We are frustrated that it&#8217;s not there. If an application depends on that resource being there, that application breaks. Yep. But [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[40],"class_list":["post-278","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-xml"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}