{"id":273,"date":"2004-02-09T06:31:00","date_gmt":"2004-02-09T10:31:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=283"},"modified":"2004-02-09T06:31:00","modified_gmt":"2004-02-09T10:31:00","slug":"mod_pubsub-and-hackery","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2004\/02\/mod_pubsub-and-hackery\/","title":{"rendered":"mod_pubsub and hackery"},"content":{"rendered":"<p><a href=\"http:\/\/webpages.charter.net\/chrisfer\/archives\/2004_02_01_oldrants.html#107628618403407962\">Chris responds<\/a> to an earlier\n<a href=\"http:\/\/www.markbaker.ca\/2002\/09\/Blog\/2004\/01\/28#2004-01-beep-vs-web-hacks\">comment of mine<\/a>.<\/p>\n\n<blockquote>\nMy point remains that HTTP is not suited to extension of its methods because it requires centralized administration of the method names. You can&#8217;t simply make up a new method like MONITOR and deploy it unless you go through the IETF to revise the HTTP specification. Unless you do, then there&#8217;s no way that anyone could tell the difference between Mark&#8217;s MONITOR method and mine (should I devise one) and yet they might be very different animals.\n<\/blockquote>\n\n<p>His point about decentralized method definition is very well taken; HTTP\ndoes not permit method names to be URIs.\n<a href=\"http:\/\/www.w3.org\/TR\/WD-http-pep\">PEP<\/a>\nattempted to\n<a href=\"http:\/\/www.w3.org\/TR\/WD-http-pep-971121.html#_Toc404743958\">remedy this<\/a>,\nbut was never deployed.<\/p>\n\n<p>But in order to use MONITOR, the HTTP spec doesn&#8217;t need revision.  There\nare a multitude of HTTP extensions which are defined as standalone extensions\nwhich required no revision of HTTP itself.  Consider\n<a href=\"http:\/\/www.ietf.org\/rfc\/rfc2518.txt\">WebDAV<\/a>.  And as Dave Orchard\n<a href=\"http:\/\/www.pacificspirit.com\/blog\/2004\/01\/28\/extensibility_and_ignore_rule_in_web_architecture\">noted<\/a>,\nHTTP is rife with extensibility points; this is no accident, because HTTP was\nexplicitly designed to be extended.  Which brings us to this comment;<\/p>\n\n<blockquote>\nHTTP wasn&#8217;t designed to support pubsub. Just because some sharp\npeople can take the protocol and tweak it here and there to enable pubsub doesn&#8217;t change that fact.\n<\/blockquote>\n\n<p>HTTP was not designed to support pub\/sub, but so?  Was SOAP?  Nope.\nBut that doesn&#8217;t prevent one from using it that way.  What&#8217;s important is that it\nwasn&#8217;t designed in such a way that <em>prevented<\/em> (even by being merely a &#8220;poor\nfit&#8221;) its use for pub\/sub, and IMO, neither HTTP nor SOAP were.  HTTP was designed\nfor document transfer, and pub\/sub fits there perfectly.<\/p>\n\n<p>Chris then asks a very good mod_pubsub question;<\/p>\n\n<blockquote>\nHowever, all that aside, I am curious about something else related to mod_pubsub. Sure, it makes use of HTTP GET as well as POST, but are GET and POST really the methods? I mean really&#8230; how is this any different than the way in which SOAP uses HTTP POST? do_method?\n<\/blockquote>\n\n<p>This is largely what I was referring to when I said &#8220;well, parts sure are, but the bulk of it?&#8221;\nin reference to mod_pubsub and hackery.  The client portion of mod_pubsub &#8211; the Javascript Web\nserver and library &#8211; had to resort to lowest common denominator; AIUI, they couldn&#8217;t\npresent access to HTTP internals to developers.  AFAIK, that&#8217;s why &#8220;route&#8221; is a parameter\nrather than a new method.  It&#8217;s actually semantically quite close to WebDAV&#8217;s COPY method,\nboth in that it is essentially a copy action, but also that it&#8217;s an &#8220;interaction at a distance&#8221;, i.e.\nthat two URIs are used as arguments, rather than just one which would have required the data being\nrouted to flow to the client.  But doing this RESTfully, I could easily imagine a ROUTE method.<\/p>\n\n<p>This is different to a typical Web services approach (I won&#8217;t say &#8220;SOAP approach&#8221;, because\nSOAP can be used in so many ways), due to two reasons IMO; first, the semantics being tunneled\nare uniform, and second, they&#8217;re tunneled because there was no other way to do it.\nIn my observation, Web services developers use tunneling primarily because they don&#8217;t know\nhow to solve their problems without tunneling, and because they&#8217;ve been lead to believe\nthat &#8220;protocol independence&#8221; is a feature rather than a bug.<\/p>","protected":false},"excerpt":{"rendered":"Chris responds to an earlier comment of mine. My point remains that HTTP is not suited to extension of its methods because it requires centralized administration of the method names. You can&#8217;t simply make up a new method like MONITOR and deploy it unless you go through the IETF to revise the HTTP specification. Unless [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26],"class_list":["post-273","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-soap"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/273","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=273"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}