1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        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è)版本,但是功能不同。簡(jiǎn)單的說

        • /user/getUserInfo 將有1個(gè)方法同時(shí)支持兩個(gè)版本

        • 每個(gè)版本的 /role/getRoleList 將有2個(gè)方法


        如果要對(duì)兩個(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
        }

        一般更喜歡在類級(jí)別使用 @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)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩黄色大片 | 91人妻人人做人碰人人爽 | 冰山高冷受被c到哭年下攻 | 十八岁新疆女rapper更新内容 | 97人妻人人做人碰人人添图片 | 天天干夜夜添 | 裸体bbbbbblbbb视频 | 天天色综合天天色 | 黄片视频在线看 | 欧美成人三级网站 |