Connect:一个更好的 gRPC


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的优点,同时提供了一个新的价值主张。

点击标题