天天看點

rest 與rpc

RPC:RPC(Remote Procedure Call)—遠端過程調用,它是一種通過網絡從遠端計算機程式上請求服務,而不需要了解底層網絡技術的協定。像調用本地服務(方法)一樣調用伺服器的服務(方法)。

    RPC采用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機調用程序發送一個有程序參數的調用資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀态直到調用資訊到達為止。當一個調用資訊到達,伺服器獲得程序參數,計算結果,發送答複資訊,然後等待下一個調用資訊,最後,用戶端調用程序接收答複資訊,獲得程序結果,然後調用執行繼續進行。

RESTful:是一種架構風格,而不是協定。可以看看我的另一篇部落格:https://blog.csdn.net/zzzzzztt/article/details/80170228

符合REST規範的就可以稱為RESTful。REST基于http協定,将所有看成資源,名詞即資源位址,通過名詞加上HTTP操作完成對資源的操作。

RPC:RPC中的主體都是動作,是個動詞,表示我要做什麼

以下選自:https://www.cnblogs.com/miketwais/articles/RPC_REST_SOA.html

RPC與REST的差別

如果你想隻記住一點,那麼就請記住 RPC是以動詞為中心的, REST是以名詞為中心的, 此處的 動詞指的是一些方法, 名詞是指資源.

你會發現,以動詞為中心意味着,當你要需要加入新功能時,你必須要添加更多的動詞, 這時候伺服器端需要實作 相應的動詞(方法), 用戶端需要知道這個新的動詞并進行調用.

而以名詞為中心, 假使我請求的是 hostname/friends/, 無論這個URI對應的服務怎麼變化,用戶端是無需 關注和更新的,而這種變化對用戶端也是透明的.

至于其它的差別,如對實作語言的依賴, 耦合性等,這些都是上面提到的這個根本差別所衍生的.

當你每天使用HTTP沖浪時,你都在使用 REST 與遠端的伺服器進行親密接觸. 當你使用Gtalk和同僚朋友溝通時,你則是在享受着 RPC 的便利.

  場景及選擇 :

比如公司要做一個社交遊戲的項目, 讓你去負責整個系統的後端架構和通信等, 我們就有必要去仔細地學習和研究下facebook/人人網/新浪等社交網站(遊戲)開放的API, 我們知道facebook使用的是REST 的架構, 是以即使facebook本身是PHP開發的,這也不妨礙我們使用python來開發, 還有更多的PHP, Java, .net, Perl等用戶端API封裝.這樣就能靈活的适配多端的服務了。

于是在想,倘若facebook的架構使用的不是 REST ,會有這樣的靈活性嗎? 如果使用的是 RPC 可能不會有這麼便利。

另外,因為我們的前端使用的是flash, 與後端的python通信采用的是 Django+Flex+AMF , 如果你了解 flash,你會知道AMF是一種二進制的flash資料互動協定, 而 它是基于RPC !

是以,我們需要根據目前需求的情況來選擇REST或則RPC

上一篇: REST和RPC

繼續閱讀