{"id":96,"date":"2003-02-16T21:57:00","date_gmt":"2003-02-17T01:57:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=217"},"modified":"2003-02-16T21:57:00","modified_gmt":"2003-02-17T01:57:00","slug":"discussion-on-jorgens-presentation","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2003\/02\/discussion-on-jorgens-presentation\/","title":{"rendered":"Discussion on Jorgen&#8217;s presentation"},"content":{"rendered":"<p><a href=\"http:\/\/www.thearchitect.co.uk\/weblog\/archives\/2003\/02\/000061.html\">Jorgen responds<\/a>\nto <a href=\"http:\/\/www.markbaker.ca\/blog\/\/2003\/02\/09#2003-02-capescience-styles\">my comments<\/a> on a\n<a href=\"http:\/\/www.thearchitect.co.uk\/weblog\/archives\/2003\/02\/000055.html\">presentation<\/a>\nhe gave last week.<\/p>\n\n<p>Re my comment that architectural styles are pattern languages, not patterns,\nI can only point to Roy&#8217;s dissertation on this, where he suggests the association\nbetween an Alexendar &#8220;pattern language&#8221; and an &#8220;architectural style&#8221;, by suggesting\nindirectly that both are a system of patterns that constrain the form of the resultant\nsystem.  &#8220;Stateless&#8221;, &#8220;Uniform interface&#8221;, &#8220;Layered Client Server&#8221;, etc.. are\nconstraints, and when coordinated together, form the REST architectural style.<\/p>\n\n<p>Re the stateful\/stateless point (both parts), I don&#8217;t see how whether the targetted\nendpoint does additional dispatch or not, matters to this issue, unless of course that\ndispatch operation uses some state (which is not required of an OO style, AFAICT).\nYou suggest that all object oriented styles are stateful, yet REST is stateless, and\nit&#8217;s object oriented in that messages are targetted at identifiable objects.<\/p>\n\n<p>Re SQL, and to add to my last blog, it&#8217;s true that a SQL row may be a\nresource, but it&#8217;s not the case that all resources (as defined in 2396)\ncan be manipulated via SQL.<\/p>\n\n<p>Re POST, perhaps we miscommunicated, but by &#8220;partial update&#8221; I thought you\nmeant that the meaning of POST permitted the updating of partial state\nchanges to be <em>communicated to the client<\/em>, which it doesn&#8217;t.  It is\ntrue that the effect of a POST may be a &#8220;partial update&#8221; of the state of the\nresource, but the issue is that a client will not know that.  All a successful\nresponse to a POST can mean to a client is &#8220;thanks, I accept this data&#8221;.\nSo I&#8217;d say that your comparison to SQL UPDATE is inaccurate, because after a\nsuccessful UPDATE, the client knows the state of some part of some table.\nUPDATE is more like PUT for this reason, whose successful invocation informs\nthat client that the state of the resource is what they asked for it to be.<\/p>\n\n<p>Jorgen writes;<\/p>\n\n<blockquote>\nAnd there I was thinking this statement would be an olive branch for you, Mark ;-)\n<\/blockquote>\n\n<p>Heh, yah, I appreciated the attempt, but I felt it was pretty early to propose\na synergy existed before you really understood REST.  Oh, and please don&#8217;t take\n<em>that<\/em> the wrong way 8-); understanding REST isn&#8217;t a matter of smarts, it&#8217;s\njust a matter of recognizing what it is (or more specifically, what an application\nprotocol is, at least in my experience as an ex-CORBA lover).  I&#8217;m confident that\nyou&#8217;ll understand soon enough because of your broad experience, and your eagerness\nto learn.<\/p>\n\n<blockquote>\nI still don&#8217;t see any real conflict &#8211; you can still have requests returning XML data, the only question would be whether the request data must be in XML format or whether it can be encoded into a URL\/URI.\n<\/blockquote>\n\n<p>Depends what you mean by &#8220;request data&#8221;.  A typical Web services centric solution,\nbecause its normally early bound, requires that the request data include a\nmethod name.  REST, because it&#8217;s late bound, requires only that you provide\nan identifier.  From a cost-of-coordination perspective, the latter is\nvastly superior.<\/p>\n\n<blockquote>\nYou can use Web Services standards and do pure REST.\nEqually you can use Web Services standards and _not_ do REST.\n<\/blockquote>\n\n<p>Of course.  As I said before, I consider this a bug, not a feature.<\/p>\n\n<p>Roy defined the\n<a href=\"http:\/\/www.ics.uci.edu\/~fielding\/pubs\/dissertation\/rest_arch_style.htm#sec_5_1_1\">null architectural style<\/a>\nwhich could be said to be another style in which you can do REST\nor not.  The way it does this is by being entirely devoid of constraints,\nwhich has the &#8220;disadvantage&#8221; (cough 8-) of also being entirely devoid of any\ndesirable properties.<\/p>\n\n<p>I&#8217;m not suggesting that you believe that the null style is a useful thing,\nbut I&#8217;ve heard from a lot of Web services folks who feel that architectural\nconstraints are a <em>bad<\/em> thing.  From a software architecture point of\nview, this is madness.  Have they never heard of entropy?  8-\/<\/p>\n\n<blockquote>\nFundamentally, cacheability IS a big factor as the client implicitly caches a local copy of the resource data at least for a time.\n<\/blockquote>\n\n<p>Sure, it is important, but as a side effect of the client maintaining the state\n(i.e. the interaction being stateless).  If the style were said to &#8220;revolve around&#8221;\nanything, this (statelessness) could be one of the big things, sure.<\/p>\n\n<blockquote>\nI am not sure Roy Fielding&#8217;s dissertation would agree with your assertions here, Mark &#8211; see bottom of page 14:\n<\/blockquote>\n\n<p>Roy&#8217;s comment about combining styles doesn&#8217;t suggest <em>how<\/em> styles are combined.\nAs I see it, if you&#8217;re using an architectural style with constraints A, B, and C which yield\ndesirable properties X and Y, and then you want to add property Z which is known to be obtained\nvia constraints D and E, then in order to get Z without giving up X and Y, your new style\nneeds to have constraints A, B, C, D, and E.<\/p>\n\n<p>FWIW, this model of constraints and properties has been around for some time, since\nat least Perry and Wolf&#8217;s\n<a href=\"http:\/\/www.ece.utexas.edu\/~perry\/work\/papers\/swa-sen.pdf\">&#8220;Foundations for the study of software architecture&#8221;<\/a> (using that terminology, anyhow).  Some of the folks you quote, like Shaw,\nGarlan, Kazman, etc.. have accepted this model.  I don&#8217;t see how what I&#8217;m saying is\ncontroversial in this regard.<\/p>\n\n<p>I&#8217;m glad to hear you&#8217;re giving the presentation again, and I look forward to\nfollowing up on this with you.<\/p>","protected":false},"excerpt":{"rendered":"Jorgen responds to my comments on a presentation he gave last week. Re my comment that architectural styles are pattern languages, not patterns, I can only point to Roy&#8217;s dissertation on this, where he suggests the association between an Alexendar &#8220;pattern language&#8221; and an &#8220;architectural style&#8221;, by suggesting indirectly that both are a system of [&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-96","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\/96","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=96"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/96\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=96"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=96"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=96"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}