为用于JAVA的睡觉模型进行版本控制的好工具

2022-02-22 00:00:00 model rest data-migration java

我正在寻找好的工具来支持改变睡觉服务中使用的模型的版本。我的梦想工具可以做到以下几点:

  • My POJO+1.0版配置/转换器=>1.0版My Model提供的服务
  • My POJO+版本1.1配置/转换器=>我的型号1.1提供的服务

在我的特殊情况下,我不需要做反向转换,因为我的睡觉服务只提供数据查找,不会存储东西,但我不介意使用同时做这两个功能的工具:-)

我正在考虑的一个解决方案是在我的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(看起来像一个帮助序列化POJO到XML进行版本控制的库)

解决方案

如一个答案中所述,可能没有可用于执行API自动版本控制的工具。

我们可以通过两步法解决此挑战:

1)接口版本信息 关于最佳实践有很多争论。 最受欢迎的两个是:

(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;

}

相关文章