一、介紹
傳統api:
http://ip:port/addBook
http://ip:port/delBook
restful 風格api:
GET請求 http://ip:port/book
POST請求 http://ip:port/book
DELETE請求 http://ip/port/book
我的理解restful就是面向對象,把每個資源都看成一個對象,形成一個唯一的URI。然后結合http方法進行各種curl操作。
結合上面兩個示例,非restful api大多只使用get\post。然后定義api時以動詞+名詞結合使用。
而restful api的格式是URI上只有名詞,不存在動詞。區分不同的操作以http自定義的方法區分:
查看 GET
新增 POST
刪除 DELETE
局部更新 PUT
全部更新 PATCH
二、代碼范例
@org.springframework.web.bind.annotation.RestController
@RequestMapping("/bookPack/book")
public class RestController {
@RequestMapping(method = RequestMethod.GET)
public void get(){
System.out.println("get book");
}
@RequestMapping(method = RequestMethod.POST)
public void post(){
System.out.println("post:add a new book");
}
@RequestMapping(method = RequestMethod.PUT)
public void put(){
System.out.println("put :replace(create or update) a book");
}
@RequestMapping(method = RequestMethod.PATCH)
public void patch(){
System.out.println("patch: update a part of a book");
}
@RequestMapping(method = RequestMethod.DELETE)
public void delete(){
System.out.println("delete a book");
}
}
該段示例代碼就是將書包中書作為一個資源對象,匹配的資源URI就是/bookPack/book,
對應的各種curl其實就是不同的http方法予以區分,訪問的api都是一樣的。
至於使用哪種http方法,這個要結合業務使用,不要被方法名所迷惑,要結合實際使用場景。
三、http方法
get:獲取方法。冪等
post:新增,非冪等
delte:刪除,冪等
put:全更新,冪等。如果參數不全,不傳的參數將修改為null
patch:部分更新,冪等。如果參數不全,只更新傳參數的部分
四、冪等
冪等就是不管執行多少次重復操作,最后結果保持不變。
結合使用效果可以看出 http方法:post 非冪等,get\delete\put\patch為冪等