今天我們的來賓帖子來自
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是乙個架構風格而不是乙個架構,所謂架構風格就是凌駕於架構之上的一組...