java - 为 Java 版本控制 REST 模型的好工具

标签 java rest model data-migration

我正在寻找好的工具来支持更改 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: 我一直在寻找可能有助于该过程的工具,但仍然没有找到可以很好地将其与休息联系起来的工具。以下是我目前找到的链接:

最佳答案

如一个答案中所述,可能没有可用的工具来自动对 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/

相关文章:

java - 验证库设计模式选择

java - AWS S3 客户端竞争条件解决方案

iphone - “Live”UITableView - 从服务器获取小部分数据

c# - Web 服务调用时长

angularjs - Meteor、Laravel RESTful API + AngularJS 或 Laravel 用于我的下一个 Web 应用程序

php - 有没有办法创建一个动态模型,该模型具有使用 Yii2 验证动态属性的动态规则?

java - eclipse 编辑器中的背景图像

java - 修复 JList 的最大大小并更改空单元格的外观

java - 模型未保存在 Play Framework 中

php - 如何从 PHP 特定行的 sum(columns) 函数获取值