{"id":33,"date":"2007-12-28T02:08:24","date_gmt":"2007-12-28T07:08:24","guid":{"rendered":"http:\/\/steve.vinoski.net\/blog\/2007\/12\/28\/internet-soap-vs-rest-huh\/"},"modified":"2007-12-28T02:08:24","modified_gmt":"2007-12-28T07:08:24","slug":"internet-soap-vs-rest-huh","status":"publish","type":"post","link":"https:\/\/steve.vinoski.net\/blog\/2007\/12\/28\/internet-soap-vs-rest-huh\/","title":{"rendered":"&#8220;Internet SOAP&#8221; vs. REST: Huh?"},"content":{"rendered":"<p>Dilip Ranganathan pointed me to a long rant from <a href=\"http:\/\/wisdomofganesh.blogspot.com\/\">Ganesh Prasad<\/a> about <a href=\"http:\/\/wisdomofganesh.blogspot.com\/2007\/12\/paying-restafarians-back-in-their-own.html\">using SOAP at Internet scale<\/a>. I see that <a href=\"http:\/\/www.stucharlton.com\/blog\/\">Stu Charlton<\/a> already chimed in there with some <a href=\"http:\/\/wisdomofganesh.blogspot.com\/2007\/12\/paying-restafarians-back-in-their-own.html#c3358075171632961637\">good comments and analysis<\/a>, but I think there&#8217;s still more to say.<\/p>\n<p>Unless I&#8217;m missing something, Ganesh seems to be saying, &#8220;Hey, if we just stick SOAP directly onto TCP, we can scale beyond Web scale to Internet scale!&#8221; Oh, if it were only so easy. I would think that it&#8217;s fairly obvious that just because TCP scales well doesn&#8217;t mean that higher-level protocols sitting on top of it automatically scale to the same degree.<\/p>\n<p>Why does the Web scale so well? Because of <a href=\"http:\/\/www.ics.uci.edu\/~fielding\/pubs\/dissertation\/rest_arch_style.htm#sec_5_1\">particular constraints<\/a> deliberately imposed to induce specific <a href=\"http:\/\/www.ics.uci.edu\/~fielding\/pubs\/dissertation\/net_app_arch.htm#sec_2_3\">architectural properties<\/a>. The caching constraint contributes heavily to Web scalability, for example. Statelessness and the uniform interface also play a big role there. These constraints along with <a href=\"http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec9.html#sec9.3\">conditional GET<\/a> allow messages to be significantly reduced in size or better yet, eliminated altogether. The resulting scalability impact is huge.<\/p>\n<p>Ganesh talks about a lot of the things you&#8217;d have to add to the mix get a useful SOA ecosystem on top of SOAP\/TCP, but nowhere does he talk about the specific architectural properties and constraints required to make it all scale. Without that, it just ain&#8217;t gonna happen. Furthermore, I don&#8217;t believe any system based either on interface specialization (i.e., the opposite of the uniform interface constraint) or on &#8220;processThis&#8221; can scale to Web scale. Interface specialization significantly increases coupling while reducing visibility and applicability, while &#8220;processThis&#8221; is so devoid of semantics that it offers nowhere to practically apply constraints like caching and statelessness that are so critical to scalability.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dilip Ranganathan pointed me to a long rant from Ganesh Prasad about using SOAP at Internet scale. I see that Stu Charlton already chimed in there with some good comments and analysis, but I think there&#8217;s still more to say. Unless I&#8217;m missing something, Ganesh seems to be saying, &#8220;Hey, if we just stick SOAP [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,10,19,15],"tags":[16,32,146,152,150,160],"class_list":["post-33","post","type-post","status-publish","format-standard","hentry","category-distributed-systems","category-rest","category-scalability","category-soa","tag-constraints","tag-interface","tag-rest","tag-scalability","tag-soa","tag-web"],"_links":{"self":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":0,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/33\/revisions"}],"wp:attachment":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/media?parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/categories?post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/tags?post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}