Peter Williams recently made a good proposal suggesting content-negotiation as a means to advertise and ask for version support. This is in contrast to using version identifiers in URIs as is commonly done. This is a neat idea. Peter’s post prompted some debate and a rebuttal. But I find that this debate is a distraction.
In my view, the real problems that every interface designer must be concerned about every day are (a) maintaining compatibility with the interface’s clients, and (b) avoiding versioning.
Yes, avoiding versioning!
Versioning is a hack and is a clever disguise to hide the fact the interface has broken its contract with its clients, and needs clients to start all over again (i.e. upgrade to a newer version of the contract).
So, please please avoid versioning. I don’t care how pretty one versioning solution is over another versioning solution, if it requires clients to change their code. If it does not require clients to change their code, the changes to the interface are, after all, compatible, and hence do not require a change in the version.