REST API是北向接口的主流設計方式
API是應用程序編程接口,是預先定義好的函數,能夠供應用程序或開發人員訪問調用
REST (Representational State Transfer,表述化狀態轉移)首次出如今2000 年 Roy Thomas Fielding 的博士論文中,
指的是一組架構約束條件和原則。
而知足REST約束條件和原則的設計規範或者架構風格,咱們稱之爲RESTful,遵循RESTful設計的API就是REST API
RESTful並非專門爲SDN提出的,而是專門針對Web應用中HTTP使用中出現的一些問題提出的,因爲HTTP協議的使用很不規範、隨意、混亂
URL的設計缺少規範性 HTTP的動詞使用不當 HTTP的返回狀態碼使用不規範等 Restful正是針對HTTP中上述問題而提出的
顯得更加規範和簡潔
好比在普通的博客應用中,資源多是包括了用戶、博文或者評論等
在SDN中,資源多是鏈路、交換機、流表等
URI是統一資源標示符,URL是統一資源定位符。URL是URI的子集,或者說是一種具體實現
對於REST API來講一個資源對應惟一的一個URI,REST經過URI來暴露資源,URI的設計的合理性和規範性十分重要
用戶接口和數據存儲的分離;---經過客戶端用戶接口和服務器數據存儲的分離,提升了客戶端的便捷性,也提升了服務端的可伸縮性
因爲實現瞭解耦,就可以容許客戶端和服務端分組優化,彼此之間不受影響
要求來自客戶端的每個請求必須包含服務器處理該請求所需的全部信息; --- 提升了可見性和可靠性,因爲服務器是無狀態的,可以很方便的實現水平擴展,提升了可擴展性
無狀態:相對有狀態而言,大多數訪問網站都是有狀態的
在該流程中後面的每個狀態都依賴於前面的狀態,沒有一個URL能夠直接查詢到成績
而在RESTful的架構中
能夠直接定位到服務器的資源,不依賴於服務器的會話狀態,所以是無狀態
要求一個請求的響應中的數據標記爲是否可緩存;若是能夠,客戶端能夠重用相同請求的響應數據---減小了CS交互次數,提升了效率
核心特徵,強調組件之間要有一個統一的接口; --- CS之間通訊的方法必須是統一化的,例如標準的HTTP動做
限制組件的行爲,將架構分爲若干等級的層;容許服務器和客戶端之間的中間層,例如反向代理、API網關,能夠代替服務器對客戶端的請求進行迴應,而對客戶端而言是透明的,提升了系統的可擴展性,也增長了系統的複雜性
服務器能夠提供一些代碼或者腳本並在客戶的運行環境中執行。