UWS as a REST protocol
Matthew Graham
mjg at cacr.caltech.edu
Tue Feb 27 11:15:20 PST 2007
Hi,
Whilst it may at first look as though we are talking about "using URLs
in place of SOAP calls" here, this is not the case: we are actually
specifically addressing two different ways of exposing *web* services
(and not generic services). *Web* services means that standardization
and XML are axiomatic and the different architectural styles we are
discussing impose different standardizations. SOAP focuses on a
standardized messaging framework traditionally tied to an RPC-like
service interface whereas REST is about resources identifiable by nouns
*and* a standardized set of finite operations which map to the HTTP methods.
Reworking Roy's example:
http://blabla.edu?service=cutout&POS=301,22&recipe=bombayduck (which
would never be a *web* service endpoint) - a SOAP-based *web* service
version of this would send a message like:
<SOAP:Envelope>
<SOAP:Body>
<cutout>
<POS>301,22</POS>
<recipe>bombayduck</recipe>
</cutout>
</SOAP:Body>
</SOAP:Envelope>
to the service endpoint of, say, http://blabla.edu/services to retrieve
the recipe.
The REST alternative is to send an HTTP GET request to the service
endpoint of http://blabla.edu/cutout/301/22/bombayduck.
Suppose we now want to update the recipe: with SOAP, we might have to do
something like
<SOAP:Envelope>
<SOAP:Body>
<updateIngredients>
<POS>301,22</POS>
<recipe>bombayduck</recipe>
<ingredients>
...
</ingredients>
</updateIngredients>
</SOAP:Body>
</SOAP:Envelope>
to http://blabla.edu/services; whereas with REST, we just do an HTTP PUT
of the XML structure <ingredients> to
http://blabla.edu/cutout/301/22/bombayduck/ingredients.
The distinction is that REST provides a clear separation between
something that is addressable as a resource - the ingredients of the
recipe - and operations that can be carried on it - updating - whilst
SOAP conflates the two in messaging (and requires extra machinery to
make it work).
Now the reason why
"http://blabla.edu?service=cutout&POS=301,22&recipe=bombayduck" is not
RESTful is not to do with its idempotency but that it is RPC-like.
Semantically it's actually doing the same conflation of resource and
operation that the SOAP message is doing: one can envisage
"http://blabla.edu?service=updateIngredients&POS=301,22&recipe=bombayduck".
Cheers,
Matthew
More information about the grid
mailing list