1.什麼是RESTful
restful是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制。 ——百度百科
簡單來說,就是提供了一種規則,能夠讓api更加規範,易懂。
-
REST的解釋
REST是Representational State Transfer的縮寫,翻譯過來就是”表現層狀態轉化“。表現層值得是把資源呈現出來的一中形式,像HTML;狀態轉移是指讓服務器發生狀態的變化(數據和狀態的改變等);我感覺就像是前後端交互過程的一個稱呼。 -
REST架構風格最重要的架構約束有6個:
- 客戶-服務器(Client-Server)
通信只能由客戶端單方面發起,表現爲請求-響應的形式。 - 無狀態(Stateless)
通信的會話狀態(Session State)應該全部由客戶端負責維護。 - 緩存(Cache)
響應內容可以在通信鏈的某處被緩存,以改善網絡效率。 - 統一接口(Uniform Interface)
通信鏈的組件之間通過統一的接口相互通信,以提高交互的可見性。 - 分層系統(Layered System)
通過限制組件的行爲(即每個組件只能“看到”與其交互的緊鄰層),將架構分解爲若干等級的層。 - 按需代碼(Code-On-Demand,可選)
支持通過下載並執行一些代碼(例如Java Applet、Flash或JavaScript),對客戶端的功能進行擴展。
———百度百科
- 在什麼情況下使用
在以調動資源爲主的接口設計中就可以使用了
2.爲什麼要使用RESTful風格
- 更加語義化,方便理解
- 具有安全性和冪等性(同一個請求發送一次或多次對服務器的影響都是一樣的)
- 讓api的設計面向資源化
因爲每一個URI代表一種資源,所以在設計api時不能使用動詞,什麼get,update,delete都不應該出現在uri中。
3.如何使用
- RESTful風格需要使用到的動詞
安全性:
GET(SELECT):從服務器取出資源(一項或多項)。
冪等性:
POST(CREATE):在服務器新建一個資源
PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
DELETE(DELETE):從服務器刪除資源。
———不常用的動詞———
HEAD:獲取資源的元數據。
OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。
—— 阮一峯的網絡日誌
這些動詞是HTTP協議提供的
- 前端以axios爲例
//不同的動詞,修改method即可(axios.後面的動詞)
//post需要在uri後面使用一個json格式的數據
this.axios.delete(`/users/`+id
)
.then((response)=> {
console.log(error);
})
.catch((error)=> {
console.log(error);
});
- 後端以springMVC爲例
@RestController
@RequestMapping("/users")
public class userController{
@RequestMappering(value="/{id}",method=RequestMethod.DELETE)
public void delete(@PathVariable("id")int id){
}
}
大概就是這個意思
-
一些常見的使用
【GET】 /users # 查詢用戶信息列表
【GET】 /users/1001 # 查看某個用戶信息
【POST】 /users # 新建用戶信息
【PUT】 /users # 更新用戶信息(全部字段)
【PATCH】 /users/ # 更新用戶信息(部分字段)
【DELETE】 /users/1001 # 刪除用戶信息
通過變換參數來實現功能的擴展,像【GET】,沒有傳入參數,就是查詢全部;傳入了一個id,就是查詢查詢一個用戶;傳遞一組id,就是查詢一組用戶。每個【GET】都在後端對應一個方法。 -
常見的誤區
uri中不應該包含動詞,應該全部使用名詞,儘量使用複數。
若返回視圖,把表單中name爲_method的input值改爲GET、POST、HEAD,不能使用PUT、DELETE等。
如果本文存在錯誤,請直接評論或私信我