其實(shí)在之前有使用過RESTful API,但是沒有認(rèn)真了解過REST,那么我們就來看看吧,其實(shí)很簡單哦
REST是什么
REST即表述性狀態(tài)傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構(gòu)風(fēng)格。表述性狀態(tài)轉(zhuǎn)移是一組架構(gòu)約束條件和原則
所以簡而言之,REST是一種風(fēng)格
REST通?;谑褂?code>HTTP,URI,和XML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)子集)以及HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)這些現(xiàn)有的廣泛流行的協(xié)議和標(biāo)準(zhǔn)。REST 通常使用 JSON 數(shù)據(jù)格式。
RESTful是什么
那么既然REST是一種風(fēng)格,RESTful又是什么呢?
RESTful是滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)
主要是從三個(gè)方面來看
- 資源
資源就是一個(gè)實(shí)體,你可以用一個(gè)URI(統(tǒng)一資源定位符)指向它,每種資源對(duì)應(yīng)一個(gè)特定的URI。要獲取這個(gè)資源,訪問它的URI就可以,因此URI就成了每一個(gè)資源的地址或獨(dú)一無二的識(shí)別符 - 表現(xiàn)層
把資源呈現(xiàn)出來的形式叫表現(xiàn)層,可以用HTML格式、XML格式、JSON格式表現(xiàn),REST中常用的是JSON格式 - 狀態(tài)轉(zhuǎn)化
訪問一個(gè)網(wǎng)站,就代表了客戶端和服務(wù)器的一個(gè)互動(dòng)過程。在這個(gè)過程中,勢(shì)必涉及到數(shù)據(jù)和狀態(tài)的變化。
HTTP協(xié)議,是一個(gè)無狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器,必須通過某種手段,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。
客戶端用到的手段,只能是HTTP協(xié)議。
1.GET用來獲取資源
2.POST用來新建資源(也可以用于更新資源)
3.PUT用來更新資源
4.DELETE用來刪除資源。
綜合上面的解釋,我們總結(jié)一下什么是RESTful架構(gòu):
(1)每一個(gè)URI代表一種資源;
(2)客戶端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;
(3)客戶端通過四個(gè)HTTP動(dòng)詞,對(duì)服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。
設(shè)計(jì)誤區(qū)
-
URI不應(yīng)該包含動(dòng)詞,因?yàn)樗且粋€(gè)資源,動(dòng)詞應(yīng)該放在HTTP協(xié)議中 -
URI不應(yīng)該包含版本號(hào),因?yàn)椴煌陌姹?,可以理解成同一種資源的不同表現(xiàn)形式,所以應(yīng)該采用同一個(gè)URI
REST的優(yōu)點(diǎn)
-
URI具有很強(qiáng)可讀性的,具有自描述性 - 充分利用
HTTP協(xié)議本身語義 - 無狀態(tài),在調(diào)用一個(gè)接口(訪問、操作資源)的時(shí)候,可以不用考慮上下文,不用考慮當(dāng)前狀態(tài),極大的降低了復(fù)雜度
-
HTTP本身提供了豐富的內(nèi)容協(xié)商手段,無論是緩存,還是資源修改的樂觀并發(fā)控制,都可以以業(yè)務(wù)無關(guān)的中間件來實(shí)現(xiàn)