什麼是REST
REST是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。REST規範把所有內容都視爲資源,網絡上一切皆資源。
重要的兩個概念
1、REST 是面向資源的,這個概念非常重要,而資源是通過 URI 進行暴露。
URI 的設計只要負責把資源通過合理方式暴露出來就可以了。對資源的操作與它無關,操作是通過 HTTP動詞來體現,所以REST 通過 URI 暴露資源時,會強調不要在 URI 中出現動詞。
2、REST很好地利用了HTTP本身就有的一些特徵,如HTTP動詞、HTTP狀態碼、HTTP報頭等等
什麼是RPC
遠程方法調用,就是像調用本地方法一樣調用遠程方法。
RPC是遠程調用過程的簡寫,是一個協議,處於網絡通信協議的第五層:會話層,其下就是TCP/IP協議,在建立在其基礎上的通信會話協議。
常見RPC框架結構圖
RPC框架要做到的最基本的三件事:
1、服務端如何確定客戶端要調用的函數;
在遠程調用中,客戶端和服務端分別維護一個【ID->函數】的對應表, ID在所有進程中都是唯一確定的。客戶端在做遠程過程調用時,附上這個ID,服務端通過查表,來確定客戶端需要調用的函數,然後執行相應函數的代碼。
2、如何進行序列化和反序列化;
客戶端和服務端交互時將參數或結果轉化爲字節流在網絡中傳輸,那麼數據轉化爲字節流的或者將字節流轉換成能讀取的固定格式時就需要進行序列化和反序列化,序列化和反序列化的速度也會影響遠程調用的效率。
3、如何進行網絡傳輸(選擇何種網絡協議);
多數RPC框架選擇TCP作爲傳輸協議,也有部分選擇HTTP。如gRPC使用HTTP2。不同的協議各有利弊。TCP更加高效,而HTTP在實際應用中更加的靈活。
REST與RPC比較
注意:爲什麼說RPC性能要高於REST
首先聲明REST API 和 RPC 都是把一個個函數封裝成接口暴露出去,以供調用
不過 REST API 一般都是基於 HTTP 協議(表示層),而 RPC 則可以不基於 HTTP,可以基於TCP/IP協議(會話層)
因此,如果是後端兩種語言互相調用,用 RPC 可以獲得更好的性能(因爲RPC 本質上像調用本地方法一樣調用遠程方法,省去了 HTTP 報頭等一系列東西),應該也更容易配置
如果是前端通過 AJAX 調用後端,那麼用 REST API 的形式比較好(因爲無論如何也避不開 HTTP 這道坎)
從性能角度看,使用Http時,Http本身提供了豐富的狀態功能與擴展功能,但也正由於Http提供的功能過多,導致在網絡傳輸時,需要攜帶的信息更多( HTTP 報頭等一系列東西,Tcp就不要攜帶這些信息),從性能角度上講,較爲低效。而RPC服務網絡傳輸上僅傳輸與業務內容相關的數據,傳輸數據更小,性能更高。
爲什麼說REST 靈活度高於RPC
以Spring Cloud爲代表所支持的Restful 協議,最大優勢在於可以穿透防火牆 ,使用方便,無論哪種語言都支持http協議,基本上可以使用各種開發語言實現的系統,都可以接受Restful 的請求
因爲它是基於http的,防火牆極少封閉http端口的,除非管理員不想客戶通過B/S方式訪問服務器. 這就是能穿透防火牆的原因
“80端口是爲HTTP(HyperText Transport Protocol)即超文本傳輸協議開放的可以通過HTTP地址(即常說的“網址”)加“:80”來訪問網站,因爲瀏覽網頁服務默認的端口號都是80,因此只需輸入網址即可。
借鑑博客===========
https://www.cnblogs.com/helloworldmybokeyuan/p/11626833.html 講的很好的博客
https://blog.csdn.net/u014590757/article/details/80233901 服務之間的調用之RPC、Restful深入理解
https://blog.csdn.net/apricotCandy/article/details/87977528 這個是網絡7層傳輸結構
https://www.cnblogs.com/baizhanshi/p/8482612.html tcp 和 HTTP 聯繫及區別