傳統上軟體開發主要針對單機環境,網際網路的興起,使得這兩個領域開始融合,越來越多的人開始意識到,**即軟體,而且是一種新型的軟體。**開發,完全可以採用軟體開發的模式。。這種"網際網路軟體"採用客戶端/伺服器模式,建立在分布式體系上,通過網際網路通訊,具有高延時(high latency)、高併發等特點。
在pc時代,前端後端是融合在一起的,比如之前的php,jsp,asp等等。近年來隨著移動網際網路的飛速發展,各種型別的client端層出不窮,就需要通過一套統一的介面。restful架構,就是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多**的採用。
一、rest是什麼
rest這個詞,是roy thomas fielding在他2023年的博士**中提出的。fielding將他對網際網路軟體的架構原則,定名為rest,即representational state transfer的縮寫。我對這個片語的翻譯是"表現層狀態轉化"。如果乙個架構符合rest原則,就稱它為restful架構,rest只是一種風格,不是一種標準
。要理解restful架構,最好的方法就是去理解representational state transfer這個片語到底是什麼意思。
資源(resources)
rest的名稱"表現層狀態轉化"中,省略了主語。"表現層"其實指的是"資源"(resources)的"表現層"。
rest
是以資源為中心的,在
rest
中,認為
web是由一系列的抽象資源(
abstract resource
)組成,這些抽象的資源具有不同的具體表現形式
。表現層(representation)
表現層其實指的是資源的某種表現形式。
譬如,定義乙個資源
為photo
表現形式可以用用json,xml,jpeg等
狀態轉化(state transfer)
rest是無狀態的(stateless),通訊的會話狀態(session state)應該全部由客戶端負責維護。訪問乙個**,就代表了客戶端和伺服器的乙個互動過程。在這個過程中,勢必涉及到資料和狀態的變化,這種轉化是建立在表現層之上的,
狀態變化,通過http動詞實現。
二、rest設計原則
協議
api與使用者的通訊協議,總是使用https協議。
網域名稱
應該盡量將api部署在專用網域名稱之下。
如果確定api很簡單,不會有進一步擴充套件,可以考慮放在主網域名稱下。
版本(versioning)
應該將api的版本號放入url。
/v1/
另一種做法是,將版本號放在http頭資訊中,但不如放入url方便和直觀。github採用這種做法。
路徑(endpoint)
路徑又稱"終點"(endpoint),表示api的具體**。
在restful架構中,每個**代表一種資源(resource),所以**中不能有動詞,只能有名詞,而且所用的名詞往往與資料庫的**名對應。一般來說,資料庫中的表都是同種記錄的"集合"(collection),所以api中的名詞也應該使用複數。
舉例來說,有乙個api提供動物園(zoo)的資訊
/v1/zoos
http動詞
對於資源的具體操作型別,由http動詞表示。
常用的http動詞有下面五個(括號裡是對應的sql命令)。
還有兩個不常用的http動詞。
下面是一些例子。
過濾資訊(filtering)
下面是一些常見的引數。
引數的設計允許存在冗餘,即允許api路徑和url引數偶爾有重複。比如,get /zoo/id/animals 與 get /animals?zoo_id=id 的含義是相同的。
狀態碼(status codes)
伺服器向使用者返回的狀態碼和提示資訊,常見的有以下一些(方括號中是該狀態碼對應的http動詞)。
狀態碼的完全列表參見這裡。
錯誤處理(error handling)
如果狀態碼是4xx,就應該向使用者返回出錯資訊。一般來說,返回的資訊中將error作為鍵名,出錯資訊作為鍵值即可。
返回結果
針對不同操作,伺服器向使用者返回的結果應該符合以下規範。
NancyFX 第二章 Rest框架
正如你看到的,nancy有兩個主要用途。其中第一項是作為一種通用的基於 rest 框架,可替代 asp.net web api 或其他rest工具包。許多任務具包都聲稱實現了rest標準,而實際上它們沒有,至少不是正式的w3c標準。雖然未能完全實現rest不是個問題,但是我們也不能貶抑那些符合 w3...
框架詳解 Selenium3框架詳解
自從17年開始就不再怎麼關注ui自動化測試了,也就很少關注selenium的知識體系,在當時的背景和環境下有很多的思考和選擇點,基於ui的自動化測試並不是所有的場合下都使用它合適,任何乙個技術,要把它應用在合適的場景下才能夠顯示出它的最大的價值。今天這裡就簡單的對page objects做乙個介紹。...
HTML框架詳解
什麼是框架?框架將瀏覽器劃分成不同的部分,每一部分載入不同的網頁,實現在同一瀏覽器視窗中載入多個頁面的效果 劃分框架標記 語法格式 屬性 1.cols 使用 畫素數 和 分割左右視窗,表示剩餘部分 如果使用 表示框架平均分成2個 如果使用 表示框架平均分成3個 2.rows 使用 畫素數 和 分割上...