溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

REST API設(shè)計(jì)風(fēng)格都有哪些

發(fā)布時(shí)間:2021-10-14 16:42:02 來源:億速云 閱讀:102 作者:柒染 欄目:編程語(yǔ)言

REST API設(shè)計(jì)風(fēng)格都有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

  如果你研究了應(yīng)用程序中當(dāng)前定義的所有路由,會(huì)注意到其中的幾個(gè)符合我上面使用的API的定義。找到它們了嗎?我說的是返回JSON的幾條路由,比如第十四章中定義的/translate路由。這種路由的內(nèi)容都以JSON格式編碼,并在請(qǐng)求時(shí)使用POST方法。此請(qǐng)求的響應(yīng)也是JSON格式,服務(wù)器僅返回所請(qǐng)求的信息,客戶端負(fù)責(zé)將此信息呈現(xiàn)給用戶。

  雖然應(yīng)用程序中的JSON路由具有API的“感覺”,但它們的設(shè)計(jì)初衷是為支持在瀏覽器中運(yùn)行的Web應(yīng)用程序。設(shè)想一下,如果智能手機(jī)APP想要使用這些路由,它將無(wú)法使用,因?yàn)檫@需要用戶登錄,而登錄只能通過HTML表單進(jìn)行。在本章中,我將展示如何構(gòu)建不依賴于Web瀏覽器的API,并且不會(huì)假設(shè)連接到它們的客戶端的類型。

分層系統(tǒng)

  分層系統(tǒng)原則是說當(dāng)客戶端需要與服務(wù)器通信時(shí),它可能最終連接到代理服務(wù)器而不是實(shí)際的服務(wù)器。因此,對(duì)于客戶端來說,如果不直接連接到服務(wù)器,它發(fā)送請(qǐng)求的方式應(yīng)該沒有什么區(qū)別,事實(shí)上,它甚至可能不知道它是否連接到目標(biāo)服務(wù)器。同樣,這個(gè)原則規(guī)定服務(wù)器兼容直接接收來自代理服務(wù)器的請(qǐng)求,所以它絕不能假設(shè)連接的另一端一定是客戶端。

  這是REST的一個(gè)重要特性,因?yàn)槟軌蛱砑又虚g節(jié)點(diǎn)的這個(gè)特性,允許應(yīng)用程序架構(gòu)師使用負(fù)載均衡器,緩存,代理服務(wù)器等來設(shè)計(jì)滿足大量請(qǐng)求的大型復(fù)雜網(wǎng)絡(luò)。

按需獲取客戶端代碼(CodeOnDemand)

  這是一項(xiàng)可選要求,規(guī)定服務(wù)器可以提供可執(zhí)行代碼以響應(yīng)客戶端,這樣一來,就可以從服務(wù)器上獲取客戶端的新功能。因?yàn)檫@個(gè)原則需要服務(wù)器和客戶端之間就客戶端能夠運(yùn)行的可執(zhí)行代碼類型達(dá)成一致,所以這在API中很少使用。你可能會(huì)認(rèn)為服務(wù)器可能會(huì)返回JavaScript代碼以供Web瀏覽器客戶端執(zhí)行,但REST并非專門針對(duì)Web瀏覽器客戶端而設(shè)計(jì)。例如,如果客戶端是iOS或Android設(shè)備,執(zhí)行JavaScript可能會(huì)帶來一些復(fù)雜情況。

統(tǒng)一接口

  最后,最重要的,最有爭(zhēng)議的,最含糊不清的REST原則是統(tǒng)一接口。Dr.Fielding列舉了REST統(tǒng)一接口的四個(gè)特性:唯一資源標(biāo)識(shí)符,資源表示,自描述性消息和超媒體。

  唯一資源標(biāo)識(shí)符是通過為每個(gè)資源分配唯一的URL來實(shí)現(xiàn)的。例如,與給定用戶關(guān)聯(lián)的URL可以是/api/users/,其中是在數(shù)據(jù)庫(kù)表主鍵中分配給用戶的標(biāo)識(shí)符。大多數(shù)API都能很好地實(shí)現(xiàn)這一點(diǎn)。

  資源表示的使用意味著當(dāng)服務(wù)器和客戶端交換關(guān)于資源的信息時(shí),他們必須使用商定的格式。對(duì)于大多數(shù)現(xiàn)代API,JSON格式用于構(gòu)建資源表示。API可以選擇支持多種資源表示格式,并且在這種情況下,HTTP協(xié)議中的內(nèi)容協(xié)商選項(xiàng)是客戶端和服務(wù)器確認(rèn)格式的機(jī)制。

  自描述性消息意味著在客戶端和服務(wù)器之間交換的請(qǐng)求和響應(yīng)必須包含對(duì)方需要的所有信息。作為一個(gè)典型的例子,HTTP請(qǐng)求方法用于指示客戶端希望服務(wù)器執(zhí)行的操作。GET請(qǐng)求表示客戶想要檢索資源信息,POST請(qǐng)求表示客戶想要?jiǎng)?chuàng)建新資源,PUT或PATCH請(qǐng)求定義對(duì)現(xiàn)有資源的修改,DELETE表示刪除資源的請(qǐng)求。目標(biāo)資源被指定為請(qǐng)求的URL,并在HTTP頭,URL的查詢字符串部分或請(qǐng)求主體中提供附加信息。

  超媒體需求是最具爭(zhēng)議性的,而且很少有API實(shí)現(xiàn),而那些實(shí)現(xiàn)它的API很少以滿足REST純粹主義者的方式進(jìn)行。由于應(yīng)用程序中的資源都是相互關(guān)聯(lián)的,因此此要求會(huì)要求將這些關(guān)系包含在資源表示中,以便客戶端可以通過遍歷關(guān)系來發(fā)現(xiàn)新資源,這幾乎與你在Web應(yīng)用程序中通過點(diǎn)擊從一個(gè)頁(yè)面到另一個(gè)頁(yè)面的鏈接來發(fā)現(xiàn)新頁(yè)面的方式相同。理想情況下,客戶端可以輸入一個(gè)API,而不需要任何有關(guān)其中的資源的信息,就可以簡(jiǎn)單地通過超媒體鏈接來了解它們。但是,與HTML和XML不同,通常用于API中資源表示的JSON格式?jīng)]有定義包含鏈接的標(biāo)準(zhǔn)方式,因此你不得不使用自定義結(jié)構(gòu),或者類似JSON-API,HAL,JSON-LD這樣的試圖解決這種差距的JSON擴(kuò)展之一。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI