Connect:一個更好的 gRPC

banq發表於2022-06-02

Connect 基於net/http,完全相容 gRPC(包括流式傳輸、預告片和錯誤詳細資訊),並且只是一個 Go 包。Connect 客戶端適用於任何 gRPC 伺服器,而 Connect 處理程式適用於任何 gRPC 客戶端。處理程式實現http.Handler和客戶端包裝http.Client,因此 Connect 與整個 Go HTTP 生態系統一起工作。

除了 gRPC 和 gRPC-Web,Connect還支援自己的協議。它是 gRPC 和 Twirp 中最好的,它適用於 HTTP/1.1 和 HTTP/2,並且對於 cURL 來說足夠簡單:

curl --header "Content-Type: application/json" \ --data '{"sentence": "I feel happy."}' \ https://demo.connect.build/buf.connect.demo.eliza.v1.ElizaService/Say


總體而言,我們認為這是對基於 Protobuf 的 Go RPC 的更專注、更不引人注目的嘗試。

我從來沒有真正喜歡過gRPC,但真的很喜歡構建基於RPC的API。因此,當Twirp在2018年初出現時,我覺得有一個真正的替代方案。我認為Connect繼承了其他兩個產品的優點,推動了我們的發展。

Connect提供的一個很好的生活質量改進是對請求/響應頭的訪問。在上下文中不再有管道傳入/傳出頭資訊(這總是讓人覺得有點噁心)。直到你實現了一些程式碼,意識到這些程式碼是多麼的乾淨,多麼的容易推理,你才會欣賞這一點。

和Twirp一樣,Connect可以和我們最喜歡的Go路由器一起使用:Go-chi/chi、gorrila/mux或普通的標準庫。這是gRPC最困擾我的事情:缺乏與Go生態系統其他部分的互操作性。我認為Connect很好地彌補了這一缺陷,提供了gRPC和Twirp的優點,同時提供了一個新的價值主張。

點選標題

相關文章