2018.7.25
什么是REST落恼?
Representational State Transfer 即表現(xiàn)層狀態(tài)轉(zhuǎn)換,這是一種分布式的萬維網(wǎng)軟件構(gòu)架庐完,基于HTTP確定的一組約束和屬性琼讽,其最成功的實例就是HTTP1.1協(xié)議。REST也是當(dāng)前最流行的分布式Web架構(gòu)之一糖驴。
HTTP1.0協(xié)議制定時面向的是Web的靜態(tài)文本僚祷,隨著Ajax等出現(xiàn),簡單的靜態(tài)文本已經(jīng)無法滿足需求贮缕,人們迫切需要制定新的協(xié)議規(guī)范動態(tài)富文本的傳輸和使用辙谜。
REST
REST的五個關(guān)鍵詞
資源、資源表述感昼、狀態(tài)轉(zhuǎn)移装哆、統(tǒng)一接口、超文本驅(qū)動定嗓。
- 資源(resource):資源是對互聯(lián)網(wǎng)中信息數(shù)據(jù)的一種抽象性描述蜕琴,有點像面向?qū)ο蟮摹皩ο蟆钡母拍睿琑EST架構(gòu)即面向資源的架構(gòu)宵溅,資源是整個網(wǎng)絡(luò)處理的核心凌简。
- 資源表述(representation): 即資源的表現(xiàn)形式,常用的有HTTP文本恃逻,Json号醉,XML等。
- 狀態(tài)轉(zhuǎn)移(state transfer):這里的狀態(tài)轉(zhuǎn)移和自動機(jī)中的概念不同辛块,“狀態(tài)”指的是資源在某一時刻的表現(xiàn)形式畔派,“轉(zhuǎn)移”是指按照一定的邏輯轉(zhuǎn)化資源表現(xiàn)形式或者傳輸資源。
- 統(tǒng)一接口(Uniform inference):因為是分布式架構(gòu)润绵,為了方便不同服務(wù)器和用戶使用和規(guī)范线椰,REST要求使用統(tǒng)一的接口規(guī)范。
- 超文本驅(qū)動:REST架構(gòu)的提出很大程度上是用來指導(dǎo)HTTP1.1協(xié)議的制定尘盼,支持超鏈接和URI形式的驅(qū)動方式憨愉,URI可以理解成資源的唯一標(biāo)志,是資源的地址卿捎。
REST的五個架構(gòu)約束
客戶-服務(wù)器配紫、無狀態(tài)、緩存午阵、統(tǒng)一接口躺孝、分層系統(tǒng)享扔、按需代碼。
- 客戶-服務(wù)器:REST是一種響應(yīng)式架構(gòu)植袍,一般只允許客戶端主動向服務(wù)器端發(fā)起響應(yīng)請求惧眠,服務(wù)器端做出對應(yīng)的響應(yīng)操作。
- 無狀態(tài):無狀態(tài)是相對于有狀態(tài)而言的于个,狀態(tài)是指服務(wù)請求的狀態(tài)氛魁,是用戶交互時的會話信息√ǎ基于有狀態(tài)的Web服務(wù)會將用戶的相關(guān)信息保存在與該用戶交互的server的session中秀存,Client的用戶請求只能被該server接受和理解,不利于負(fù)載均衡羽氮』蛄矗基于無狀態(tài)的Web服務(wù)中,Clinet的用戶請求必須攜帶供server參考的全部信息乏苦,每一個請求都是獨立的株扛,可以被任何可用的server接受,便于進(jìn)行擴(kuò)展汇荐。
- 緩存:指的是客戶端可以緩存一些需要的數(shù)據(jù)洞就,以便于同樣的請求操作復(fù)用。
- 統(tǒng)一接口: 參考上述“五個關(guān)鍵詞”掀淘。
- 分層系統(tǒng):REST將結(jié)構(gòu)分層的思想使得各層服務(wù)器相對獨立旬蟋,各層服務(wù)器只需面向直接相鄰的服務(wù)器或用戶,提高了系統(tǒng)的可伸縮性革娄。
- 按需代碼(可選):指的是客戶端可以選擇下載Java applet和JavaScript腳本來擴(kuò)展系統(tǒng)功能倾贰。
REST的六個特征
面向資源、可尋址拦惋、連通性匆浙、無狀態(tài)、統(tǒng)一接口厕妖、超文本驅(qū)動首尼。
- 可尋址:URI是資源的唯一標(biāo)識(地址),系統(tǒng)可根據(jù)URI定位或重定位到資源言秸。
- 連通性:資源在設(shè)計時要考慮資源之間的聯(lián)系软能,避免存在孤立的資源。