RESTful設計風格的個人理解

1.什麼是RESTful

restful是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制。 ——百度百科
簡單來說,就是提供了一種規則,能夠讓api更加規範,易懂。

  1. REST的解釋
    REST是Representational State Transfer的縮寫,翻譯過來就是”表現層狀態轉化“。表現層值得是把資源呈現出來的一中形式,像HTML;狀態轉移是指讓服務器發生狀態的變化(數據和狀態的改變等);我感覺就像是前後端交互過程的一個稱呼。

  2. REST架構風格最重要的架構約束有6個:

  • 客戶-服務器(Client-Server)
    通信只能由客戶端單方面發起,表現爲請求-響應的形式。
  • 無狀態(Stateless)
    通信的會話狀態(Session State)應該全部由客戶端負責維護。
  • 緩存(Cache)
    響應內容可以在通信鏈的某處被緩存,以改善網絡效率。
  • 統一接口(Uniform Interface)
    通信鏈的組件之間通過統一的接口相互通信,以提高交互的可見性。
  • 分層系統(Layered System)
    通過限制組件的行爲(即每個組件只能“看到”與其交互的緊鄰層),將架構分解爲若干等級的層。
  • 按需代碼(Code-On-Demand,可選)
    支持通過下載並執行一些代碼(例如Java Applet、Flash或JavaScript),對客戶端的功能進行擴展。
    ———百度百科
  1. 在什麼情況下使用
    在以調動資源爲主的接口設計中就可以使用了

2.爲什麼要使用RESTful風格

  • 更加語義化,方便理解
  • 具有安全性和冪等性(同一個請求發送一次或多次對服務器的影響都是一樣的)
  • 讓api的設計面向資源化

因爲每一個URI代表一種資源,所以在設計api時不能使用動詞,什麼get,update,delete都不應該出現在uri中。

3.如何使用

  1. RESTful風格需要使用到的動詞

安全性:
GET(SELECT):從服務器取出資源(一項或多項)。
冪等性:
POST(CREATE):在服務器新建一個資源
PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
DELETE(DELETE):從服務器刪除資源。
———不常用的動詞———
HEAD:獲取資源的元數據。
OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。
—— 阮一峯的網絡日誌
這些動詞是HTTP協議提供的

  1. 前端以axios爲例
//不同的動詞,修改method即可(axios.後面的動詞)
//post需要在uri後面使用一個json格式的數據
this.axios.delete(`/users/`+id
)
.then((response)=> {
    console.log(error);
})
.catch((error)=> {
    console.log(error);
});
  1. 後端以springMVC爲例
@RestController
@RequestMapping("/users")
public class userController{
	@RequestMappering(value="/{id}",method=RequestMethod.DELETE)
	public void delete(@PathVariable("id")int id){
	}
}

大概就是這個意思

  1. 一些常見的使用
    【GET】 /users # 查詢用戶信息列表
    【GET】 /users/1001 # 查看某個用戶信息
    【POST】 /users # 新建用戶信息
    【PUT】 /users # 更新用戶信息(全部字段)
    【PATCH】 /users/ # 更新用戶信息(部分字段)
    【DELETE】 /users/1001 # 刪除用戶信息
    通過變換參數來實現功能的擴展,像【GET】,沒有傳入參數,就是查詢全部;傳入了一個id,就是查詢查詢一個用戶;傳遞一組id,就是查詢一組用戶。每個【GET】都在後端對應一個方法。

  2. 常見的誤區
    uri中不應該包含動詞,應該全部使用名詞,儘量使用複數。
    若返回視圖,把表單中name爲_method的input值改爲GET、POST、HEAD,不能使用PUT、DELETE等。

如果本文存在錯誤,請直接評論或私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章