« Goldfish | Main | Your sofware business model is dead, get over it »

Scott Sterling on Versioning

worth reading

Supporting versioning at the individual service level opens the door to lots of possible screw ups, in my opinion. Ideally, clients of the service API will import a "versionless"" interface.

Yes. In the Web world, this is known as a uniform interface. CLOS hackers will recognize the notion as a generic method. OO gits will probably call it polymorphism.

Only the implementation of the interface is versioned.

Yes, but only internally to the server. The version information is just noise to the client. Unless it's so very different. Then technically you're looking at a new application, not an upgrade (whether you call it an upgrade is a different issue).

Version configuration will be done via XML configuration for the service. Still, my biggest worry is about unforeseen dependencies between services, where if you have a dozen services with some at version 1 while a couple are at v4 and others are at v6 or whatever. There's a strong potential for dependency between service impementations and versions, where, say the v6 logger works with the v5 naming service and up, but not with any earlier versions.

Well, that's tight coupling for you. If we can't tease these things apart and preserve modularity across versions, it's as if we've written one big function. The model that seems to work very well at the level of Java is the Plugin pattern. The success of the Plugin isn't a surprise: it's simply a less constraining variant of the uniform interface principle (that protocols like HTTP use). However some libs (like Log4j) make it awkward to protect your application from their details - config files can lock you into libraries and their versions just as much as poorly encapsulated exposure to the source can.

Speaking of all this, I responded to a post on the axis mailing list yesterday about much the same problem. It was claimed that building tightly coupled systems using web services was a hard problem - forgive me, but I though the idea of WS was to get us away from all those tightly coupled headaches!

Could become a nightmare for testing and support maintaining meshes of mix-and-match services.

Oh yes :) The REST/HTTP uniform interface wins hands down, when clients and services are run by different authorities with their own agendas. Give all published services the same interface. Just think of it as the Plugin pattern applied to the web.

December 20, 2002 12:46 PM


Trackback Pings

TrackBack URL for this entry: