這幾天因爲項目需要看了看關於restful的東西,這個確實很好用也很簡潔,雖然不是特別懂,但是簡單使用一下還是沒問題的。
簡單說下restful,這是一種軟件架構風格,並不是什麼技術,也不是標準。常用於客戶端和服務器交互類的軟件,比如前後端分離的項目、APP等。
第一篇文章是spring boot + jpa,現在如果要使用restful,直接在控制層(第一篇中提到的shopApi)設計這種風格的接口即可,不需要額外配置其他東西。
1.GET
首先我們先看看查詢怎麼用,需求是通過id查詢用戶信息
我用的是firefox的RESTClient,這個可以進行POST/GET/PUT/DELETE等多種請求。
這個請求查詢的是id爲1的用戶信息,如果想查詢其他用戶信息,將1替換爲其他用戶id即可。
@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¶m2=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+"";
}
以上就是基本的使用介紹了,如果有需要還會進行更新,有不合理的地方或者有好的建議歡迎指正