{"id":304,"date":"2004-03-11T23:16:00","date_gmt":"2004-03-12T03:16:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=302"},"modified":"2004-03-11T23:16:00","modified_gmt":"2004-03-12T03:16:00","slug":"steve-vinoski-on-web-services-notifications","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2004\/03\/steve-vinoski-on-web-services-notifications\/","title":{"rendered":"Steve Vinoski on Web services notifications"},"content":{"rendered":"<p>Steve&#8217;s next article for his &#8220;Towards Integration&#8221; column is titled\n<a href=\"http:\/\/www.iona.com\/hyplan\/vinoski\/pdfs\/IEEE-Web_Services_Notifications.pdf\">&#8220;Web Services Notifications&#8221;<\/a>.\nIt&#8217;s the usual high quality stuff you can count on from Steve, but I&#8217;d like to\nrespond a couple of comments made regarding my forte, Web architecture.\nSomething tells me Steve probably anticipated this response. 8-)<\/p>\n\n<blockquote>\nA URL specifies only a single protocol, but a service could be reachable via multiple\nprotocols. For example, a service might accept messages over both HTTP and SMTP, but\nany URL for the service can specify only one of those access methods.\n<\/blockquote>\n\n<p>It&#8217;s very commonly believed that URI scheme == protocol, but that\nreally isn&#8217;t the case.  A URI scheme defines a few things, but most\nimportant are the properties of the namespace it forms, in particular\nscope and persistence of uniqueness, whether it&#8217;s hierarchical, and\nprobably some other things I&#8217;m forgetting.  Defining an algorithm for\nmapping an identifier in that namespace, to a connection to a remote\nserver on the Internet someplace is independent of those properties.\nConsider that;<\/p>\n\n<ul>\n<li>interactions with mailto URIs don&#8217;t necessarily begin or end\nwith SMTP<\/li>\n<li>an http URI can be minted and used successfully before a Web\nserver is installed, or even while the Internet connection is down<\/li>\n<li><a href=\"http:\/\/www.ietf.org\/rfc\/rfc2817.txt\">RFC  2817<\/a> describes\nhow to interact using HTTPS with a resource identified by a http URI using\nHTTP only as a bootstrap mechanism via Upgrade.  Upgrade isn&#8217;t\nspecific to HTTPS either.<\/li>\n<\/ul>\n\n<p>There is certainly a relationship &#8211; as defined in the aforementioned\nalgorithm above &#8211; between a URI scheme and a protocol in the context of\ndereferencing and sending messages, but as those last two points above\ndescribe, it&#8217;s not quite as clear-cut as &#8220;URI scheme == protocol&#8221;.<\/p>\n\n<p>Steve also adds;<\/p>\n\n<blockquote>\nURLs can&#8217;t adequately describe some transport mechanism types. For example,\nmessage queues typically are defined by a series of parameters that describe the queue\nname, queue manager, get and put options, message-expiration settings, and message\ncharacteristics. It isn&#8217;t practical to describe all of this information in some form of\nmessage-queue URL.\n<\/blockquote>\n\n<p>I&#8217;ve had to tackle this exact problem recently, and I figure there&#8217;s\ntwo ways to approach it.  One is to suck up the ugly URI and embed all that\ninformation in one; I&#8217;m confident that could be done in general, because I&#8217;ve\ndone something very similar.  I would highly recommend this solution if you\ncan do it because it&#8217;s efficient.  But, if you can&#8217;t, you can always use a\nURI which doesn&#8217;t include that information, but which is minted at runtime\nas a result of POSTing the endpoint descriptive data to a resource which\nhands out URIs for that purpose; that requires an additional coordination\nstep, but you get nice, short, crisp looking URIs.<\/p>\n\n<p>Moreover, not only do I believe that URIs are great for identifying\nmessage queues, I believe (surprise!) that http URIs are.  Consider what\nit means to invoke GET on a message queue; what&#8217;s the state of a queue\n(that will be returned on the GET)?  Why, the queued messages of course.\nThis, plus POSTing into the same queue, is the fundamental innovation of\n<a href=\"http:\/\/www.mod-pubsub.org\">mod-pubsub<\/a>, IMO.<\/p>\n\n<p>Next up&#8230;<\/p>\n\n<blockquote>\nURLs do not necessarily convey interface information. This is especially true of HTTP URLs,\nbecause Web services generally tunnel SOAP over HTTP.\n<\/blockquote>\n\n<p>Wait a sec, you&#8217;re blaming http URIs for the problems caused by tunneling?! 8-O 8-)\nMost (good) URIs <em>do<\/em> convey interface information, at least in the context\nof dereferencing (which is the only place that an interface is needed).  So if I see\na http URI, I can try to invoke HTTP GET on it (keeping in mind some of the\nconsiderations mentioned above).<\/p>","protected":false},"excerpt":{"rendered":"Steve&#8217;s next article for his &#8220;Towards Integration&#8221; column is titled &#8220;Web Services Notifications&#8221;. It&#8217;s the usual high quality stuff you can count on from Steve, but I&#8217;d like to respond a couple of comments made regarding my forte, Web architecture. Something tells me Steve probably anticipated this response. 8-) A URL specifies only a single [&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-304","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\/304","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=304"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/304\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=304"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}