Don Smith continues our conversation on parameters to XML Web Service methods in his post Versioning Web Service Parameters where he writes
Dare makes a few comments about one of my previous posts so I thought - in true blogsphere fashion - I'd follow-up in a new post.
I think it's also important to make a distinction between different kinds of Web Services, even if they're broad and sweeping. There is a considerable difference between a service-oriented Web Service and one that is not service-oriented. Perhaps my choice of GetTemp( TempRequest ) was a poor one. Service-oriented operations are very course-grained because they represent a business process. Because of this, the service interface is not likely to change (unless the organization is going to stop offering the service). However, the data pieces that service will require could very possibly evolve over time. Therefore, it's important to be able to version the service interface and the parameters of the operations independently. If you agree at this point, then we need a way to identify what version of the operation's inputs are being used. The only way to accomplish this with multiple parameters is for one of the parameters, which has nothing to do with the business logic of the operation, to contain version information. With a single parameter, we can maintain a straightforward experience for the client developer.
I agree with Don that his original example was probably not the best to illustrate his point. The problem I had with his original post was that it was a general recommendation which in my experience tend to never hold in most cases let alone all of them. The complexity of the service and the expected evolutionary path of the service end point should dictate whether the additional complexity of using a single parameter that contains versioning information and the actual input the method should be used or not.
Since I tend to agree with the excerpted paragraph about service oriented methods being coarse grained which implies that one should be able to version parameters, I think Don and I are now in violent agreement. 🙂