Gudge graciously
continues the discussion.
Here’s my lengthy response that I spent far too much time writing, then rewriting… despite
having two Monday deadlines! 8-O
Regarding my concern that WS-A doesn’t require placing the destination address
in, for example, the HTTP request line rather than the wsa:To header, he writes;
I really don’t see how WS-Addressing can specify this given that the spec itself doesn’t know anything about the underlying protocols […]
Let me stop him there, since that’s actually my issue; IMO, WS-Addressing
should know things about the underlying protocol. As I
described
when I first raised it, this issue is more about the whole concept of “protocol
independence” than it is about anything to do with WS-Addressing.
He then responds to my plea to spend some serious time focusing on the
difference between application and transport protocols;
Now, I think I have some idea of the difference between the two, although I’m obviously no expert; transport protocols just move bits around without any regard to what those bits are, whereas application protocols, while still moving bits around, care somewhat about what those bits look like.
Hmm, that’s difficult to respond to because it’s not very specific! 8-O
But Gudge didn’t appear mention what I personally believe to be the biggest distinction
between the two; an application protocol defines application semantics.
This relates closely to my earlier comment that there’s no analogue to
such an entity in the historical CORBA/DCOM/DCE style stacks. The reason for
this makes total sense though; when you need to support arbitrary application
semantics, the only stack that would make any sense would need to separate those
semantics from the “thing that frames the bits”. And that’s where the whole
concept of “protocol independence” comes from, and as I said, it makes total
sense when arbitrary application semantics are required.
Now, consider a system that only has a single application interface, like,
say, email, a tuple space based system, or indeed any system built with a
coordination language.
Does this layering make the same
sense there? I don’t believe so. There’s no need to be independent of that
layer because there’s no need for any other application semantics. This allows
the optimization of the framing and features to the application semantics.
For example, had HTTP not had a GET semantic, then there’d be no need for
caching. Now consider that with a “protocol independent” equivalent of GET, ala
WS-Transfer,
you’ve lost the ability to optimize the transfer features for that case. So
while you could certainly try to deploy WS-Transfer, it would necessarily
perform a whole lot worse than HTTP because optimization would require
modifying SOAP. At least HTTP is optimized for the general case because
it is the result of the merging of the two layers we’re talking about.
Gudge then clarifies that his background includes messaging and queueing
systems, which I presume is a reference to MOM. That’s great; it’s good to
have experience with varied architectural styles. I wonder then, if he was
aware that a MOM based architecture natively (i.e. it can be abused) uses
the same uniform interface constraint as REST (although it goes further
to constrain the interface to a single “ProcessMessage” semantics, ala
MEST)?
It’s not commonly recognized that MOM adopts this
constraint because the fact that there’s only ever a single application
semantic means that the semantic can be excluded entirely from the message
resulting in a pure looking document-in/document-out system with no
operations anywhere. I emphasize “looking” there, because REST is just as
pure a document-oriented architectural style as MOM, only because it permits
operations other than MOM’s one, those operations need to be made explicit
in the message… which is why HTTP has “POST”; it’s the name given to the
same “ProcessMessage” semantic from MEST/MOM.
Finally, regarding my comment that I didn’t really care what the outcome
of the resolution of the issue was, Gudge writes;
It seems somewhat odd, to me, to raise an issue and then not care about the outcome. Like shooting for a basketball hoop but then immediately leaving the court, without caring whether the shot went in or not. I guess this means that if the TAG decide that the decision made by the WS-Addressing WG was OK, then Mark won’t push back.
Ah, minor misunderstanding there. What I don’t care much about is – assuming
that the TAG agrees the WG needs to remedy the problem – how the problem
is addressed by the WG. Certainly, if the TAG, after considering my issue, decides
that it wasn’t a problem after all, I’ll have a lot to say about that. 8-)