RPC 和 REST 有什麼優劣

2022-01-18 16:17:54 字數 1802 閱讀 6238

這源自乙個我面試時的問題,當聊到 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)的資訊,還包括各種動物和雇員的資訊

// 略過增刪改的介紹

那麼 rpc 呢?它的乙個經典案例就是 dubbo 介面,可以基於 socket 也可以基於 http,文件參見 dubbo-js

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

protocol 可以是 dubbo://

rest(restful) 是一種軟體架構風格。這種風格的典型應用,就是http。其因為簡單、擴充套件性強的特點而廣受開發者的青睞。

而 rpc 呢,是 remote procedure call protocol 的簡寫,中文描述是遠端過程呼叫,它可以實現客戶端像呼叫本地服務(方法)一樣呼叫伺服器的服務(方法)。

而 rpc 可以基於 tcp/udp,也可以基於 http 協議進行傳輸的,按理說它和rest不是乙個層面意義上的東西,不應該放在一起討論,但是誰讓rest這麼流行呢,它是目前最流行的一套網際網路應用程式的api設計標準,某種意義下,我們說 rest 可以其實就是指代 http 協議。

從使用上來看,http 介面只關注服務提供方,對於客戶端怎麼呼叫並不關心。介面只要保證有客戶端呼叫時,返回對應的資料就行了。而rpc則要求客戶端介面保持和服務端的一致。

rest 是服務端把方法寫好,客戶端並不知道具體方法。客戶端只想獲取資源,所以發起http請求,而服務端接收到請求後根據uri經過一系列的路由才定位到方法上面去

rpc是服務端提供好方法給客戶端呼叫,客戶端需要知道服務端的具體類,具體方法,然後像呼叫本地方法一樣直接呼叫它。

從設計上來看,rpc,所謂的遠端過程呼叫 ,是面向方法的 ,rest:所謂的 representational state transfer ,是面向資源的,除此之外,還有一種叫做 soa,所謂的面向服務的架構,它是面向訊息的,這個接觸不多,就不多說了。

介面呼叫通常包含兩個部分,序列化和通訊協議。

通訊協議,上面已經提及了,rest 是 基於 http 協議,而 rpc 可以基於 tcp/udp,也可以基於 http 協議進行傳輸的。

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

「遠端呼叫」意思就是:被呼叫方法的具體實現不在程式執行本地,而是在別的某個地方(分布到各個伺服器),呼叫者只想要函式運算的結果,卻不需要實現函式的具體細節。

rpc 面向方法,主要用於函式方法的呼叫,可以適合更複雜通訊需求的場景。如 rpc + ralbbimq中介軟體可以實現低耦合的分布式集群架構。

rpc 的案例就是 dubbo 介面。

rest只是適合對外部提供資源介面時用的。

從 0 到 1:全面理解 rpc 遠端呼叫!

REST和RPC是什麼東東?兩者有什麼區別

1.1.1 rest與rpc概念 什麼是rest rest是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是 restful。rest規範把所有內容都視為資源,網路上一切皆資源。rest並沒有創造新的技術,元件或服務,只是使用web的現有特徵和能力。可以完全通過...

Rpc和Rest介面,微服務之Rpc

介面呼叫通常包含兩個部分,序列化和通訊協議。常見的序列化協議包括json xml hession protobuf thrift text bytes等 通訊比較流行的是http soap websockect,rpc通常基於tcp實現,常用框架例如dubbo,netty mina thrift 首...

微服務 Rpc和Rest協議

介面呼叫通常包含兩個部分,序列化和通訊協議。常見的序列化協議包括json xml hession protobuf thrift text bytes等 通訊比較流行的是http soap websockect,rpc通常基於tcp實現,常用框架例如dubbo,netty mina thrift 首...