Web Services Version Mania
This past week I attended Oracle's Developer Days in New Jersey. The sessions basically covered Oracle's pitch on SOA - although, unsurprisingly, after an initial high level SOA level-set, it seemed to focus more on the presentation, business and persistence level capabilities of their 10g Application Server.
However, at the end of the day, Tyler Jewell from The Middleware Company gave a brief presentation on their SOA/Web Services perspectives. On one slide he had a phrase that has been in the back of my mind for a number of months - Web Services "Version Mania."
The problem I see is in terms of the evolutionary nature of Web Services. Web Services get defined and published. Consumers begin to use those Web Services. Web Services evolve, add functionality, expose enhanced interfaces. As I think about this topic, the following questions arise:
- How do we manage versioning of Web Services interfaces? I may have a number of consumers of MyWebService v1.0. I now have MyWebService v2.0 - how can I deploy this Web Services and transition clients?
- How do we manage graceful deprecation of previous versions? I want some capability to inform (directly or through a registry) Web Service clients of the availability of an enhanced interface. I do not want to have to support x previous versions of the same service.
- What tools exist today that provide me the ability to pro-actively push update information to known consumers of a Web Service?
There have been a number of discussions recently regarding the importance of a registry within any Web Services initiative. Being able to capture, manipulate, query and disseminate Web Services meta-data is a very powerful capability. Versioning and Deprecation information, as well as the functionality to support its management (including change notification), sounds like a good fit as a capability of the registry.
The subscription API within UDDI v3 looks like a good potential for the notification channel. Changes, updates or deprecation of Web Services could be dispatched to all known subscribers for the particular Web Service (or group of Web Services).
It's early days for my thought process on this topic, and I'm in the process of doing some more research. If anyone has any pointers to specific approaches to versioning and deprecation, or vendors doing a good job attacking this problem, please leave a comment below. I'm especially interested in any standards-based approaches to addressing aspects of this challenge.