【Go】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版权协议,转载请附上原文出处链接和本声明。