我正在寻找好的工具来支持更改 REST 服务中使用的模型版本。我梦想的工具会做类似的事情:
- 我的 pojo + 1.0 版 config/transformer => 我的模型 1.0 可用的服务
- 我的 pojo + 版本 1.1 config/transformer => 服务可用于我的模型的 1.1
在我的特殊情况下,我不需要进行逆向转换,因为我的 REST 服务将只提供数据查找,从不存储任何东西,但我不介意使用同时执行这两种操作的工具:-)
我正在考虑的一个解决方案是在我的 pojo(版本 + 名称)中添加自定义注释,并制作一个代码生成器,该代码生成器将根据版本号根据我的 pojo 生成 JSON/XML。虽然在这里我觉得我正在重新发明轮子。
编辑: 这是一个可以从版本 1 到版本 1.1 的更改示例:
版本 1: 人 名 姓
版本 1.1 人 名 姓 生日
如果您使用 1.0 版访问 API,则不会获得生日属性 - 它仅在 1.1 版中可用。我想要使这些服务可用的工具支持,我可以在其中配置我的 pojo(目前类似于 1.1 版本),我想提供不显示这些值的 1.0 版本。
对模型的其他合法更改可能是删除属性或重命名属性(甚至重命名实体)。
编辑 2: Digital Joel 在评论中提到,对于 API 版本控制的讨论,您应该阅读 https://stackoverflow.com/posts/9789756/ .
摆脱版本控制的简单方法当然是不要进行向后破坏性的 API 更改,但业务会发生变化,所以这并不总是可行的。我的兴趣在于如何使这些更改更易于处理,因此我的问题。
编辑 3: 我一直在寻找可能有助于该过程的工具,但仍然没有找到可以很好地将其与休息联系起来的工具。以下是我目前找到的链接:
- http://wiki.pmease.com/display/xmt/What%27s+XMT (看起来像一个库,用于帮助将 pojos 序列化为带有版本控制的 xml)
最佳答案
如一个答案中所述,可能没有可用的工具来自动对 API 进行版本控制。
我们可以通过两步法解决这一挑战:
1) API 版本信息 关于最佳实践的争论很多。 两个最受欢迎的是:
(i) URI redesign - putting version info in URI like
http://something.com/v1.0/resource1/ or
http://something.com/resource1?ver=1.0
(ii) Using HTTP Header - putting version info in Accept/Content-Type
header keeping URI intact like
#
GET /something/ HTTP/1.1
Accept: application/resource1-v1.0+json
2) 使用 json/xml 库的同一个 pojo 的多个版本
一旦获得版本信息,我们就必须相应地生成资源。 有许多 json 和 xml 库,我们可以使用它们维护同一个 pojo 的多个版本,并根据版本仅序列化所需的属性。 Google gson java 库在这方面效果很好。查看 https://sites.google.com/site/gson/gson-user-guide#TOC-Versioning-Support
public class Person{
@Since(1.0)
private String firstname;
@Since(1.0)
private String lastname;
@Since(1.1)
private String birthdate;
}
关于java - 为 Java 版本控制 REST 模型的好工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9789756/