<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet href="/style/browser.xsl" type="text/xsl"?>
<essay xmlns="http://docbook.org/ns/docbook"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
       xmlns:dc='http://purl.org/dc/elements/1.1/'
       xmlns:dcterms="http://purl.org/dc/terms/"
       xmlns:gal='http://norman.walsh.name/rdf/gallery#'
       version='pto'>
<info>
<title>WS-WTF?</title>
<volumenum>8</volumenum>
<issuenum>22</issuenum>
<pubdate>2005-02-15T08:51:32-05:00</pubdate>
<date>$Date: 2005-09-11 10:27:02 -0400 (Sun, 11 Sep 2005) $</date>
<author><personname>
<firstname>Norman</firstname><surname>Walsh</surname>
</personname></author>
<copyright><year>2005</year><holder>Norman Walsh</holder></copyright>
<abstract>
<para>If I'm ever going to understand Web Services, I'm going to have
to build one. Herewith, a sketch of a service I plan to build.</para>
</abstract>
</info>

<epigraph>
<attribution><personname><firstname>Thomas. H.</firstname>
<surname>Huxley</surname></personname></attribution>
<para xml:id='p0'>If a little knowledge is dangerous,
where is the man who has so much as to be out of danger?</para>
</epigraph>

<para xml:id='p1'>I don't think it will surprise any of my colleagues
if I reveal that I just don't “get” web services. I mean, I think I
understand what “web services” means at a conceptual level:</para>

<itemizedlist>
<listitem>
<para xml:id='p2'>We've got
this nifty XML thing that allows us to markup our data.
</para>
</listitem>
<listitem>
<para xml:id='p3'>We've got this nifty internet thing that let's a whole
bunch of computers talk to each other.
</para>
</listitem>
<listitem>
<para xml:id='p4'>We think there's money to be
made from getting computers to talk to each other in a way that is
unambiguous and conforms to business contracts.</para>
</listitem>
<listitem>
<para xml:id='p4b'>We'd like to make it easy for programmers to write
applications that use web services because that helps drive the whole
enterprise (and there's probably money to be made in selling tools to
programmers, too).
</para>
</listitem>
</itemizedlist>

<para xml:id='p5'>So let's combine them! Let's use XML to send data between
computers on the internet (which we'll call the web) so that they can
accomplish tasks (which we'll call services).</para>

<para xml:id='p6'>Ok so far?</para>

<para xml:id='p7'>To do this, we'll need
<link xlink:href="http://www1.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm">REST</link>
and
<link xlink:href="http://www.w3.org/TR/2003/REC-soap12-part0-20030624/">SOAP</link>
and
<link xlink:href="http://www.xmlrpc.com/">XML-RPC</link>
and
<link xlink:href="http://www.w3.org/TR/wsdl20/">WSDL</link>
and WS-<replaceable>X</replaceable>, WS-<replaceable>Y</replaceable>,
and WS-<replaceable>Z</replaceable>. That looks like a whole lot of
acronyms for a concept that seems not too hard to grok. I
<emphasis>must</emphasis> be missing something.</para>

<para xml:id='p8'>Like most things, I don't think I'm really going to understand
this stuff until I use it, so I'm going to build a web service. I've
even figured out what it's going to be.</para>

<section xml:id="witw">
<title>Where In The World</title>

<para xml:id='p9'>My web service is going to be called “Where In The World”
(<acronym>WITW</acronym>) and it's going to expose two methods (addresses?
service endpoints?): you'll be able to tell it “where I am” and you'll
be able to ask it “where is someone”. I'll open the whole thing up so
that anyone who's interested can play with it.</para>

<para xml:id='p10'>The “where I am” service for a given user will
accept either a latitude and longitude or the name of a known
landmark. (Eventually, there will have to be another method to add
landmarks, but let's not worry about that now.) It'll remember where
they said they were and when they said they were there.</para>

<para xml:id='p11'>The “where is someone” service will return the last
known location of a given user. Optionally, it will provide a list of
other users and landmarks that are or were nearby.</para>

<para xml:id='p12'>That seems like a not quite entirely trivial
set of services that provides a read-only “get information” service (method?
endpoint?) and a writeable “put information” service.</para>

<para xml:id='p13'>My plan is to support a
<link xlink:href="http://www.xml.com/pub/a/2004/08/11/rest.html">RESTful</link>
API,
a SOAP XML-RPC-style API,
and a SOAP document-style API to the services (if I
get ambitious, I may even provide an email API and a
<link xlink:href="http://fi.dev.java.net/">Fast Infoset</link>
or some other binary API). At
least to the extent that I currently understand what those acronyms
mean. I expect that I'll need to build at least one WSDL file to describe the
services. Whether I'll need any of the other
WS-<emphasis>mumble</emphasis> specifications remains to be
seen.</para>

<para xml:id='p14'>Web service greasemonkeys, tell me, am I in the
right ballpark? Have I outlined reasonable services? Do you think
there's enough richness there to learn anything?</para>
</section>

</essay>
