約束
前後端分離出現後,後端提供給前端的 API 應該如何設計成則便於理解、容易使用的,成了一個問題。而所謂的 RESTful 就是用來規範後端提供的 API 的一種約束。
Representational State Transfer
RESTful,意思是 REST 風格的。
REST 是 Representational State Transfer 的縮寫,意思是表現層的 狀態 轉化。
這裏其實還缺一個東西。什麼的表現層?Resources,資源。
Resources
Resources,資源,網絡上的一個信息實體。它可以是一段文本、一張圖片、一首歌曲、一種服務。
每一個資源都有一個唯一標識,在 Web 中這個唯一標識就是URI (Uniform Resource Identifier)。
URI 既可以是資源的地址(URL,Uniform Resource Location),也可以是資源的名稱(URN,Uniform Resource Name)。
要獲取這個資源,訪問它的URI就可以。所謂"上網",就是與互聯網上一系列的"資源"互動,調用它的URI。
Representational
Representational,表現層的。表現層是資源的表現形式。如果資源是文本,表現層可以是 txt、html、json;如果資源是文件,表現層可以是 jpg、png。
State Transfer
State Transfer,狀態轉化。
訪問一個網站,就代表了客戶端(前端)和服務器(後端)的一個互動過程。在這個過程中,勢必涉及到數據和狀態的變化。
互聯網通信協議 HTTP 協議,是一個無狀態協議。這意味着,所有的狀態都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"( State Transfer)。而這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。
客戶端用到的手段,目前來說只能是 HTTP 協議。具體來說,就是 HTTP 協議裏面,四個表示操作方式的動詞:POST、 DELETE、PUT、GET,對應增刪改查。
GET、PUT 和 DELETE 都是冪等(一次和多次請求產生相同的副作用)的。
對於這四種操作,前端利用 Ajax 裏的 method,後端利用 @RequestMapping(method= ),只有兩者對應才能訪問成功。