6

JAX-RS 和 JAX-WS 非常适合生成 API。但是,它们根本没有解决向后兼容性的问题。

为了避免在 API 引入新功能时破坏旧客户端,您基本上必须接受并提供与以前完全相同的输入和输出格式;许多 XML 和 JSON 解析器似乎很适合,如果他们发现一个没有映射到任何东西的字段,或者有错误的类型。

一些 JSON 库,例如 Jackson 和 Gson,提供了一个功能,您可以根据运行时设置为给定对象指定不同的输入/输出表示,这似乎是在许多情况下处理版本控制的合适方法。这使得可以通过注释添加和删除的字段来提供向后兼容性,以便它们仅根据客户端使用的 API 版本出现。

迄今为止,我发现 JAXB 和任何其他 XML 数据绑定库都没有很好地支持这个概念,更不用说能够为 JSON 和 XML 重用相同的注释。将它添加到 JAXB-RI 或 EclipseLink Moxy 似乎是可能的,但令人生畏。

版本控制的另一种方法似乎是对所有已更改的类进行版本控制,通常是在每次发布 API 时创建一个新包,并在新包中复制所有修改的 DTO、服务和资源类,以便所有类型信息针对绑定和调度系统进行了版本控制。这种方法对我来说似乎更费力。

我的问题是:您如何设计您的 Java API 提供程序以实现向后兼容性?什么有效,什么无效?

非常感谢有关该主题的案例研究或博客文章的链接;我做了一些谷歌搜索,但没有找到太多关于这个的讨论。

4

1 回答 1

0

我是EclipseLink MOXy的技术主管,我对您的版本控制要求非常感兴趣。您可以通过我的博客与我联系:

MOXy 提供了一种将 JAXB 元数据表示为 XML 文件的方法。您可以利用它为同一对象模型创建多个映射:

于 2010-11-16T18:28:32.393 回答