? ? ? ?REST-ful,其中ful代表形容詞,如helpful,powerful。這類形容詞意為"full of,having the quality of"。多加在名詞之后表示“充滿...的、易于...、可...的、富有...的、具有...的”的意思,是蕞常用的形容詞后綴,反義詞后綴是-less。RESTful 則代表滿足REST原則的。
? ? ? ?與任何其他架構(gòu)風格一樣,REST也有自己的6個引導約束,如果接口需要被稱為RESTful,則必須滿足這些約束,這些原則如下:
? ? ? ?REST的指導原則
? ? ? ?客戶端 - 服務器 - 通過將用戶接口問題與數(shù)據(jù)存儲問題分開,我們通過簡化服務器組件來提高跨多個平臺的用戶接口的可移植性并提高可伸縮性。
? ? ? ?無狀態(tài) - 從客戶端到服務器的每個請求都必須包含理解請求所需的所有信息,并且不能利用服務器上任何存儲的上下文。因此,會話狀態(tài)完全保留在客戶端上。
? ? ? ?可緩存 - 緩存約束要求將對請求的響應中的數(shù)據(jù)隱式或顯式標記為可緩存或不可緩存。如果響應是可緩存的,則客戶端緩存有權(quán)重用該響應數(shù)據(jù)以用于以后的等效請求。
? ? ? ?統(tǒng)一接口 - 通過將通用性的軟件工程原理應用于組件接口,簡化了整個系統(tǒng)架構(gòu),提高了交互的可見性。為了獲得統(tǒng)一的接口,需要多個架構(gòu)約束來指導組件的行為。REST由四個接口約束定義:資源識別; 通過陳述來處理資源; 自我描述性的信息; 并且,超媒體作為應用程序狀態(tài)的引擎。
? ? ? ?分層系統(tǒng) - 分層系統(tǒng)風格允許通過約束組件行為來使體系結(jié)構(gòu)由分層層組成,這樣每個組件都不能“看到”超出與它們交互的直接層。
? ? ? ?按需編碼(可選) - REST允許通過以小程序或腳本的形式下載和執(zhí)行代碼來擴展客戶端功能。這通過減少預先實現(xiàn)所需的功能數(shù)量來簡化客戶端。
? ? ? ?二、資源
? ? ? ?REST中信息的關(guān)鍵抽象是一種資源。可以命名的任何信息可以是資源:文檔或圖像,臨時服務,其他資源的集合,非虛擬對象(例如,人)等。REST使用資源標識符來標識組件之間交互中涉及的特定資源。
? ? ? ?任何特定時間戳的資源狀態(tài)稱為資源表示。表示由數(shù)據(jù),描述數(shù)據(jù)的元數(shù)據(jù)和超媒體鏈接組成,這些鏈接可以幫助客戶轉(zhuǎn)換到下一個期望的狀態(tài)。
? ? ? ?表示的數(shù)據(jù)格式稱為媒體類型。媒體類型標識定義如何處理表示的規(guī)范。真正的RESTful API看起來像超文本。每個可尋址信息單元明確地(例如,鏈接和id屬性)或隱式地(例如,從媒體類型定義和表示結(jié)構(gòu)導出)攜帶地址。
? ? ? ?根據(jù)羅伊菲爾丁的說法:
? ? ? ?超文本(或超媒體)意味著信息和控制的同時呈現(xiàn),使得信息成為用戶(或自動機)通過其獲得選擇和選擇動作的可供性。請記住,超文本不需要是瀏覽器上的HTML(或XML或JSON)。機器在理解數(shù)據(jù)格式和關(guān)系類型時可以跟蹤鏈接。
? ? ? ?此外,資源表示應該是自描述的:客戶端不需要知道資源是員工還是設備。它應該基于與資源相關(guān)的媒體類型。因此在實踐中,您蕞終將創(chuàng)建大量自定義媒體類型 - 通常是與一種資源相關(guān)聯(lián)的一種媒體類型。
? ? ? ?每種媒體類型都定義了默認處理模型。例如,HTML定義了超文本的呈現(xiàn)過程以及每個元素周圍的瀏覽器行為。它與資源方法GET / PUT / POST / DELETE / ...沒有任何關(guān)系,除了一些媒體類型元素將定義一個過程模型,其類似于“具有href屬性的錨元素創(chuàng)建一個超文本鏈接,當被選中時,在與CDATA編碼的href屬性對應的URI上調(diào)用檢索請求(GET)。“
? ? ? ?三、資源方法
? ? ? ?與REST相關(guān)的其他重要事項是用于執(zhí)行所需轉(zhuǎn)換的資源方法。許多人錯誤地將資源方法與HTTP GET / PUT / POST / DELETE方法聯(lián)系起來。
? ? ? ?Roy Fielding從未提及任何關(guān)于在哪種情況下使用哪種方法的建議。他所強調(diào)的是它應該是統(tǒng)一的接口。如果你決定HTTP POST將用于更新資源 - 而不是大多數(shù)人推薦HTTP PUT - 它沒關(guān)系,應用程序接口將是RESTful。
? ? ? ?理想情況下,更改資源狀態(tài)所需的所有內(nèi)容都應該是該資源的API響應的一部分 - 包括方法以及它們將保留表示的狀態(tài)。
? ? ? ?應輸入REST API,除了初始URI(書簽)和適用于目標受眾的標準化媒體類型集之外沒有任何先驗知識(即,任何可能使用API的客戶都應該理解)。從那時起,所有應用程序狀態(tài)轉(zhuǎn)換必須由客戶端選擇服務器提供的選擇來驅(qū)動,這些選擇存在于接收的表示中或者由用戶對這些表示的操縱所暗示。轉(zhuǎn)換可以由客戶端對媒體類型和資源通信機制的知識來確定(或限制),這兩者都可以在運行中(例如,按需代碼)進行改進。
? ? ? ?[失敗在這里意味著帶外信息驅(qū)動交互而不是超文本。]
? ? ? ?在構(gòu)建RESTful API時,另一件可以幫助您的是基于查詢的API結(jié)果應該由帶有摘要信息的鏈接列表表示,而不是由原始資源表示的數(shù)組表示,因為查詢不能代替資源標識。
? ? ? ?REST和HTTP不一樣!!
? ? ? ?很多人更喜歡將HTTP與REST進行比較。REST和HTTP不一樣。
? ? ? ?REST!= HTTP
? ? ? ?但是,由于REST還打算使web(互聯(lián)網(wǎng))更加簡化和標準化,他主張更嚴格地使用REST原則。這也是人們試圖開始將REST與網(wǎng)絡(HTTP)進行比較的地方。Roy fielding在他的論文中沒有提到任何實現(xiàn)指令 - 包括任何協(xié)議首要選項和HTTP。到時候,您正在遵循REST的6個指導原則,您可以將您的接口稱為RESTful。
? ? ? ?簡而言之,在REST架構(gòu)風格中,數(shù)據(jù)和功能被視為資源,并使用統(tǒng)一資源標識符(URI)進行訪問。通過使用一組簡單,定義明確的操作來執(zhí)行資源。客戶端和服務器通過使用標準化接口和協(xié)議(通常是HTTP)來交換資源的表示。
? ? ? ?資源與其表示分離,以便可以以各種格式訪問其內(nèi)容,例如HTML,XML,純文本,PDF,JPEG,JSON等。例如,可以使用和使用關(guān)于資源的元數(shù)據(jù)來控制高速緩存,檢測傳輸錯誤,協(xié)商適當?shù)谋硎靖袷剑约皥?zhí)行認證或訪問控制。蕞重要的是,與資源的每次交互都是無狀態(tài)的。
? ? ? ?所有這些原則都有助于RESTful應用程序簡單,輕量和快速。
? ? ? ?以上是南昌APP開發(fā)公司百恒科技小編要跟大家聊到的關(guān)于RESTful API接口規(guī)范的內(nèi)容,希望能夠?qū)Υ蠹矣兴鶐椭胍私飧嚓P(guān)于這方面的內(nèi)容,歡迎留言咨詢百恒科技,百恒科技專注于南昌APP開發(fā)、南昌網(wǎng)站建設開發(fā)等互聯(lián)網(wǎng)服務!
相關(guān)文章推薦? ?:? ? 數(shù)據(jù)庫SQL開發(fā)規(guī)范是什么?? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ?MySQL數(shù)據(jù)庫操作行為規(guī)范是什么?? ??