18

我正在尝试使用 Google Cloud Endpoints 制作基于 gRPC 的 API,可以对传入的 REST 请求进行转码。我正在关注他们的示例代码,但我没有任何关于如何使用 annotation.proto 或 empty.proto 正确导入和编译的文档。

谢谢!

4

4 回答 4

14

我不明白这是 grpc-gateway 的一部分。按照我跑的文档

protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=plugins=grpc:. *.proto

并编译成功。

于 2017-04-10T15:33:22.307 回答
8

这可能不是一个好主意。您可以复制google/api/annotations.protogoogle/api/http.proto进入本地项目并在运行时导入它们python -m

mkdir -p google/api    
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/annotations.proto > google/api/annotations.proto     
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/http.proto > google/api/http.proto

python -m grpc_tools.protoc google/api/http.proto google/api/annotations.proto -I. --python_out=. --grpc_python_out=. your_proto.proto

引用: https ://cloud.google.com/solutions/exposing-grpc-services-using-cloud-endpoints-pt1

于 2018-11-07T04:07:49.230 回答
4

empty.proto 和 annotation.proto 默认不包括在内,所以你需要带一份。具体来说,您可以在项目的目录中制作它们的副本,或在现有项目中引用它们(例如 Protobuf git repo)。

引用 grpc-ecosystem/grpc-gateway 使用的副本可能是个好主意,因为他们可能希望将来移动它。

于 2017-04-18T23:02:21.283 回答
0

安装时使用go list -m -f '{{.Dir}}'有助于更好地解决go mod依赖关系$GOPATH/pkg/mod

grpc_ecosystem_path=`go list -m -f '{{.Dir}}' github.com/grpc-ecosystem/grpc-gateway`

protoc \
    --proto_path="$grpc_ecosystem_path/third_party/googleapis" \
# ...
于 2021-11-03T23:55:05.297 回答