很簡單的問題,在前後端分離的應用模式裏,後端API如何定義?
- Roy Thomas Fielding在他2000年的博士論文中提出了REST這個詞。這個人就是HTTP協議(1.0版和1.1版)的主要設計者、Apache服務器軟件的作者之一、Apache基金會的第一任主席。所以,他的這篇論文一經發表,就引起了關注,並且立即對互聯網開發產生了深遠的影響。
- Fielding將他對互聯網軟件的架構原則,定名爲REST,即Representational State Transfer的縮寫。維基百科稱其爲“具象狀態傳輸”,國內大部分人理解爲“表現層狀態轉化”
- RESTful是一種開發理念。維基百科說:REST是設計風格而不是標準。REST描述的是在網絡中client和server的一種交互形式;REST本身不使用,實用的是如何設計RESTful API(REST風格的網絡接口),一種萬維網軟件架構風格。
- 我們先來具體看一下RESTful風格的url,比如我要查詢商品信息,那
-
非REST的url:http://.../queryGoods?id=1001&type=t01
-
REST的url: http://.../t01/goods/1001
-
-
可以看出REST特點:url簡潔,將參數通過url傳到服務器,而傳統的url比較羅嗦,而且現實中瀏覽器地址欄會拼接一大串字符,想必你們都見過吧。但是採用REST的風格就會好很多,現在很多的網站已經採用這種風格了,這也是潮流方向,典型的就是url的短化轉換。
那麼,到底什麼是RESTFul架構: 如果一個架構符合REST原則,就稱它爲RESTful架構。
要理解RESTful架構,理解Representational State Transfer這三個單詞的意思。
-
具象的,就是之表現層,要表現的對象也就是‘資源’,什麼是資源呢?網站就是資源共享的東西,客戶端(瀏覽器)訪問web服務器,所獲去的就叫資源。比如html,txt,json,圖片,視頻等等。
-
表現,比如,文本可以用txt格式表現,也可以用HTML格式、XML格式、JSON格式表現,甚至可以採取二進制格式;圖片可以用JPG格式表現,也可以用PNG格式表現。
-
瀏覽器通過URL確定一個資源,但是如何確定它的具體表現形式呢?應該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個字段纔是對”表現層“的描述
-
狀態轉化,就是客戶端和服務器互動的一個過程,在這個過程中,勢必設計到數據和狀態的變化,這種變化叫做狀態轉換。
-
互聯網通信協議HPPT協議,客戶端訪問必然實用HTTP協議,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生”狀態轉化“(State Transfer)
-
HTTP協議實際上含有4個操作方式的動詞,分別是GET,POST,PUT,DELETE,他們分別對應四種操作。GET用戶獲取資源,POST用於新建資源,PUT用戶更新資源,DELETE用於刪除資源。GET和POST是表單提交的兩種基本方式,比較常見,而PUT和DELETE不太常用。
-
而且HTTP協議是一種無狀態協議,這樣就必須把所有的狀態都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生’狀態轉化‘(State Transfer)
-
總結:
- RESTful架構就是:
- 每一個URL代表一種資源;
- 客戶端和服務器之間,傳遞這種資源的某種表現層;
- 客戶端通過四個HTTP動詞,對服務器資源進行操作,實現”表現層狀態轉化“
- RESTful架構就是: