{"id":80,"date":"2003-01-18T13:56:00","date_gmt":"2003-01-18T17:56:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=233"},"modified":"2003-01-18T13:56:00","modified_gmt":"2003-01-18T17:56:00","slug":"composing-web-services-choreography-vs-routing","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2003\/01\/composing-web-services-choreography-vs-routing\/","title":{"rendered":"Composing Web Services; Choreography vs. Routing"},"content":{"rendered":"<p><a href=\"http:\/\/www.pocketsoap.com\/weblog\/2003\/01\/17.html#a966\">Simon Fell says<\/a> that\nhe has trouble understanding some of my arguments, in particular\n<a href=\"http:\/\/lists.w3.org\/Archives\/Public\/xml-dist-app\/2003Jan\/0018.html\">this one<\/a>\nwhere I attempt to outline the value of pipe-and-filter style composition over a\nchoreographed solution.  Let me elaborate here then.<\/p>\n\n<p>It&#8217;s long been recognized that composition of components is simpler and more\ntractable when those components share an interface, if only because you can reuse\nglue code.  For example,\nthe code written to late-bind the Unix commands &#8220;ls&#8221; and &#8220;more&#8221; into &#8220;ls | more&#8221;,\nis split between the stdout-using code of &#8220;ls&#8221;, the stdin-using\ncode of &#8220;more&#8221;, and the binding code in the shell that processes &#8220;|&#8221;.\nAll of that code is reusable in more contexts than piping &#8220;ls&#8221; into &#8220;more&#8221;.<\/p>\n\n<p>My examples were meant to show the strong similarities between Unix style composition,\nand REST style composition.  REST, by itself, supports two styles that I&#8217;m familiar\nwith, which I described there; composition-by-URI, and intermediary routing.  The\nlatter is more powerful and flexible, but the former easier to use, though at the\ncost of not being standardized (not that it should &#8230;).<\/p>\n\n<p>From what I can tell, the Web services answer for composition lies with\n<a href=\"http:\/\/www.w3.org\/2002\/ws\/chor\/\">choreography<\/a> (and\n<a href=\"http:\/\/lists.w3.org\/Archives\/Public\/xml-dist-app\/2003Jan\/0022.html\">some<\/a>\nin that thread appear to\n<a href=\"http:\/\/lists.w3.org\/Archives\/Public\/xml-dist-app\/2003Jan\/0024.html\">agree<\/a>\nwith that).  I believe this approach will ultimately fail, and that routing (ala\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/dnglobspec\/html\/ws-routing.asp\">WS-Routing<\/a>,\n<a href=\"http:\/\/www.w3.org\/TR\/WD-http-pep\">PEP<\/a>,\n<a href=\"http:\/\/www.idokorro.com\">Idokorro<\/a>,\n<a href=\"http:\/\/www.knownow.com\">KnowNow<\/a>) will prevail.<\/p>","protected":false},"excerpt":{"rendered":"Simon Fell says that he has trouble understanding some of my arguments, in particular this one where I attempt to outline the value of pipe-and-filter style composition over a choreographed solution. Let me elaborate here then. It&#8217;s long been recognized that composition of components is simpler and more tractable when those components share an interface, [&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,40],"class_list":["post-80","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-soap","tag-xml"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/80","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=80"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/80\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}