RPC 和 REST 有什么優劣


介紹

這源自一個我面試時的問題,當聊到 REST API,面試官問:RPC 和 REST 有什么優劣?

首先 REST 就是 RESTful API,它是基於 http 的,形式大概是這樣子的

GET /collection:返回資源對象的列表(數組)
GET /collection/resource:返回單個資源對象
POST /collection:返回新生成的資源對象
PUT /collection/resource:返回完整的資源對象
PATCH /collection/resource:返回完整的資源對象
DELETE /collection/resource:返回一個空文檔

// 比如說有一個API提供動物園(zoo)的信息,還包括各種動物和雇員的信息

https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees

// 略過增刪改的介紹

那么 RPC 呢?它的一個經典案例就是 Dubbo 接口,可以基於 socket 也可以基於 http,文檔參見 dubbo-js

url格式  protocol://username:password@host:port/path?key=value&key=value

protocol 可以是 dubbo://

01、所屬類別不同

REST(RESTful) 是一種軟件架構風格。這種風格的典型應用,就是HTTP。其因為簡單、擴展性強的特點而廣受開發者的青睞。

而 RPC 呢,是 Remote Procedure Call Protocol 的簡寫,中文描述是遠程過程調用,它可以實現客戶端像調用本地服務(方法)一樣調用服務器的服務(方法)。

而 RPC 可以基於 TCP/UDP,也可以基於 HTTP 協議進行傳輸的,按理說它和REST不是一個層面意義上的東西,不應該放在一起討論,但是誰讓REST這么流行呢,它是目前最流行的一套互聯網應用程序的API設計標准,某種意義下,我們說 REST 可以其實就是指代 HTTP 協議。

02、使用方式不同

從使用上來看,HTTP 接口只關注服務提供方,對於客戶端怎么調用並不關心。接口只要保證有客戶端調用時,返回對應的數據就行了。而RPC則要求客戶端接口保持和服務端的一致。

REST 是服務端把方法寫好,客戶端並不知道具體方法。客戶端只想獲取資源,所以發起HTTP請求,而服務端接收到請求后根據URI經過一系列的路由才定位到方法上面去
RPC是服務端提供好方法給客戶端調用,客戶端需要知道服務端的具體類,具體方法,然后像調用本地方法一樣直接調用它。

03、面向對象不同

從設計上來看,RPC,所謂的遠程過程調用 ,是面向方法的 ,REST:所謂的 Representational state transfer ,是面向資源的,除此之外,還有一種叫做 SOA,所謂的面向服務的架構,它是面向消息的,這個接觸不多,就不多說了。

04、序列化協議不同

接口調用通常包含兩個部分,序列化和通信協議。

通信協議,上面已經提及了,REST 是 基於 HTTP 協議,而 RPC 可以基於 TCP/UDP,也可以基於 HTTP 協議進行傳輸的。

常見的序列化協議,有:json、xml、hession、protobuf、thrift、text、bytes等,REST 通常使用的是 JSON或者XML,而 RPC 使用的是 JSON-RPC,或者 XML-RPC。

為什么要采用RPC呢?

“遠程調用”意思就是:被調用方法的具體實現不在程序運行本地,而是在別的某個地方(分布到各個服務器),調用者只想要函數運算的結果,卻不需要實現函數的具體細節。

RPC 面向方法,主要用於函數方法的調用,可以適合更復雜通信需求的場景。如 rpc + ralbbimq中間件可以實現低耦合的分布式集群架構。

RPC 的案例就是 Dubbo 接口。

REST只是適合對外部提供資源接口時用的。

參考

從 0 到 1:全面理解 RPC 遠程調用!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM