如何创建向后兼容的JAX-RS和JAX-WS API?

时间:2010-11-16 18:18:15

标签: soap jaxb jax-ws jax-rs api-design

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

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

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

JAXB和我迄今为止发现的任何其他XML数据绑定库都没有对这个概念提供相应的支持,因此无法为JSON和XML重用相同的注释。将它添加到JAXB-RI或EclipseLink Moxy似乎有可能,但令人生畏。

版本控制的另一种方法似乎是对所有已更改的类进行版本化,通常是每次发布API时创建一个新包,并在新包中复制所有修改过的DTO,Service和Resource类,所有类型信息都为绑定和调度系统版本化。这种方法对我来说似乎更加费力。

我的问题是:您是如何设计Jave API提供程序以实现向后兼容的?什么工作,什么没有?

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

1 个答案:

答案 0 :(得分:0)

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

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