API 版本控制小技巧 [ 中獎(jiǎng)名單 ]
在 Spring 項(xiàng)目的控制器中,有 2 個(gè) Rest API 方法。例如
獲取用戶接口:/user/getUserInfo
獲取權(quán)限接口:/role/getRoleList
一個(gè)客戶端正在通過 /api/v1進(jìn)行訪問
現(xiàn)在想更新其中一種方法。即/user/getRoleList;因此新方法的版本將為 / api/v2 。但是 v1 的方法沒有變化,即 /api/v1 。
如何在同一項(xiàng)目中使用兩個(gè)版本處理其余方法呢?
意思是 /user/getUserInfo 接口應(yīng)該同時(shí)支持 /api/v1 和 /api/v2。并且 /role/getRoleList 也應(yīng)該應(yīng)該支持兩個(gè)版本,但是功能不同。簡單的說
/user/getUserInfo 將有1個(gè)方法同時(shí)支持兩個(gè)版本
每個(gè)版本的 /role/getRoleList 將有2個(gè)方法
如果要對兩個(gè)版本使用單獨(dú)的方法,可以通過在 @RequestMapping 中定義不同的值
方案一:使用兩個(gè)接口
@RequestMapping(value = "/v1/role/getRoleList",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
和
@RequestMapping(value = "/v2/role/getRoleList",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
如果要使用相同的方法來處理,則可以使用方案二
方案二:使用@PathVariable
@RequestMapping(value = "/{version}/role/getRoleList",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public returnType methodName(@PathVariable("version") String version){
// code to check version
}
方案三:使用@RequestHeader
@RequestMapping(value = "/role/getRoleList",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public returnType methodName(@RequestHeader("version") String version){
// code to check version
}
一般更喜歡在類級別使用 @RequestMapping 單獨(dú)的控制器中進(jìn)行管理
方案四:使用兩個(gè)類進(jìn)行單獨(dú)映射
@RestController@RequestMapping("/v1")
public class RoleV1Controller {
@RequestMapping(value = "/role/getRoleList",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public returnType methodName(){
}
}
@RestController@RequestMapping("/v2")
public class RoleV2Controller {
@RequestMapping(value = "/role/getRoleList",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public returnType methodName(){
}
}
中獎(jiǎng)?wù)?/p>


喜歡,在看
評論
圖片
表情
