grpc-gateway学习笔记
简介
grpc-gateway可以很方便地把grpc接口以HTTP的方式暴露出去。具体来讲就是对外提供HTTP请求,并将其转换为RPC调用请求具体上游微服务。
gRPC-Gateway 是 Google 协议缓冲区编译器 protoc 的插件。它读取 protobuf 服务定义并生成一个反向代理服务器,该服务器将 RESTful HTTP API请求转到 gRPC服务。该服务器是根据 google.api.http 您的服务定义中的注释生成的。
这有助于您同时提供 gRPC 接口和 RESTful API接口。

GitHub库:https://github.com/grpc-ecosystem/grpc-gateway
官方文档:https://grpc-ecosystem.github.io/grpc-gateway/
安装
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway // 帮助生成gateway相关代码的protobuf插件
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc // 帮助生成grpc相关代码的protobuf插件
go get google.golang.org/protobuf/cmd/protoc-gen-go // 从protobuf定义文件生成go代码的protobuf插件
遇到"google/api/annotations.proto"文件找不到的问题
此文件可以在一下GitHub库找到:
https://github.com/googleapis/googleapis
此存储库包含支持 REST 和 gRPC 协议的公共 Google API 的原始接口定义。
下载下来放到你的项目里:
.
├── go.mod
├── go.sum
├── google
│ ├── api
│ │ ├── annotations.proto # annotations.proto文件
│ │ ├── http.proto
│ │ └── httpbody.proto
│ └── rpc
│ ├── code.proto
│ ├── error_details.proto
│ └── status.proto
├── helloworld
│ ├── helloworld.pb.go
│ ├── helloworld.pb.gw.go
│ ├── helloworld.proto
│ └── helloworld_grpc.pb.go
└── server
└── server.go
桩代码生成命令
使用--grpc-gateway_out:
--grpc-gateway_out=[PATH]
# 生成grpc的桩代码,并放到 PATH 目录中
例子:
protoc -I$GOPATH/src/learn-go/grpc-gateway --grpc-gateway_out=logtostderr=true:. helloworld.proto
# -I [path] 从目标路径搜寻头文件
版权声明:本文为qq_42887507原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。