WEB開發中,使用JSON-RPC好還是RESTful API好?

疾芪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。

最好在最佳實踐中,應當還應該返回與此操作相關的其他操作的,根據具體需求處理請求方式!!!


分享到:


相關文章: