国产精品免费久久久久电影院_亚洲日韩蜜桃av无码一二三区_AV在线无码免费特黄毛片_亚洲欧美日韩电影在线专区_福利小视频午夜福利一区二区中文字幕_在线免费观看黄黄色视频_欧美菊爆视频在线观看免费_婷婷六月丁香五月_久久伊人精品中文字幕有码_强奸国产无码激情

REST和gRPC的區(qū)別

2022-05-07

1205

作者:樂魚創(chuàng)新 ZHOU


REST 主導(dǎo)著現(xiàn)代 API 領(lǐng)域,尤其是在 Web 應(yīng)用場(chǎng)景。


然而,REST 并不是唯一可用的 API 架構(gòu),對(duì)于某些場(chǎng)景,gRPC/Protobuf 已占據(jù)主導(dǎo)地位。


比較 REST 和 gRPC 的文章俯拾皆是,這里亦不多贅述,只把關(guān)鍵差異述說一二:

1、REST 通?;?HTTP/1.1 構(gòu)建,它使用請(qǐng)求-響應(yīng)通信模型,這意味著無法進(jìn)行全雙工通信。REST 也可以使用 HTTP/2,但它們?nèi)匀粌H限于請(qǐng)求-響應(yīng)模型,不能利用 HTTP/2 對(duì)雙向流式通信的支持,這是瀏覽器的專屬私域。

相比之下,gRPC 使用 HTTP/2,它利用 HTTP/2 支持請(qǐng)求-響應(yīng)式通信和雙向通信。因此,gRPC 可以處理類似于 HTTP/1.1 的請(qǐng)求-響應(yīng)式交互(客戶端發(fā)送一個(gè)請(qǐng)求,服務(wù)器發(fā)送一個(gè)響應(yīng))。同時(shí),客戶端還可以支持長(zhǎng)連接,每個(gè) gRPC 調(diào)用都會(huì)打開一個(gè)新的 HTTP/2 流——也稱雙向全雙工通信。


2、對(duì)于消息的格式,REST 通常使用 json(盡管 REST 也可以承載 Protobuf),GRPC 通常搭配 Protobuf 使用。


3、從客戶端編程角度看,REST 服務(wù)對(duì) Web 天然友好,但對(duì)于微服務(wù)之間東西流量的調(diào)用,則需要為客戶端提供 SDK,否則客戶端程序員只能編寫大量直接調(diào)用 API 的無腦代碼,這對(duì)客戶端開發(fā)人員很不友好。

gRPC 恰恰相反,無需提供客戶端 SDK,gRPC 可以為多種語言自動(dòng)生成客戶端樁代碼,客戶端像調(diào)用本地函數(shù)一樣調(diào)用 gRPC 服務(wù),但 gRPC 對(duì)于 Web 應(yīng)用不友好,需要通過類似 grpc-gateway(https://github.com/grpc-ecosystem/grpc-gateway)的產(chǎn)品將 gRPC 服務(wù)轉(zhuǎn)成 REST 服務(wù),或者網(wǎng)頁中的 JavaScript 使用諸如 grpc-web 庫(kù)(https://github.com/grpc/grpc-web)直接調(diào)用 gRPC 服務(wù)。


4、從性能角度看,gRPC 數(shù)倍優(yōu)于 REST。


5、從公有云網(wǎng)關(guān)易接入性角度看。所有公有云廠商的 API 網(wǎng)關(guān)都支持 REST。但支持 gRPC 的比較少。例如,阿里云的 API 網(wǎng)關(guān)只支持 REST,騰訊云的 API 網(wǎng)關(guān)可以通過插件的方式支持 gRPC,Google Cloud 的 Apigee 原生支持 REST 和 gRPC。這意味著入口側(cè)的南北流量,REST 具有更廣泛的適用能力。


無論選 REST 還是 gRPC,面向資源的設(shè)計(jì)理念都同樣適用、都同樣重要。


例如,下面的 proto 定義,通過 option (google.api.http) 設(shè)置 gRPC 方法和 REST 接口之間的映射關(guān)系,借助 protoc 的 protoc-gen-grpc-gateway 插件生成 REST 代碼,從而使通過 proto 定義的接口可以同時(shí)支持 REST 和 gRPC 兩種協(xié)議。

該 proto 遵循面向資源的設(shè)計(jì)理念,抽象出組織(organization)和項(xiàng)目(project),并按 /v1/organizations/{organization}/projects/{project} 的方式組織資源。



面向資源的 API 設(shè)計(jì)按以下步驟展開:

1、確定資源的類型

2、確定資源之間的關(guān)系

3、確定資源的名稱

4、確定資源的結(jié)構(gòu)(schema)

5、給資源附加最小的方法集



深入看一下創(chuàng)建 project 的設(shè)計(jì):

通過 gRPC 創(chuàng)建 project 的過程是:首先創(chuàng)建 CreateProjectRequest struct 對(duì)象,然后調(diào)用 CreateProject 方法。


等價(jià)的 REST 調(diào)用是:創(chuàng)建 CreateProjectRequest json 對(duì)象,通過 POST 方法訪問 /v1/organizations/{organization}/projects。


技術(shù)交流
我們建立了多個(gè)云原生技術(shù)交流群,其中有來自O(shè)racle、Citrix、華為、騰訊等國(guó)內(nèi)外云計(jì)算專家,立即掃碼,拉你進(jìn)群。目前已有2000+開發(fā)者加入我們......
云原生廠商 云原生技術(shù)服務(wù)商
在云原生時(shí)代,樂魚創(chuàng)新致力于通過賦能開發(fā)者,實(shí)現(xiàn)企業(yè)快速迭代與交付,大幅提升創(chuàng)新效率。
產(chǎn)品下載