RESTful架構(gòu),是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便,所以正得到越來(lái)越多網(wǎng)站的采用。
REST是Representational State Transfer的縮寫(xiě)的縮寫(xiě),翻譯過(guò)來(lái)就是表現(xiàn)層狀態(tài)轉(zhuǎn)換。這里省略了主語(yǔ)Resources,它是資源的表現(xiàn)層。
資源
資源就是網(wǎng)絡(luò)上的實(shí)體,可以用URI(統(tǒng)一資源定位符)指向它,要獲取資源,訪(fǎng)問(wèn)它的rul就可以了。所謂"上網(wǎng)",就是與互聯(lián)網(wǎng)上一系列的"資源"互動(dòng),調(diào)用它的URI。表現(xiàn)層
資源可以有多種表現(xiàn)形式,我們把"資源"具體呈現(xiàn)出來(lái)的形式,叫做它的"表現(xiàn)層"(Representation)。URI只代表資源的實(shí)體,代表資源在網(wǎng)絡(luò)的具體位置,不代表它的形式。它的具體表現(xiàn)形式,應(yīng)該在HTTP請(qǐng)求的頭信息中用Accept和Content-Type字段指定,這兩個(gè)字段才是對(duì)"表現(xiàn)層"的描述。狀態(tài)轉(zhuǎn)換
訪(fǎng)問(wèn)一個(gè)網(wǎng)站,就代表了客戶(hù)端和服務(wù)器的一個(gè)互動(dòng)過(guò)程。在這個(gè)過(guò)程中,勢(shì)必涉及到數(shù)據(jù)和狀態(tài)的變化。
互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶(hù)端想要操作服務(wù)器,必須通過(guò)某種手段,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。綜上所述,我們總結(jié)一下什么是RESTful架構(gòu):
(1)每一個(gè)URI代表一種資源;
(2)客戶(hù)端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;
(3)客戶(hù)端通過(guò)四個(gè)HTTP動(dòng)詞,對(duì)服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"
RESTFUL API的設(shè)計(jì)
- API與用戶(hù)的通信協(xié)議,總是使用http協(xié)議
- 應(yīng)將api部署在專(zhuān)有域名之下,或主域名之下.如:
https://api.example.com或者https://example.org/api/ - 每個(gè)網(wǎng)址代表一種資源(resource),所以網(wǎng)址中不能有動(dòng)詞,只能有名詞,而且所用的名詞往往與數(shù)據(jù)庫(kù)的表格名對(duì)應(yīng)。一般來(lái)說(shuō),API中的名詞應(yīng)該使用復(fù)數(shù)。
- restful api直接使用http協(xié)議,所以它使用標(biāo)準(zhǔn)的http狀態(tài)碼
- 返回結(jié)果
- GET: 返回對(duì)象數(shù)組或單個(gè)資源對(duì)象
- POST: 返回新生成的資源對(duì)象
- PUT: 返回更新后完整的資源對(duì)象
- PATCH: 返回被修改的屬性
- DELETE: 返回204狀態(tài)碼與空對(duì)象
- 如果狀態(tài)碼是4xx或5xx,就應(yīng)該向用戶(hù)返回出錯(cuò)信息。
- 如果記錄數(shù)量很多,服務(wù)器不可能都將它們返回給用戶(hù)。API應(yīng)該提供參數(shù),過(guò)濾返回結(jié)果。如limit、offset、sort_by、order、page、per_page等
大量參考阮一峰的RESTful API 設(shè)計(jì)指南