RPC與REST的差異

一:RPC
RPC 即遠程過程調用, 很是easy的概念, 像調用本地服務(方法)同樣調用server的服務(方法).
一般的實現有 XML-RPC , JSON-RPC , 通訊方式基本一樣, 所不一樣的僅僅是數據傳輸的格式.
(假設你已經習慣於XML繁重的尖括號,你最好仍是可以嘗試下更加輕型,高效,傳輸效率高的 JSON.)
一個簡單的通訊過程一般爲:
Requesthtml

markdown

<?

xml version="1.0"?瀏覽器

> <methodCall> <methodName>member.get_username_by_id</methodName> <params> <param> <value><i4>1</i4></value> </param> </params> </methodCall>

Response架構

spa

<?

xml version="1.0"?post

> <methodResponse> <params> <param> <value><string>Zhu Tao</string></value> </param> </params> </methodResponse>

向server發送一個過程調用的方法及其參數, 獲得server返回的方法運行的結果.code

2:REST
REST 不是一種協議,它是一種架構, 一種 Web Service 可以假設知足 REST 的幾個條件, 一般就稱這個系統是 Restful 的.server

這裏提到的條件包含:xml

C/S結構 (這是Internet服務的一個基本特徵)
無狀態 (很是熟悉吧,呵呵)
可以cache (想起了瀏覽器?)
分層系統 (想起了無數的架構?)
統一的接口 (假設這是可能的,程序猿有福了, :D)
code on demand(可選, 事實上是一種擴展性的要求)
看了這幾個特徵後,你想起了什麼?htm

你可能會破口而出: HTTP.

我答: You got it!

HTTP是WWW的最核心的協議, 它將簡單的分佈於世界各個角落的資源都統一塊兒來, 統一的地址, 簡單的方法, 和必定數量的表達方式.(你可能對這三點描寫敘述很是模糊,請go ahead).

REST 的三個要素是 惟一的資源標識, 簡單的方法 (此處的方法是個抽象的概念), 必定的表達方式.

REST 是以 資源 爲中心, 名詞即資源的地址, 動詞即施加於名詞上的一些有限操做, 表達是對各類資源形態的抽象.

以HTTP爲例, 名詞即爲URI(統一資源標識), 動詞包含POST, GET, PUT, DELETE等(還有其餘不常常使用的2個,因此 整個動詞集合是有限的), 資源的形態(如text, html, image, pdf等)

三:RPC與REST的差異
假設你想僅僅記住一點,那麼就請記住 RPC是以動詞爲中心的, REST是以名詞爲中心的, 此處的 動詞指的是一些方法, 名詞是指資源.

你會發現,以動詞爲中心,意味着,當你要需要加入新功能時,你必需要加入不少其餘的動詞, 這時候server端需要實現 相應的動詞(方法), client需要知道這個新的動詞並進行調用.

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

至於其餘的差異,如對實現語言的依賴, 耦合性等,這些都是上面提到的這個根本差異所衍生的.

讓咱們回到引入部分的2個問題. 當你天天使用HTTP衝浪時,你都在使用 REST 與遠程的server進行親熱接觸. 當你使用Gtalk和同事朋友溝通時,你則是在享受着 RPC 的便利.

相關文章
相關標籤/搜索