版本控制

概述

在实际的应用开发过程中,接口版本往往是比较头疼的一个问题,如何控制接口的版本,本人根据spring custom request condition,定义了一个annotation @ApiVersion,来指定接口版本信息。 在接口请求时,在request header中增加版本信息(eg:api-version:2.1.0

使用方法

注解@ApiVersion 和配置app.api.version = @project.version@

app.api.version 指定当前系统版本,注解可以在Controller 或是 方法上指定api版本信息

  • 如果只是在Controller指定版本信息,则所有方法都是该版本
  • 如果Controller和方法上同时指定了版本,则方法上指定的版本为该api版本
  • 如果都没有指定,则系统当前版本为API 版本
    1
    2
    3
    4
    5
    6
    7
    8
    9
      @ApiVersion("5")
      public class HelloController {
    
          @RequestMapping("hello")
          @ApiVersion("1")
          public String hello(String value) {
              log.info("haha1..........");
              return "hello 1 " + value;
          }
    

版本控制逻辑

api请求版本可通过请求头api-version指定,在没有带请求版本的情况下,默认匹配低于当前版本的最新版本。

可以通过app.api.param-name指定版本头参数名

  • 如果请求版本高于当前系统版本,则返回404
  • 请求版本低于或等于当前系统版本,匹配指定版本内的最新版本.
  • 不带请求版本,匹配最新版本
  • eg: 系统当前版本2.1.0-a, api有四个版本:1.2, 2.0,2.1.0-a 3.0

    请求版本 匹配版本
    未指定 2.0
    3.0 无匹配
    2.0.1 2.0
    2.1.0-a 2.1.0-a
    2.1.0 2.0
    1.8 1.2
    1.0 无匹配

GitHub