疾芪IdHW8788
RPC (遠程過程調用)簡單理解即把別人的系統當作自己的系統調用。
優點:(1)把別人的系統當作自己的調用
(2)一般是長連接,請求訪問效率高。
缺點:(1)需引用被調用系統的接口包,調用的外部系統越多,本系統將越來越龐大
(2)編程語言有較大限制,一般只能調用當前語言的RPC。
具體實例:一般為webservice和dubbo
REST簡單理解通過HTTP請求訪問接口
優點:(1)即插即用,只需按照指定規則,不需要再引用其它的接口包
(2)跨語言,不同的編程語言都可以通過HTTP交互
缺點:(1)HTTP連接,效率較低。
具體實例:一般為HTTP和SpringCloud
Dubbo和SpringCloud的比較
從上圖看,各有優缺點,我選擇SpringCloud的REST,基於以下原因
閒浮半日
雖然我們公司最近在主推REST,但是我也不能說REST就一定比RPC好,只是各有特點,兩者沒有高下之分。
REST
用很官方的定義就是:表現層狀態轉移(representational state transfer)。
簡單一些說就是:URL定位資源,用方法(GET,POST,DELETE,DETC)描述操作。
REST是無狀態的,請求之間沒有持久的會話信息。
比如下圖,tasks就是資源,我們可以通過GET /tasks 獲取到所有的tasks。
RPC
遠程過程調用(remote procedure call)。
RPC的核心思想是把本地的方法映射到API,比如我本地有一個方法是getUser(),遠程也可以通過某種協議來調用這個getUser()。這個協議可以是Http或者Socket,都可以。
(我這裡只找到一張XML-RPC的圖,意會一下)
REST VS RPC
REST的主體是資源,而RPC更側重於動作。
REST更偏向外部調用,RPC更偏向內部調用。在國內,一般更偏向於RPC,比如阿里出的dubbo;在國外,更倡導REST,比如spring cloud,是個純REST的項目,不支持RPC。(當然,近幾年REST在國內也開始火起來了)
REST其實是個效率很低的東西,特別是需要聯合查詢的時候;並且有些東西,也不好抽象成資源。
RPC只需要關心業務場景,但是如果業務理解不夠,你可能不會理解這些API是做什麼用的(優秀的RESTful API的設計,就算不懂業務,只要會一些英文,應該通過URL就能猜到每個API是做什麼的)。
前端可能更喜歡REST,而後端估計更傾向於RPC。
希望我的回答可以幫助到你!
會點代碼的大叔
JSON-RPC已經是過去式了,不能很好的忙住現在的快熟開發。。。。
而這個RESTFul,其中的REST實際上應該是ReST:Representational State Transfer的縮寫的,具體解釋起來應該是的:
Representational的意思是表現形式的。
State Transfer的意思是狀態轉換的。
這個所以RESTful的含義是資源通過狀態轉換的一種表現形式的。
具體一點說的,資源通過URL來定位,這個資源通過POST,GET,PUT,PATCH,DELETE等方法來操作的,然後完成操作後通過HTTP的狀態碼2xx/4xx來完成狀態的轉換的的。
這個其中的GET方法表示獲取URL對應的資源的,POST/PUT方法表示新建1條資源的,則PATCH方法表示對URL對應資源的部分內容進行修改,DELETE表示刪除URL對應的資源的。
所以因此需要訪問RESTful API的場景的:
需要對數據進行靈活管理的Web頁面,很好的支持Web開發。
手機客戶端的開發的,很好的API。
最好在最佳實踐中,應當還應該返回與此操作相關的其他操作的,根據具體需求處理請求方式!!!