(Representational State Transfer)
? ? ? ? REST即表述性狀態(tài)傳遞是2000年提出來的一種軟件架構(gòu)風(fēng)格睦刃。它是一種針對網(wǎng)絡(luò)應(yīng)用的設(shè)計和開發(fā)方式棚放。是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計就是RESTful灾杰。REST是設(shè)計風(fēng)格而不是標(biāo)準(zhǔn)蚊丐。
????????REST中的資源所指的不是數(shù)據(jù),而是數(shù)據(jù)和表現(xiàn)形式的組合艳吠,比如“最新訪問的10位會員”和“最活躍的10位會員”在數(shù)據(jù)上可能有重疊或者完全相同麦备,而由于他們的表現(xiàn)形式不同,所以被歸為不同的資源。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: xxx
{...}
????????格式固定凛篙,第一行永遠是操作失敗或者成功的狀態(tài)碼黍匾,第二行是返回的類型,第三行內(nèi)容的長度呛梆,最后是內(nèi)容锐涯。這樣我只需寫一個程序解析返回的信息就可以了,可以重用削彬,但是我們上面?zhèn)鹘y(tǒng)的不僅僅要協(xié)商全庸,還有有不同的解析程序,稍微改變融痛,就不能正常使用了。所以rest的明顯更加通用神僵。
GET(SELECT):從服務(wù)器取出資源(一項或多項)雁刷。
POST(CREATE):在服務(wù)器新建一個資源。
PUT(UPDATE):在服務(wù)器更新資源(客戶端提供完整資源數(shù)據(jù))保礼。
PATCH(UPDATE):在服務(wù)器更新資源(客戶端提供需要修改的資源數(shù)據(jù))沛励。
DELETE(DELETE):從服務(wù)器刪除資源。
系統(tǒng)是RESTful的五條約束
●?使用客戶/服務(wù)器模型炮障∧颗桑客戶和服務(wù)器之間通過一個統(tǒng)一的接口來互相通訊。
●?層次化的系統(tǒng)胁赢。在一個REST系統(tǒng)中企蹭,客戶端并不會固定地與一個服務(wù)器打交道。
●?無狀態(tài)智末。在一個REST系統(tǒng)中谅摄,服務(wù)端并不會保存有關(guān)客戶的任何狀態(tài)。也就是說系馆,客戶端自身負(fù)責(zé)用戶狀態(tài)的維持送漠,并在每次發(fā)送請求時都需要提供足夠的信息。所有的資源由蘑,都可以通過URI定位闽寡,而且這個定位與其他資源無關(guān),也不會因為其他資源的變化而改變尼酿。如查詢員工的工資爷狈,如果查詢工資是需要登錄系統(tǒng),進入查詢工資的頁面谓媒,執(zhí)行相關(guān)操作后淆院,獲取工資的多少,這種情況是有狀態(tài)的,因為查詢工資的每一步操作都依賴于前一步操作土辩,只要前置操作不成功支救,后續(xù)操作就無法執(zhí)行;如果輸入一個url即可得到指定員工的工資拷淘,則這種情況是無狀態(tài)的各墨,這是典型的RESTful風(fēng)格。
●?可緩存启涯。REST系統(tǒng)需要能夠恰當(dāng)?shù)鼐彺嬲埱蟊岫拢员M量減少服務(wù)端和客戶端之間的信息傳輸,以提高性能结洼。
●?統(tǒng)一的接口黎做。一個REST系統(tǒng)需要使用一個統(tǒng)一的接口來完成子系統(tǒng)之間以及服務(wù)與用戶之間的交互。這使得REST系統(tǒng)中的各個子系統(tǒng)可以獨自完成演化松忍。(即POST,GET,DELETE,PUT)
其他風(fēng)格規(guī)范
1)URI使用名詞而不是動詞
2)使用復(fù)數(shù)定義所有資源蒸殿,名詞使用復(fù)數(shù)
3)使用Header序列化格式? Content-Type 定期請求格式,Accept定義接收格式
4)API版本化:使用簡單的序號鸣峭,避免使用點符號宏所,如2.5