I was particularly interested in this session in part because, as of this writing, there are no de-facto standardized mechanisms in place to version a web service. This session presented several patterns and strategies that could be used to achieve effective versioning.
The speaker presented different scenarios that would require a service to be versioned. It was quite interesting - he made the distinction between "formal" and "semantic" changes, and that both types would trigger the need for a new version of the service. I'll admit that I had not thought about these different classes of changes, so it was really neat to witness the ideas expressed.
A formal change would be something "concrete" - such as adding a new piece of data to a message required by an operation. A semantic change might be something like the SLA requirements on the service changing - e.g., the SLA of a service changed from a 95% uptime requirement to a 99% uptime requirement. Such a change would have ZERO impact on the WSDL, yet it is still a form of change, and thus, a new version of the web service would need to be rolled-out and thus versioning is required.
My colleague Dave Read and I were discussing the merits of the patterns covered in the session, and we both took note of the fact that many of the ideas presented were not really new; that many of the ideas were just new applications of existing principals and design patterns. Here are some examples (in parenthesis is how the proffered pattern relates to an existing pattern or idiom):
- the speaker presented a pattern in which a mediator component would provide a layer of indirection to service clients; the mediator would route the request to the appropriate service implementation based on the contents of the message (see GoF Mediator pattern)
- the speaker presented a pattern in which the message itself could contain a version parameter, thus providing the necessary version context (see Format Indicator EI pattern)
More information on the session can be found here. The speakers who presented were: Kiran Bhumana and Gopalan Suresh Raj.