Spring Rest API 版本控制

Kri*_*ish 5 rest spring web-services spring-mvc

在我的 Spring 控制器中,我有 2 个 REST API 方法。示例: getUser、getRole 一个客户端通过“/api/v1”等方式访问它。现在我想更新其中一种方法。即,获取角色。所以新的方法/版本将是“/api/v2”。但v1的方法没有改变。即“/api/v1”。

如何处理同一项目中两个版本的其余方法?我的意思是,getUser Rest API 应该支持“/api/v1”和“/api/v2”。getRole REST API 应该支持两个版本但功能不同(例如:数据库更改、逻辑更改)。简单来说,1. getUser 将有 1 个支持两个版本的方法。2. getRole 每个版本都有 2 个方法。

请在这里帮助我。

dhy*_*ngh 5

如果您想对两个版本使用单独的方法,您可以通过在中定义不同的值@RequestMapping

方法1

    @RequestMapping(
                value = "baseurl/v1/role",
                method = RequestMethod.GET,
                produces = MediaType.APPLICATION_JSON_VALUE)

   and


    @RequestMapping(
                    value = "baseurl/v2/role",
                    method = RequestMethod.GET,
                    produces = MediaType.APPLICATION_JSON_VALUE)
Run Code Online (Sandbox Code Playgroud)

但如果你想用同样的方法处理它,你可以使用

方法2:使用@PathVariable

@RequestMapping(
            value = "baseurl/{version}/role",
            method = RequestMethod.GET,
            produces = MediaType.APPLICATION_JSON_VALUE)
public returnType methodName(@PathVariable("version") String version){

// code to check version

}
Run Code Online (Sandbox Code Playgroud)

方法3:使用@RequestHeader

@RequestMapping(
                value = "baseurl/role",
                method = RequestMethod.GET,
                produces = MediaType.APPLICATION_JSON_VALUE)
    public returnType methodName(@RequestHeader("version") String version){

    // code to check version

    }
Run Code Online (Sandbox Code Playgroud)

但正如你所说,你有不同版本的 api,更喜欢在@RequestMapping类级别使用单独的控制器来管理它们

方法四:

@RestController
@RequestMapping("/v1")
public class anyController {

}

and 

@RestController
@RequestMapping("/v2")
public class anyController {

}
Run Code Online (Sandbox Code Playgroud)