ClientAPI
From APIDesign
Line 1: | Line 1: | ||
- | There is a difference between [[ClientAPI]] and [[ProviderAPI]] evolution rules. As soon as you publish an [[API]] | + | There is a difference between [[ClientAPI]] and [[ProviderAPI]] evolution rules. As soon as you publish an [[API]], you, as a publisher of your library, want to have a freedom to evolve it to satisfy additional requirements of users of your library. What additional requirements can you expect? In case the only use of your [[API]] is to be called, then the obvious requirement is to be to add more methods and to allow the users to call more of exposed functionality. |
What is the most suitable coding construct in [[Java]] to support [[BackwardCompatibility|backward compatible]] additions of new methods? The most safe one is a final class. As such it is suggested to expose only final classes to users of [[ClientAPI]]. If you publish non-final class, or even interface, you'll face [[evolution]] problems as described at [[ExtendingInterfaces]]. | What is the most suitable coding construct in [[Java]] to support [[BackwardCompatibility|backward compatible]] additions of new methods? The most safe one is a final class. As such it is suggested to expose only final classes to users of [[ClientAPI]]. If you publish non-final class, or even interface, you'll face [[evolution]] problems as described at [[ExtendingInterfaces]]. |
Revision as of 19:49, 7 March 2011
There is a difference between ClientAPI and ProviderAPI evolution rules. As soon as you publish an API, you, as a publisher of your library, want to have a freedom to evolve it to satisfy additional requirements of users of your library. What additional requirements can you expect? In case the only use of your API is to be called, then the obvious requirement is to be to add more methods and to allow the users to call more of exposed functionality.
What is the most suitable coding construct in Java to support backward compatible additions of new methods? The most safe one is a final class. As such it is suggested to expose only final classes to users of ClientAPI. If you publish non-final class, or even interface, you'll face evolution problems as described at ExtendingInterfaces.