Web應用模式
在開發Web應用中,有兩種應用模式:
-
前後端不分離
-
前後端分離
1 前後端不分離
在前後端不分離的應用模式中,前端頁面看到的效果都是由後端控制,由後端渲染頁面或重定向,也就是後端需要控制前端的展示,前端與後端的耦合度很高。
這種應用模式比較適合純網頁應用,但是當後端對接App時,App可能並不需要後端返回一個HTML網頁,而僅僅是數據本身,所以後端原本返回網頁的接口不再適用於前端App應用,爲了對接App後端還需再開發一套接口。
2 前後端分離
在前後端分離的應用模式中,後端僅返回前端所需的數據,不再渲染HTML頁面,不再控制前端的效果。至於前端用戶看到什麼效果,從後端請求的數據如何加載到前端中,都由前端自己決定,網頁有網頁的處理方式,App有App的處理方式,但無論哪種前端,所需的數據基本相同,後端僅需開發一套邏輯對外提供數據即可。
-
在前後端分離的應用模式中 ,前端與後端的耦合度相對較低。
-
在前後端分離的應用模式中,我們通常將後端開發的每個視圖都稱爲一個接口,或者API,前端通過訪問接口來對數據進行增刪改查。
認識RESTful
在前後端分離的應用模式裏,後端API接口如何定義?
例如對於後端數據庫中保存了商品的信息,前端可能需要對商品數據進行增刪改查,那相應的每個操作後端都需要提供一個API接口:
- POST /add-goods 增加商品
- POST /delete-goods 刪除商品
- POST /update-goods 修改商品
- GET /get-goods 查詢商品信息
對於接口的請求方式與路徑,每個後端開發人員可能都有自己的定義方式,風格迥異。
是否存在一種統一的定義方式,被廣大開發人員接受認可的方式呢?
這就是被普遍採用的API的RESTful設計風格。
1. 起源
REST這個詞,是Roy Thomas Fielding
在他2000年的博士論文中提出的。
Fielding是一個非常重要的人,他是HTTP協議(1.0版和1.1版)的主要設計者、Apache服務器軟件的作者之一、Apache基金會的第一任主席。所以,他的這篇論文一經發表,就引起了關注,並且立即對互聯網開發產生了深遠的影響。
2. 名稱
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字段指定,這兩個字段纔是對"表現層"的描述。
-
狀態轉換,就是客戶端和服務器互動的一個過程,在這個過程中, 勢必涉及到數據和狀態的變化, 這種變化叫做狀態轉換。
互聯網通信協議HTTP協議,客戶端訪問必然使用HTTP協議,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"(State Transfer)。
HTTP協議實際上含有4個表示操作方式的動詞,分別是 GET,POST,PUT,DELETE,他們分別對應四種操作。GET用於獲取資源,POST用於新建資源,PUT用於更新資源,DElETE用於刪除資源。GET和POST是表單提交的兩種基本方式,比較常見,而PUT和DElETE不太常用。
而且HTTP協議是一種無狀態協議,這樣就必須把所有的狀態都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"(State Transfer)
3. 總結
綜合上面的解釋,RESTful架構就是:
-
每一個URL代表一種資源;
-
客戶端通過四個HTTP動詞,對服務器端資源進行操作。