使用統(tǒng)一接口
HTTP是一種應(yīng)用層協(xié)議,然而,包括SOAP和一些Ajax Web框架在內(nèi)的不少技術(shù)都將HTTP作為一種傳輸信息協(xié)議,這種方法很難充分利用HTTP層的基礎(chǔ)設(shè)施。
1.1如何保持交互的可見性
作為應(yīng)用協(xié)議,HTTP的設(shè)計(jì)目標(biāo)是在客戶端和服務(wù)器之間保持對(duì)庫(kù)、服務(wù)器、代理、緩存、和其他工具的可見性。
識(shí)別設(shè)計(jì)資源,就可以使用GET方法獲取資源表示,使用PUT方法更新資源,使用DELETE方法刪除資源,使用POST方法執(zhí)行各種不安全和非等冪的操作;添加適當(dāng)?shù)腍TTP表頭來描述請(qǐng)求和響應(yīng)。
保持請(qǐng)求和響應(yīng)的可見性,可以具備以下特性:
- 緩存:緩存響應(yīng)內(nèi)容,并在資源修改時(shí)使緩存自動(dòng)失效。
- 樂觀并發(fā)控制:檢測(cè)并發(fā)寫入,并在操作過期的表述時(shí)防止資源發(fā)生變更。
- 內(nèi)容協(xié)商:在給定資源的多個(gè)表示中,選擇合適的表述。
- 安全性和等冪性:確??蛻舳丝梢灾貜?fù)或重試特定的HTTP請(qǐng)求。
可見性的實(shí)現(xiàn):
- HTTP交互是無狀態(tài)的。
- HTTP使用一個(gè)統(tǒng)一接口。
- HTTP使用一種與MIME類似的信封格式進(jìn)行表述編碼。
1.2何時(shí)需權(quán)衡可見性
有多個(gè)共享數(shù)據(jù)的資源,或一個(gè)操作要修改多個(gè)資源,可考慮降低可見性。得到更好的信息抽象、松散的耦合度、更好的網(wǎng)絡(luò)效率、更好的資源粒度。
1.3如何維護(hù)應(yīng)用程序狀態(tài)
在客戶端保存應(yīng)用程序的狀態(tài)
- 將應(yīng)用程序狀態(tài)編碼到URI里,并通過鏈接在表述中包含這些URI??蛻舳耸褂眠@些URI進(jìn)行資源交互
- 狀態(tài)較大,或出于安全性考慮,則可以持久化存儲(chǔ)(如數(shù)據(jù)庫(kù)、文件系統(tǒng))應(yīng)用程序狀態(tài),并將其狀態(tài)的引用編碼在URI中。
資源表述中的鏈接是保持應(yīng)用程序狀態(tài)的最后地方。
- 應(yīng)當(dāng)選擇形如數(shù)據(jù)庫(kù)或文件系統(tǒng)的持久化存儲(chǔ)來保存應(yīng)用程序狀態(tài)。
- 當(dāng)數(shù)據(jù)量較小時(shí),服務(wù)器可以將狀態(tài)編碼在URI中。
- 在鏈接中保存應(yīng)用程序的狀態(tài),要加入檢查方式(如簽名)檢測(cè)和防止偽造狀態(tài)。
1.4如何在服務(wù)器端實(shí)現(xiàn)安全和冪等的方法
| 方法 | 安全 | 冪等 |
|---|---|---|
| GET | YES | YES |
| HEAD | YES | YES |
| OPTIONS | YES | YES |
| PUT | NO | YES |
| DELETE | NO | YES |
| POST | NO | NO |
- 安全性并不意味服務(wù)每次都返回同一結(jié)果。它只表明客戶端可以發(fā)起請(qǐng)求,并知道它不會(huì)改變資源的狀態(tài)。
- 冪等性保證客戶端重復(fù)發(fā)起某個(gè)請(qǐng)求的效果一致。
1.5如何在客戶端處理安全和冪等方法
- 把GET,OPTIONS和HEAD看做只讀。
- 在網(wǎng)絡(luò)和軟件出錯(cuò)時(shí),重新提交GET、PUT、DELETE請(qǐng)求做確認(rèn)。
- 不重復(fù)提交POST請(qǐng)求。
1.6何時(shí)使用GET方法
- 使用GET方法進(jìn)行安全和冪等的信息獲取。
- 添加 Cache-Control:no-cache 頭來確保響應(yīng)不被緩存。
1.7何時(shí)使用POST
- 創(chuàng)建新的資源:把資源作為一個(gè)工廠。
- 通過一個(gè)控制器資源來修改一個(gè)或多個(gè)資源。
- 執(zhí)行需要大數(shù)據(jù)輸入的查詢。
- 在其他HTTP方法不合適時(shí),執(zhí)行不安全或非冪等的操作。
1.8如何使用POST方法創(chuàng)建資源
POST方法的應(yīng)用場(chǎng)合之一是創(chuàng)建新資源,該協(xié)議類似使用“工廠方法模式”創(chuàng)建新對(duì)象。
- 客戶端向工廠資源提交附有創(chuàng)建資源表示的POST請(qǐng)求
- 資源創(chuàng)建后,返回響應(yīng)碼201(Created),并在Location頭部中包含新創(chuàng)建資源的URI。
- 響應(yīng)中表述的(Content-Location)URI