<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          API 版本控制小技巧 [ 中獎(jiǎng)名單 ]

          共 2832字,需瀏覽 6分鐘

           ·

          2021-05-05 11:19

          在 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>


          喜歡,在看



          瀏覽 29
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费观看黄色一级视频 | 无码破解日韩AV无码 | 欧美操逼图| 国产女人18水真多18精品一级做 | 欧美超逼视频 |