如何进行存根版本控制?
API 版本控制
版本控制到底是什么意思?如果您指的是 API 版本,有不同的方法
-
使用超媒体链接,并且不以任何方式对您的 API 进行版本控制
-
通过请求头和 URL 传递版本
我们不试图回答哪种方法更好的问题。您应该选择最适合您需求并能为您带来商业价值的方法。
假设您确实对 API 进行了版本控制。在这种情况下,您应该提供尽可能多的合同,包含尽可能多的您支持的版本。您可以为每个版本创建一个子文件夹,或者将其附加到合同名称中——无论哪种方式最适合您。
JAR 版本控制
如果“版本控制”是指包含存根的 JAR 的版本,那么主要有两种方法。
假设您正在进行持续交付和部署,这意味着每次通过流水线时都会生成新版本的 jar,并且该 jar 可以随时投入生产。例如,您的 jar 版本如下所示(因为它是在 2016 年 10 月 20 日 20:15:21 构建的)
1.0.0.20161020-201521-RELEASE
在这种情况下,您生成的存根 jar 应该如下所示
1.0.0.20161020-201521-RELEASE-stubs.jar
在这种情况下,当引用存根时,您应该在 application.yml 或 @AutoConfigureStubRunner 中提供最新版本的存根。您可以通过传递 + 符号来完成此操作。以下示例展示了如何操作
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:8080"})
但是,如果版本固定(例如 1.0.4.RELEASE 或 2.1.1),则必须设置 jar 版本的具体值。以下示例展示了如何为版本 2.1.1 执行此操作
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:2.1.1:stubs:8080"})
开发或生产存根
您可以操作分类器,以便针对其他服务的存根的当前开发版本或已部署到生产环境的存根运行测试。如果您更改构建以在达到生产部署后使用 prod-stubs 分类器部署存根,则可以在一种情况下使用开发存根运行测试,在另一种情况下使用生产存根运行测试。
以下示例适用于使用存根的开发版本进行测试
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:8080"})
以下示例适用于使用存根的生产版本进行测试
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:prod-stubs:8080"})
您也可以在部署流水线的属性中传递这些值。