I am designing a (SOAP-like) inter-process communication protocol for making function calls over a network. I want to make sure an older client can talk to a newer server. After thinking over it for a while, it seems like the only thing I can do are:
- avoiding API changes
- make it possible to add functions
- make it possible to add function parameters
However, when the server's functionality thoroughly changes, this isn't enough. For example:
- a parameter that has to be moved from one function call to another.
- a parameter type that changes, for example from an integer to a string.
My question is: can this kind of changes be made while staying backward compatible, or is the only option simply not to make them?
Note: I know, I am suffering from the not invented here syndrome, but in my opinion that doesn't invalidate this question.