Mark Baker on Jim’s post

Mark Baker
comments on Jim’s recent post about “Service-orientation vs Resource-orientation” which included a diagram I created for our presentations. Mark seems to think that WS-RF‘s notion of a resource is the same as the one the web is using. Although this may be true, I personally see a difference. The web doesn’t use “types” of resources (i.e., collections of methods) but only “structures” or “formats”, while in WS-RF the WSDL document of a service is treated as the “type” or “interface” (as these terms are used in object-orientation) of a resource (this is taken from Steve Tuecke‘s presentation last week in GGF10 in Berlin). Mark also suggests that the notion of a resource in WS-RF is about “stateful resources, stateless interactions”.

My understanding of WS-RF is that it does the exact opposite of modelling stateless interactions with resources; when the WS-RF authors talk about “interacting with stateful resources” they effectively mean “stateful interactions with resources”. They mandate the inclusion of some sort of service-specific information to identify a resource (which may indeed be logical). In doing this, WS-RF encourages architects/designers/developers to think in terms of the resources that exist and they build their solutions around those resources. The model is no different from having objects and object references which are used to reach the identified objects and call methods on them. I see the conceptual model of WS-RF as being different from that of REST which is about transferring state around and not calling operations on that state, and definitely different from the service-orientation model of Web Services.

As Mark suggests, one could build a composition of resources that abstract the use of other resources. Indeed, through clever design you may build solutions that effectively resemble those encouraged by other conceptual models. Didn’t CORBA, an implementation of the distributed objects paradigm, start using the concept of services? Didn’t we use to do object-based programming using C or procedural programming using C++?

Sidenote: Everyone has been using the term “stateful resource” and I must admit I can’t really understand it. Are there stateless resources? I personally see only “resources”; every resource has some sort of state (whether that is visible to us or not).