帶有REST和Open API的gRPC

2022-03-03 02:24:16 字數 2768 閱讀 2513

今天我們的來賓帖子來自

coreos的

brandon phillips

。coreos為linux容器構建開源專案和產品。

他們的共識和發現的旗艦產品

etcd

和他們的貨櫃發動機

rkt是grpc的早期採用者。

coreos選擇grpc的主要原因之一是因為它使用http / 2,從而使應用程式可以在單個tcp埠(go可用)上同時顯示http 1.1 rest / json api和高效的grpc介面。

這為開發人員提供了與rest web生態系統的相容性,同時推進了新的高效rpc協議。

在最新發布的go 1.6中,

net/http2預設情況下

,go附帶了乙個穩定的

軟體包。

由於許多coreos客戶端都使用http 1.1和json進行通訊,因此grpc與json和

open api規範的

互操作性很容易

(以前是swagger)非常有價值。

對於更熟悉基於http / 1.1 + json和open api spec api的使用者,他們使用了開放源**庫的組合,以grpc和http rest風格提供grpc服務,並使用api​​多路復用器為使用者提供了最佳的服務。兩個世界。

讓我們深入研究細節,看看它們是如何做到的!

在本文中,我們將根據grpc api定義構建乙個小的概念驗證grpc應用程式,新增rest服務閘道器,最後將其全部提供給單個tls埠。

該應用程式稱為echoservice,在web上等效於shell命令echo:該服務將返回或「回顯」任何傳送給它的文字。

首先,讓我們在名為echomessage的protobuf訊息中定義echoservice的引數,該訊息包括乙個稱為value的字段。

我們將在名為的protobuf「 .proto」檔案中定義此訊息

service.proto

這是我們的echomessage:

message echomessage
在相同的.proto檔案中,我們定義了乙個grpc服務,該服務採用此資料結構並將其返回:

service echoservice 

}

service.proto通過協議緩衝區編譯器按原樣

執行此檔案,會

protoc在go中生成存根grpc服務以及各種語言的客戶端。

但是,僅grpc並沒有提供公開rest介面的服務那麼有用,因此我們不會因grpc服務存根而停止。

接下來,我們新增grpc rest閘道器。

該庫將在grpc echoservice的頂部構建乙個restful**。

為了構建此閘道器,我們將元資料新增到echoservice .proto,以指示echo rpc對映到restful post方法,並且所有rpc引數都對映到json主體。

閘道器可以將rpc引數對映到url路徑和查詢引數,但是為了簡潔起見,此處省略了這些複雜性。

service echoservice ;

}}

這意味著閘道器一旦由生成protoc,現在就可以接受來自http的請求,curl如下所示:

$ curl -x post -k https://localhost:10000/v1/echo -d ''
到目前為止,整個系統看起來像這樣,只有乙個service.proto檔案同時生成grpc伺服器和rest**:

為了將這些結合在一起,回顯服務建立了乙個go,http.handler其他所有內容都路由到rest閘道器。

**看起來像這樣:

要進行嘗試,您所需要的只是乙個可以執行的go 1.6開發環境以及以下簡單命令:

在伺服器執行時,您可以嘗試在http 1.1和grpc介面上進行請求:

最後乙個好處:因為我們有乙個open api規範,所以https://localhost:10000/swagger-ui/#!/echoservice/echo如果您的膝上型電腦上有執行上述伺服器的伺服器,則

可以瀏覽執行的open api ui 

我們已經看了如何使用grpc橋接到rest世界。

如果您想

看完整個專案,請檢視

github上的倉庫

。我們認為使用單個protobuf來描述api的這種模式會導致易於使用,靈活的api框架,我們很高興在我們的更多專案中利用它。

Open API分析 實踐和思索

author 文初 email wenchu.cenwc alibaba inc.com blog http blog.csdn.net cenwenchu79 一 open api 的介紹 2open api的發展 2 open api的形態 2 open api的型別 3 open api互動的...

Open API的實現技術

一 遠端接 術 a soap 針對 rpc的一種解決方案,也叫簡單物件訪問協議。同時 soap 作為應用協議,可以基於多種傳輸協議 等 來傳遞訊息。b rest 注意問題 1 面向資源的介面設計。2 抽象操作作為基礎的 中的get put post delete 分別對應 是應用協議而非傳輸協議。4...

REST和REST的四個級別

rest 表述性狀態轉移 是最近幾年討論的最為熱烈的話題之一,其起源於roy.t.fielding博士的 軟體架構風格和基於網路的軟體架構設計 roy博士在他的 裡從架構風格角度闡述了網路應用程式中最佳架構風格rest。首先,rest是乙個架構風格而不是乙個架構,所謂架構風格就是凌駕於架構之上的一組...