RESTful API 架構
REST ***的幾個特點為:資源、統一接口、URI 和無狀態。
①資源
所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務,就是一個具體的實在。
②統一接口
RESTful 架構風格規定,數據的元操作,即 CRUD(Create,Read,Update 和 Delete,即數據的增刪查改)操作,分別對應於 HTTP 方法:GET 用來獲取資源,POST 用來新建資源(也可以用於更新資源),PUT 用來更新資源,DELETE 用來刪除資源,這樣就統一了數據操作的接口,僅通過 HTTP 方法,就可以完成對數據的所有增刪查改工作。
③URL
可以用一個 URI(統一資源定位符)指向資源,即每個 URI 都對應一個特定的資源。
要獲取這個資源,訪問它的 URI 就可以,因此 URI 就成了每一個資源的地址或識別符。
④無狀態
所謂無狀態的,即所有的資源,都可以通過 URI 定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而改變。有狀態和無狀態的區別,舉個簡單的例子說明一下。
如查詢員工的工資,如果查詢工資是需要登錄系統,進入查詢工資的頁面,執行相關操作后,獲取工資的多少,則這種情況是有狀態的。
因為查詢工資的每一步操作都依賴於前一步操作,只要前置操作不成功,后續操作就無法執行。
如果輸入一個 URI 即可得到指定員工的工資,則這種情況是無狀態的,因為獲取工資不依賴於其他資源或狀態。
且這種情況下,員工工資是一個資源,由一個 URI 與之對應,可以通過 HTTP 中的 GET 方法得到資源,這是典型的 RESTful 風格。
RPC 和 Restful API 對比
面對對象不同:
- RPC 更側重於動作。
- REST 的主體是資源。
RESTful 是面向資源的設計架構,但在系統中有很多對象不能抽象成資源,比如登錄,修改密碼等而 RPC 可以通過動作去操作資源。所以在操作的全面性上 RPC 大於 RESTful。
傳輸效率:
- RPC 效率更高。RPC,使用自定義的 TCP 協議,可以讓請求報文體積更小,或者使用 HTTP2 協議,也可以很好的減少報文的體積,提高傳輸效率。
復雜度:
- RPC 實現復雜,流程繁瑣。
- REST 調用及測試都很方便。
RPC 實現(參見***節)需要實現編碼,序列化,網絡傳輸等。而 RESTful 不要關注這些,RESTful 實現更簡單。
靈活性:
- HTTP 相對更規范,更標准,更通用,無論哪種語言都支持 HTTP 協議。
- RPC 可以實現跨語言調用,但整體靈活性不如 RESTful。
總結
RPC 主要用於公司內部的服務調用,性能消耗低,傳輸效率高,實現復雜。
HTTP 主要用於對外的異構環境,瀏覽器接口調用,App 接口調用,第三方接口調用等。
RPC 使用場景(大型的網站,內部子系統較多、接口非常多的情況下適合使用 RPC):
- 長鏈接。不必每次通信都要像 HTTP 一樣去 3 次握手,減少了網絡開銷。
- 注冊發布機制。RPC 框架一般都有注冊中心,有豐富的監控管理;發布、下線接口、動態擴展等,對調用方來說是無感知、統一化的操作。
- 安全性,沒有暴露資源操作。
- 微服務支持。就是最近流行的服務化架構、服務化治理,RPC 框架是一個強力的支撐。