RESTFUL 開發設計規范
上節我們剛了解完 URI ,知道它是一種資源標識,而 URL 是 schema = Http 的子標識,本節要講的 Restful 從小的講是對 URL 格式提出了限制,對接口設計規范的倡導,大的說它是一種通信架構的指導。
1. RESTFUL 的誕生
1.1 作者
Restful 是由 Roy Thomas Fielding 博士在 2000 年所著的博士論文提起的,系統全面地闡述了 REST 的架構風格和設計思想,這位作者同時是 HTTP、URI等 Web 架構標準的主要設計者,因此他提出的 REST 概念得到很多人的關注和響應。
1.2 背景
Web 網站從最初的靜態資源展示,演變成后來的動態網站,到現在大部分的軟件都在往云上遷移,之前很多桌面應用現在都盡量地改造成 Web 系統,用戶不需要下載安裝繁瑣的軟件,打開瀏覽器輸入地址即可使用。
在這么一個背景下,Web 系統的通信架構變得尤為重要。Roy Thomas Fielding 在論文中提到:“我這篇文章的寫作目的,就是想在符合架構原理的前提下,理解和評估以網絡為基礎的應用軟件的架構設計,得到一個功能強、性能好、適宜通信的架構。REST 指的是一組架構約束條件和原則?!?/p>
Tips:有興趣的同學可以詳細的看下REST 論文。
2. RESTFUL 的思想內容
Rest(Representational State Transfer),從詞面上來解析是 表述性狀態轉移。我們知道 URI 是一種標識,這個標識不管是地址還是昵稱,他都只是一個名詞(URL 上面最好不要用動詞),API 接口是有 增刪改查 一系列動作,將 URL 與行為狀態的結合就是 Restful 的核心思想。一個 API 請求我們既要知道它要操作的是哪個資源,也要知道它要對這個資源進行什么操作。
2.1 API 接口規范
Restful 提倡將接口的行為狀態放到了 Http 的頭部 method 里。對同一個資源的不同操作,接口 URL 可能是一樣的。行為規約主要有下面幾項:
GET
查詢資源,不會對資源產生變化的都用 GET。
例:查詢慕課網 http Wiki 教程的所有小節列表:
GET http://www.xianlaiwan.cn/http
如果資源查詢的過程需要帶過濾參數,建議使用 URL 參數的形式:
例:查詢慕課網 http 小節中作者是 rj 的文章
GET http://www.xianlaiwan.cn/http?author=rj
例:查詢慕課網 http 里面 id = 1 的文章
GET http://www.xianlaiwan.cn/http/1
POST
新增某個資源:
POST http://www.xianlaiwan.cn/http
具體的參數放請求體中
{
"title":"restful",
"author":"rj",
"content":"xxxxxx"
}
PUT
資源的修改:
PUT http://www.xianlaiwan.cn/http/{articleId}
具體的參數放請求體中
{
"title":"restful",
"author":"rj",
"content":"xxxxxx"
}
PATCH
PATCH http://www.xianlaiwan.cn/http/{articleId}
patch
跟 put
都是修改的意思,put 類型的修改請求體中需要包含全量的對象信息,而 patch 只需要帶上要修改的某幾個對象即可,沒有帶上的參數就代表不更新,采用原來的值。
具體的參數放請求體中
{
"title":"aaa"
}
DELETE
刪除資源:
DELETE http://www.xianlaiwan.cn/http/{articleId}
2.2 REST 架構
大部分人認識的 REST 都是一個 API 的定義風格,但它其實定義的是一整個軟件的通信架構。不過我覺得不理解這部分問題不大,因為如果要說 Web 的架構,那真的是太豐富了,主要還是要尋找適合自己業務的。本著知識拓展,我們來了解下 REST 對架構都做了哪些約束:
-
Client-Server:客戶端/服務端 模式的架構;
-
Stateless:無狀態,服務端不保存客戶端信息;
-
Cache:客戶端可以緩存服務端數據;
-
Uniform Interface:統一接口(包含上面講的 API 約束);
-
Layered System:分層架構,職責明確,方便拓展等;
-
Code-on-Demand:客戶端從服務器獲取需要的代碼,在客戶端處執行。這個我覺得在邊緣計算的場景可以應用,客戶端按需從中心拉取代碼,實現不同效果的處理計算。比如我要識別天氣就拉取天氣相關代碼,要識別花草就拉取花草的識別算法,就可以無限的賦能(可能將傳感器識別的信息上傳到云端分析所消耗的帶寬比獲取一個相應場景的算法來得大),想想還是不錯的。
Tips:REST 相應的論文部分。
3. 小結
Restful 風格一般指的是 API 的設計規范,REST 是由 Roy Thomas Fielding 教授提出來的,該作者同時是 HTTP 協議的重要參與者。REST 的論文中對 Web 系統機構提出了一些指導的理論,這些思想都非常不錯,但是我們今天的軟件架構正變得越來越復雜,熔斷 / 限流 / 鏈路跟蹤 等等,還有很多要考慮的。