REST原理

參考:http://www.ruanyifeng.com/blog/2011/09/restful.html

一、REST名稱

??Representational State Transfer:表現(xiàn)層狀態(tài)轉(zhuǎn)化。
??如果一個(gè)架構(gòu)符合REST原則,就稱它為RESTful架構(gòu)。要理解RESTful架構(gòu),最好的方法就是去理解Representational State Transfer。

二、理解REST

1.資源(Resource)

為什么要說資源:
??“表現(xiàn)層狀態(tài)轉(zhuǎn)化”其實(shí)指的是“資源”的”表現(xiàn)層“。
資源是什么:
??就是網(wǎng)絡(luò)上的一個(gè)實(shí)體。它可以是一段文本,一張圖片,一種服務(wù)。可以用一個(gè)URI指向它,每種資源對應(yīng)要給特定的URI。

2.表現(xiàn)層(Representational)

??資源是一種信息實(shí)體,它可以有多種外在表現(xiàn)形式。我們把資源呈現(xiàn)出來的形式,叫做它的“表現(xiàn)層”。
??比如,文本可以用txt格式表現(xiàn),也可用HTML格式、XML格式、JSON格式表現(xiàn)。URI只代表資源的實(shí)體,不代表它的形式。

3.狀態(tài)轉(zhuǎn)化(state transfer)

??訪問一個(gè)網(wǎng)站,就代表了客戶端和服務(wù)端的一個(gè)互動(dòng)過程。勢必涉及到數(shù)據(jù)和狀態(tài)的變化。
互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個(gè)無狀態(tài)協(xié)議。意味著所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器端,必須通過某種手段,讓服務(wù)器發(fā)生“狀態(tài)變化”。而這種變化是建立在表現(xiàn)層之上的,所以就是“表現(xiàn)層狀態(tài)轉(zhuǎn)化”。

三、綜述

綜上,得出RESTful架構(gòu)
1)每一個(gè)URI代表一種資源;
2)客戶端與服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;
3)客戶端通過HTTP動(dòng)詞(GET、POST、PUT、DELETE等)對服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)“表現(xiàn)層狀態(tài)轉(zhuǎn)化”。

四、常見誤區(qū)

1)URI包含動(dòng)詞。因?yàn)橘Y源是一種實(shí)體,所以應(yīng)該是名詞,動(dòng)詞應(yīng)該放在HTTP協(xié)議中。
舉例1:posts/show/1因show是動(dòng)詞,正確寫法應(yīng)該是posts/1,然后用GET方法表示show
舉例2:如果某些動(dòng)作是HTTP動(dòng)詞表示不了的,就應(yīng)該把動(dòng)作做成一種資源。如網(wǎng)上匯款,從賬戶1向賬戶2匯款500元,錯(cuò)誤的URI:POST /accounts/1/transfer/500/to/2,正確寫法是把動(dòng)詞transfer改成名詞transaction,資源不能是動(dòng)詞,但可以是一種服務(wù):

POST   /transaction HTTP/1.1
HOST:  127.0.0.1
from=1&to=2&amount=500.00

2)URI中加入版本號(hào):

http://www.example.com/app/1.0/foo
http://www.example.com/app/2.0/foo

??因不同版本可理解為同一個(gè)資源的不同表現(xiàn)形式,所以采用同一個(gè)URI。版本號(hào)可以在HTTP請求頭信息的Accept字段中進(jìn)行區(qū)分,也可以放在URL中。

Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=2.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容