
Hugo Haas <hugo@w3.org>
W3C Web
Services Activity Lead
ECOWS 2005, Växjö, Sweden, 15 November 2005
http://www.w3.org/http://ヒキワリ.ナットウ.ニホン.example/
title
element whose content is World Wide Web Consortium, etc.

GET) has interesting properties:
POST: process messagePUT: update representationDELETE: delete resourceGET, POST,
PUT, DELETEXMLHttpRequestA definition:
A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
http://stockquoteserver.example/query?symbol=DIS
(non-exhaustive lists)
From UserFriendly.org Copyright © 2005 J.D. "Illiad" Frazer.
vi-mode
for Web services
vi-mode for Web services
http://weather.example/endpointHTTP POST in,
SOAP out):
GetWeather: get the current weather at a cityAddCity: add a city to the systemSetWeather: set weather information for a cityDelCity: delete a city from the systemGetWeather:
POST /endpoint HTTP/1.1 Host: weather.example Content-Type: application/soap+xml Content-Length: 251 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> <w:GetWeather xmlns:w="http://weather.example/"> <w:city>Växjö</w:city> <w:country>Sweden</w:country> </w:GetWeather> </env:Body> </env:Envelope>
A simple "get" operation should be done with HTTP GET

http://weather.example/country/cityGET http://weather.example/country/city: get the
current weather at a cityPOST http://weather.example/country/city:
set weather information for a cityDELETE http://weather.example/country/city: delete a
city from the systemPOST http://weather.example/addCity: add a city to the
systemGET:
GET /Sweden/V%C3%A4xj%C3%B6 HTTP/1.1 Host: weather.example Accept: application/soap+xml
vi-mode
for Web services<weather …>
<temperature>13</temperature>
<sky>sunny</sky>
<img xlink:href="http://weather.example/cam/Sweden/V%C3%A4xj%C3%B6?time=0800" />
</weather>

<soap:Envelope
xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
xmlns:rep='http://www.w3.org/2004/08/representation'
xmlns:xmlmime='http://www.w3.org/2005/05/xmlmime'>
<soap:Header>
<rep:Representation
resource="http://weather.example/cam/Sweden/V%C3%A4xj%C3%B6?time=0800">
<rep:Data
xmlmime:contentType='image/jpeg'>/aWKKapGGyQ=</rep:Data>
</rep:Representation>
</soap:Header>
<soap:Body>
<weather …>
<temperature>13</temperature>
<sky>sunny</sky>
<img xlink:href="http://weather.example/cam/Sweden/V%C3%A4xj%C3%B6/0800" />
</weather>
</soap:Body>
</soap:Envelope>
Then optimize with MTOM

<binding name="HttpBinding" interface="m:GetTemperature"
type="http://www.w3.org/2005/08/wsdl/http">
<operation ref="m:location" whttp:method="GET"
whttp:location="{country}/{city}"/>
</binding>
allows for an HTTP GET on
http://weather.example/Sweden/V%C3%A4xj%C3%B6:
HTTP/1.1 200 Here's the temperature for you Content-Type: application/xml … <weather xmlns="…"> <temperature>23</temperature> </weather>
<interface name="Maintenance">
<operation name="weather">
<input messageLabel="In" element="s:weather"/>
<output messageLabel="Out" element="#none"/>
</operation>
<operation name="DelCity">
<input messageLabel="In" element="s:City"/>
<output messageLabel="Out" element="#none"/>
</operation>
</interface>
<binding name="HttpBindng" interface="m:Maintenance"
type="http://www.w3.org/2005/08/wsdl/http">
<operation ref="m:weather" whttp:method="PUT"
whttp:location="{country}/{city}"/>
<operation ref="m:DelCity" whttp:method="DELETE"
whttp:location="{country}/{city}"/>
</binding>
<service>
<endpoint name="AdminEndpoint" binding="m:HttpBinding"
whttp:authenticationType="digest"
whttp:realm="admin"
address="http://ws.accurateweather.example/"/>
</service>
HTTP PUT to upload new data
PUT /Sweden/V%C3%A4xj%C3%B6 HTTP/1.1
Host: ws.accurateweather.example
Authorization: Digest username="hugo",
realm="admin",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/Sweden/V%C3%A4xj%C3%B6",
…
Content-Type: application/xml
…
<weather xmlns="…">
<temperature>23</temperature>
</weather>
with a response:
HTTP/1.1 204 Resource updated
HTTP DELETE to erase a city
DELETE /Sweden/V%C3%A4xj%C3%B6 HTTP/1.1
Host: ws.accurateweather.example
Authorization: Digest username="hugo",
realm="admin",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/Sweden/V%C3%A4xj%C3%B6",
…
with a response:
HTTP/1.1 204 City deleted

After all, the editor war has been going on for decades