<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Handwriting: Tag web services</title>
    <link>http://blog.handwire.com/articles/tag/webservices?tag=webservices</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>A blog by Handwire</description>
    <item>
      <title>When to dismiss programmer guilt</title>
      <description>&lt;p&gt;37 Signals recently released their &lt;a href="http://37signals.com/svn/archives2/announcing_the_basecamp_api.php"&gt;Basecamp &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt;, which provides a handy way for developers to create applications that talk to Basecamp. They built their web services using simple &lt;span class="caps"&gt;XML&lt;/span&gt; over &lt;span class="caps"&gt;HTTP&lt;/span&gt;, which I found interesting, mainly because we did the same thing on a project last year. On that project, even though we had determined that &lt;span class="caps"&gt;XML&lt;/span&gt; over &lt;span class="caps"&gt;HTTP&lt;/span&gt; was the best approach, at the time I felt a little guilty about the decision.&lt;/p&gt;


	&lt;p&gt;Why did I feel guilty? Why does a programmer ever feel guilty? Generally, programmers feel guilty when they&amp;#8217;re not building something in the best possible way&amp;#8212;not using the right tools for the job, not adhering to good programming practices, not writing code that is general and elegant.&lt;/p&gt;


	&lt;p&gt;Usually this kind of guilt is a good thing. It results from an attention to detail and an aesthetic sensibility. It heads off laziness and sloppiness.&lt;/p&gt;


	&lt;p&gt;So was my guilt misplaced? For these web services, I felt like I ought to be using &lt;span class="caps"&gt;SOAP&lt;/span&gt; and &lt;span class="caps"&gt;WSDL&lt;/span&gt;, the standard technologies for the job. Any instructional article on how to create web services would have concurred. The absence of these technologies in my application seemed to strongly indicate a hack.&lt;/p&gt;


	&lt;p&gt;But the fact was, the &lt;span class="caps"&gt;SOAP&lt;/span&gt; implementation in the technologies we were using was underdeveloped. It worked well 95% of the time, but in some cases it simply could not accommodate the kinds of web services that we needed to provide (specifically, services that provide nested arrays of certain complex object types). It just didn’t work for us.&lt;/p&gt;


	&lt;p&gt;Further, in our research on the subject, we found that incompatibility issues inevitably occur when &lt;span class="caps"&gt;SOAP&lt;/span&gt;/WSDL services in one technology were consumed by clients from another&amp;#8212;like when a .NET client tries to invoke a Java web service. These issues generally crop up late in a project, after a lot of code has been written that depends on a black box &lt;span class="caps"&gt;SOAP&lt;/span&gt;/WSDL implementation. At that point, spectacular hacks must be employed to work around the incompatibilities. This approach seemed less and less appealing.&lt;/p&gt;


	&lt;p&gt;So simple &lt;span class="caps"&gt;XML&lt;/span&gt; over &lt;span class="caps"&gt;HTTP&lt;/span&gt; was a sensible, pragmatic solution. It supported our immediate needs, and would likely support any future needs. Any client could use the services, since any client can be made to parse &lt;span class="caps"&gt;XML&lt;/span&gt;. Moreover, by now, most programming languages have &lt;span class="caps"&gt;XML&lt;/span&gt; parsing libraries that would make using these services trivial. In short, &lt;span class="caps"&gt;XML&lt;/span&gt; over &lt;span class="caps"&gt;HTTP&lt;/span&gt;, although neither the standard nor the obvious solution, just worked, and worked well. There was no reason to feel guilty.&lt;/p&gt;


	&lt;p&gt;Then why did I? In this case, I think my guilt was the result of a misfiring reflex, a gut reaction to something that &lt;em&gt;seemed&lt;/em&gt; wrong. Such reactions are the root of  &lt;a href="http://en.wikipedia.org/wiki/Hypercorrection"&gt;hypercorrections&lt;/a&gt;&amp;#8212;for example, when we use the phrase &amp;#8220;You and I&amp;#8221; habitually, even when it&amp;#8217;s wrong. At some point in English class, we learn that the sentence &amp;#8220;You and me are going to the store&amp;#8221; is incorrect, which leads to the word &amp;#8220;me&amp;#8221; triggering a red flag in our brains, which leads to an aversion to using &amp;#8220;me&amp;#8221; &lt;em&gt;at all&lt;/em&gt;, even when &amp;#8220;me&amp;#8221; is actually appropriate, as in: &amp;#8220;Joe gave the book to you and me.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Rolling my own web service protocol, instead of using a standard approach, threw up a red flag. My brain detected strong indicators of a hack and reacted accordingly&amp;#8212;but in this case, mistakenly. Sometimes an idea has many characteristics of a bad idea, without actually being bad.&lt;/p&gt;</description>
      <pubDate>Wed, 29 Mar 2006 15:51:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ac0f6e6f-fd47-4600-8be5-dfd72d213a18</guid>
      <author>Michael Lovitt</author>
      <link>http://blog.handwire.com/articles/2006/03/29/when-to-dismiss-programmer-guilt</link>
      <category>programmer guilt</category>
      <category>soap</category>
      <category>web services</category>
      <trackback:ping>http://blog.handwire.com/articles/trackback/43</trackback:ping>
    </item>
  </channel>
</rss>
