背景
项目基于 SpringBoot,业务迭代较快,常有接口不向下兼容的情况,需要实现多版本的接口
多版本实现方式
Api 版本控制的方式:
- 域名区分管理,即不同的版本使用不同的域名,v1.api.test.com ,v2.api.test.com
- 请求 url 路径区分,在同一个域名下使用不同的 url 路径,test.com/api/v1/,test.com/api/v2
- 请求参数区分,在同一 url 路径下,增加 ersion=v1 或 v2 等,然后根据不同的版本,选择执行不同的方法。
实际项目中,一般选择第二种:请求 url 路径区分。因为第二种既能保证水平扩展,有不影响以前的老版本
原文链接: https://blog.csdn.net/weixin_39255905/article/details/110391515
两种实现对比
比较倾向 url 路径区分,如上实现@ApiVersion()
如:test.com/api/v1/test 其中v1是版本 test是具体接口
基于 Controller 隔离控制
在 Contorller 层添加注解,如 @ApiVersion(1) 和 @ApiVersion(2)
- 请求正确的版本地址,会自动匹配版本的对应接口
- 请求的版本大于当前最大版本时,默认匹配当前最大版本。
- 请求的版本小于当前最小版本时,会 404
- 请求对应的版本不存在接口(methods)时,会匹配之前版本的接口
基于 Methods 中的注解大小控制
在具体的 Methods 上添加注解,如 @ApiVersion(3)
@ApiVersion(3)自定义注解,传递参数信息表示默认最低的版本限制。
总结
综上所述,大家更喜欢哪种方式?
