Spring Boot版本:2.3.4.RELEASE
目的
项目迭代升级,接口要更新,并且要在接口路径不变的清空下兼容老接口,就可以做接口版本管理,像这样:
老接口:
1 | json复制代码{ |
新接口:
1 | json复制代码{ |
对于前端来说,可以在headers中指定接口的版本,不需要修改接口的路径。
除了指定接口版本,还能指定接口的支持平台,比如web端、移动端。
实现
需要四个实现类,和web mvc的配置类
目录是这样的:
1 | markdown复制代码- com.cc |
@ApiVersion:
1 | java复制代码package com.cc.config.version; |
ApiPlatform:
1 | java复制代码package com.cc.config.version; |
ApiHandlerMapping:
1 | java复制代码package com.cc.config.version; |
ApiVersionCondition:
1 | java复制代码package com.cc.config.version; |
WebMvcConfig:
1 | java复制代码package com.cc.config; |
使用
后端编写接口的时候只需要添加@ApiVersion注解即可:
1 | java复制代码package com.cc.controller; |
controller里一共有三个接口,分别的调用方式是:
- 接口版本为v1,那么header是这样的:
1 | json复制代码{ |
请求结果为:
this api version is v1
2. 接口版本为v2,header是这样的:
1 | json复制代码{ |
请求结果为:
this api version is v2
3. 接口版本为v2,并且仅支持web端平台,在ApiPlatform里可以知道web端的标识是1,所以header是这样:
1 | json复制代码{ |
请求结果为:
this api version is v3
另外,@ApiVersion注解还能作用于类上,可以很方便的给类里所有的接口指定版本,并且因为最后定义优先原则,作用于函数上的注解会覆盖类上面的,所以像下面的代码:
1 | java复制代码package com.cc.controller; |
t1函数的接口版本为类声明的v1,t2函数的接口版本为覆盖后的v2。
本文转载自: 掘金