{"id":353,"date":"2004-04-30T12:27:00","date_gmt":"2004-04-30T16:27:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=320"},"modified":"2004-04-30T12:27:00","modified_gmt":"2004-04-30T16:27:00","slug":"restful-jeff","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2004\/04\/restful-jeff\/","title":{"rendered":"RESTful Jeff?"},"content":{"rendered":"<p><a href=\"http:\/\/schneider.blogspot.com\/2004_04_25_schneider_archive.html#108332429634827127\">He writes<\/a>;<\/p>\n\n<blockquote>\nPer my earlier note, I have evaluated my feelings on the units of REST:\n<\/blockquote>\n\n<p>and goes on to &#8220;support&#8221; or &#8220;strongly support&#8221; all of the high level\nmandatory constraints of REST.<\/p>\n\n<p>He also offered some very insightful observations on some of the\ndifferences between REST and Web architecture;<\/p>\n\n<blockquote>\nREST is a single candidate architecture. And an architecture must be evaluated on the whole, rather than the individual parts. Fielding does a great job of stating that every decision in the candidate architecture has trade-offs. He further identifies the applicability of the architecture (distributed systems, system &#8216;feels&#8217; stateless, desire to scale, desire to evolve, etc.) Like all candidate architectures, one can only evaluate the architecture against a problem that you are trying to solve. REST by itself can not be evaluated, only evaluated as a candidate solution to a pre-identified problem.\n<\/blockquote>\n\n<p>Yes, exactly.  Which begs the million dollar question; do you think it applies\nto machine to machine integration problems?  If so, then I&#8217;d say that makes\nyou a RESTafarian.  Understanding the domain of applicability of an architectural\nstyle is very important; it&#8217;s not enough to believe, say, that &#8220;REST is great when\nyou&#8217;re building Web apps for humans&#8221;; you&#8217;ve got to be able to see beyond that.\nAt least IMHO, since I coined the term &#8220;RESTafarian&#8221; 8-) (which I&#8217;m sure I&#8217;ll\nregret at some point 8-)<\/p>\n\n<blockquote>\nWhat was interesting to me was the lack of association between REST and HTTP, or more precisely the &#8216;verbs&#8217; of HTTP. Instead, Fielding places significant attention on the need to use Resources (think URI), Self Descriptive Messages (think XML), but does imply that a generic interface is required. Somehow&#8230; I find myself agreeing with Fielding but disagreeing with many RESTifarians (I&#8217;m not sure how this is possible). Fielding suggests a &#8220;a uniform interface between components &#8220;, however he never mandates what that interface should be &#8211; only stating the characteristics.\n<\/blockquote>\n\n<p><a href=\"http:\/\/www.markbaker.ca\/Talks\/2004-xmlself\/slide1-0.html\">Modulo the &#8220;think XML&#8221; bit<\/a>,\nyep.  But this is actually one of my very few beefs with REST; the methods do matter.\nRoy and I talked about this (darn, can&#8217;t find the message in rest-discuss);\nthat there should only be one &#8220;get me the state of this resource&#8221; method.  He made some\ncomment about how he didn&#8217;t want to list the obvious constraints.  But as I&#8217;ve discussed,\nI think that&#8217;s <a href=\"http:\/\/searchwebservices.techtarget.com\/ateQuestionNResponse\/0,289625,sid26_cid543678_tax294654,00.html\">quite non-obvious<\/a>\nto a lot of smart folk.<\/p>\n\n<blockquote>\nHowever, I find significant &#8216;folklore&#8217; stating that the interface is, &#8220;&#8230;defined completely and solely by the specified semantics of HTTP, i.e. GET \/ PUT \/ POST, etc.&#8221; (Jeff Bone) He continues to argue, &#8220;*there are no applications you can think of which cannot be made to fit into the GET \/ PUT \/ POST \/ resources \/ representations model of the world!*&#8221; The only issue I have is his term &#8220;made to fit&#8221; &#8211; meaning, what was the price of &#8216;making something fit&#8217;?\n<\/blockquote>\n\n<p>Very much agreed.  Jeff sounds like he&#8217;s talking about GET\/PUT\/POST\/etc.. as a 100%\nsolution, but I think it&#8217;s more like a 97% solution, at least for &#8220;loosely coupled,\ndocument exchange&#8221; style solutions.  As I mentioned to Jeff offline, in all my\nexperiences with HTTP, only once have I ever had to use an operation other than\nGET, PUT, POST, or DELETE (or\n<a href=\"http:\/\/lists.w3.org\/Archives\/Public\/www-ws-arch\/2002Oct\/0112.html\">MONITOR<\/a>)\nin order to get something done in a reasonably efficient way; that was to basically\nimplement the functionality of a SQL UPDATE over a large set of resources (a PUT to\neach resource would have been prohibitively expensive).<\/p>","protected":false},"excerpt":{"rendered":"He writes; Per my earlier note, I have evaluated my feelings on the units of REST: and goes on to &#8220;support&#8221; or &#8220;strongly support&#8221; all of the high level mandatory constraints of REST. He also offered some very insightful observations on some of the differences between REST and Web architecture; REST is a single candidate [&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-353","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\/353","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=353"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/353\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=353"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}