我正在开发一个基于Java的RESTful Web应用程序,旨在成为其各种客户端应用程序的核心。这些客户端应用程序可以在主系统中的相同资产上运行(例如,客户端应用程序A在主系统中创建资产,而客户端应用程序B从系统中获取它们)。我们推出了 / v1 / API版本,并在 / v2 / 中开发了新功能。要求是发布v2,同时仍然支持v1在一段时间内向后兼容,直到所有客户端应用程序都移植到v2。这一要求背后的想法是,针对不同API版本编写的客户端应用仍然可以在同一资产上进行合作。
目前,我们在单个系统实例中涵盖了两个API版本。虽然对于HTTP API的一些微小变化,通常足以提供一个新的控制器(像桥接模式),对于稍大的变化,似乎最好编写一个新的控制器和放大器。服务层(希望两个版本都能满足"在某种程度上,重用一套通用的功能)。
然而,还有更广泛的变化。更重要的是,主要系统不仅仅是一个愚蠢的CRUD,而是一个复杂的多组件网络,与少数外部服务集成,涉及一些异步工作'处理等等。当然,它只是保持向后兼容行为的一个方便的地方。
是否有任何最佳做法可以保持API和API的向后兼容性它背后的行为,而不是把代码变成一团糟?
我们关心代码的质量,并且讨厌使用复制粘贴调整类来污染代码并维护重复/并行功能实现。是的,我们已经为v1和v2划分了java包。
另外,我们希望避免旧版本的代码绑定我们的手并避免重新设计新版本的架构的情况,只是为了简化保持这一点后兼容性。