JAX-RS 和 JAX-WS 非常适合生成 API。但是,它们根本没有解决向后兼容性的问题。
为了避免在 API 引入新功能时破坏旧客户端,您基本上必须接受并提供与以前完全相同的输入和输出格式;许多 XML 和 JSON 解析器似乎很适合,如果他们发现一个没有映射到任何东西的字段,或者有错误的类型。
一些 JSON 库,例如 Jackson 和 Gson,提供了一个功能,您可以根据运行时设置为给定对象指定不同的输入/输出表示,这似乎是在许多情况下处理版本控制的合适方法。这使得可以通过注释添加和删除的字段来提供向后兼容性,以便它们仅根据客户端使用的 API 版本出现。
迄今为止,我发现 JAXB 和任何其他 XML 数据绑定库都没有很好地支持这个概念,更不用说能够为 JSON 和 XML 重用相同的注释。将它添加到 JAXB-RI 或 EclipseLink Moxy 似乎是可能的,但令人生畏。
版本控制的另一种方法似乎是对所有已更改的类进行版本控制,通常是在每次发布 API 时创建一个新包,并在新包中复制所有修改的 DTO、服务和资源类,以便所有类型信息针对绑定和调度系统进行了版本控制。这种方法对我来说似乎更费力。
我的问题是:您如何设计您的 Java API 提供程序以实现向后兼容性?什么有效,什么无效?
非常感谢有关该主题的案例研究或博客文章的链接;我做了一些谷歌搜索,但没有找到太多关于这个的讨论。