spring boot + jpa + restful (二)

這幾天因爲項目需要看了看關於restful的東西,這個確實很好用也很簡潔,雖然不是特別懂,但是簡單使用一下還是沒問題的。

簡單說下restful,這是一種軟件架構風格,並不是什麼技術,也不是標準。常用於客戶端和服務器交互類的軟件,比如前後端分離的項目、APP等。

第一篇文章是spring boot + jpa,現在如果要使用restful,直接在控制層(第一篇中提到的shopApi)設計這種風格的接口即可,不需要額外配置其他東西。

1.GET

首先我們先看看查詢怎麼用,需求是通過id查詢用戶信息

我用的是firefox的RESTClient,這個可以進行POST/GET/PUT/DELETE等多種請求。

這個請求查詢的是id爲1的用戶信息,如果想查詢其他用戶信息,將1替換爲其他用戶id即可。

後臺查詢如下(PathVariable這是一個註解,用來指明一個路徑參數)
     @ResponseBody
     @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
     public String selectUserById(@PathVariable("id") int id){
        //通過id查詢user信息
        return id+"";
     }

當我們的查詢中有多個參數時該怎麼處理,大概想到這麼幾種方法

方法一:

將多個參數作爲路徑

後臺使用多個PathVariable接收

    @ResponseBody
    @RequestMapping(value = "/user/{param1}/{param2}/{param3}",method = RequestMethod.GET)
    public String selectUsers(@PathVariable("param1") String param1,@PathVariable("param2") String param2,
            @PathVariable("param3") String param3){
        return "success";
    }

方法二:

將多個參數封裝成一個對象傳入

方法三:

使用傳統的方式,用&拼接參數(http://localhost:8012/shopApi/user?param1=1&param2=2),不過這樣有點不倫不類,看個人喜好吧

方法四:

將所有的參數封裝成json來傳遞,後臺接收後在將參數解析出來。這樣在高版本的tomcat可能有問題,就是參數中帶有特殊字符,處理方式就是將特殊字符轉義或者修改tomcat的配置,忽略特殊字符。

http://localhost:8012/shopApi/user/{"param1":1,"param2":2}

方法五:

使用form表單的形式提交。需要修改header參數(content-type: application/x-www-form-urlencoded),傳入的參數需要使用@FormParam註解


附:不同版本的接口處理

做過APP接口的朋友有沒有遇到這樣的問題,那就是如果APP部分功能更新了,就會需要新舊兩個版本的接口。同一個業務邏輯寫兩個接口會不會很麻煩,如果版本更多了,那要寫的接口會不會太多了......

restful的接口能很好的處理這個問題,因爲實際上這就是一個接口,只不過有不同的版本。加入需要v1,v2,v3三個版本的接口,只需要修改路徑中的v1就可以了。


後臺代碼如下(需要支持不同版本的接口,只需要加入對應的處理邏輯就行)

    @ResponseBody
    @RequestMapping(value = "/user/{version}/{id}",method = RequestMethod.GET)
    public String selectUserByIdAndVersion(@PathVariable("version") String version,@PathVariable("id") int id){
        if("v1".equals(version)){
            System.out.println("這是第一版接口");
        }else if("v2".equals(version)){
            System.out.println("這是第二版接口");
        }
        return id+version;
    }

2.POST

當我們需要新增時,往往都會把多個屬性放到一個對象中請求,那也沒問題,不過請求時需要設置http頭字段(Content-Type:application/json),否則會報異常提示Content-Type不支持。

這裏我想新增一個shop對象,對象中有id、shopName屬性,可以將這兩個屬性放到json中,然後將json放入http請求的body中。

後臺新增店鋪代碼如下(後臺用Shop對象接收)

    @ResponseBody
    @RequestMapping(value = "/shop",method = RequestMethod.POST)
    public String addShop(@RequestBody Shop shop){
        //新增店鋪信息
        System.out.println(shop.getId()+"---"+shop.getShopName());
        return "success";
    }

3.PUT

更新方法跟新增比較類似,也可以傳入一個對象,只不過請求換成了put

後臺代碼如下

    @ResponseBody
    @RequestMapping(value = "/shop",method = RequestMethod.PUT)
    public String updateShop(@RequestBody Shop shop){
        //修改店鋪信息
        System.out.println(shop.getId()+"---"+shop.getShopName());
        return "success";
    }

4.DELETE

刪除和查詢比較類似,傳入一個參數然後刪除數據

後臺代碼如下

    @ResponseBody
    @RequestMapping(value = "/shop/{id}",method = RequestMethod.DELETE)
    public String deleteShop(@PathVariable("id") int id){
        //通過id刪除信息
        return id+"";
    }
以上就是基本的使用介紹了,如果有需要還會進行更新,有不合理的地方或者有好的建議歡迎指正
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章