gozero使用gRPC-gateway生成http网关
本文介绍了使用gozero框架结合gRPC-gateway生成HTTP网关的方法。通过定义proto3文件生成gRPC服务,再配置gateway.yaml开启HTTP服务,简化了开发流程。文章详细展示了proto3文件定义、验证器使用、配置文件设置以及生成命令,最终实现通过网关访问gRPC服务。这种方法避免了编写api文件,并能自动生成swagger文档,提高了开发效率。
·
gozero使用gRPC-gateway生成http网关
- 目前gozero开发有点复杂,先写api文件生成http服务,然后在写proto3文件生成grpc服务属实有地麻烦
- 所以想试试能不能定义proto3生成grpc服务,然后再通过grpc开启http服务
- 这样做的好处是少写了api文件和部分代码,而且本身proto3就是必须写的,还能顺带生成swagger文档
- 先生成demo代码 执行命令:goctl rpc new demo
- 仓库地址 链接在这里
最终的文件目录
定义proto3文件并且使用验证器
syntax = "proto3";
package demo;
import "validate/validate.proto";
import "google/api/annotations.proto";
option go_package = "./demo";
message Request {
string ping = 1[(validate.rules).string.len = 3];//输入
}
message Response {
string pong = 1[(validate.rules).string.len = 2]; //输出
}
service Demo {
//ping方法
rpc Ping(Request) returns(Response){
option (google.api.http) = {
post: "/api/ping"
body: "*"
};
};
}
demo.yaml
Name: demo.rpc
ListenOn: 0.0.0.0:7070
Mode: dev
Consul:
Host: localhost:8500 # consul endpoint
Key: add.rpc # service name registered to Consul
Meta:
Protocol: grpc
Tag:
- tag
- rpc
gateway.yaml
Name: gateway
Host: 0.0.0.0
Port: 7777
Upstreams:
- Grpc:
Target: localhost:7070
Prefix: /api
# ProtoSets: #填这个就报错,因为使用了验证器,找不到文件
# - ../demo/demo.pb
# Mappings: #这个可以不填写
# - Method: POST
# Path: /ping
# RpcPath: demo.Demo/Ping
getway.go
package main
import (
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/gateway"
)
func main() {
var c gateway.GatewayConf
conf.MustLoad("gateway.yaml", &c)
gw := gateway.MustNewServer(c)
defer gw.Stop()
gw.Start()
}
然后执行生成proto对应的文件,需要修改-I的文件路径,按照自己下载的包地址来
protoc demo.proto -I. -I/code/nan/third_party \
-I/code/nan/third_party/google \
-I/go/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v1.2.1 \
--go_out=. --go-grpc_out=. \
--openapiv2_out=demo --openapiv2_opt=logtostderr=true \
--validate_out=demo --validate_opt=lang=go,paths=source_relative \
--descriptor_set_out=demo/demo.pb
之后就单独启动grpc服务(main.go)和网关服务(getway.go)
补充
- 没解决proto3生成的时候项目路径问题
- 生成的swagger文档可以直接导入到apifox,grpc的调试可以通过apifox,具体步骤如下,新建项目的时候选择grpc项目,proto文件选择服务器映射,直接选择开启的grpc服务就可以生成文档,进行调试
更多推荐
所有评论(0)