上一次咱们分享了对于 gRPC-Gateway 疾速实战,能够查看地址来进行回顾 :
也能够查看对于 gRPC 的历史文章:
- gRPC 介绍
<!—->
- gRPC 客户端调用服务端须要连接池吗?
<!—->
- gRPC 的拦截器
<!—->
- gRPC 的认证
<!—->
- 分享一下 gRPC- HTTP 网关 I
明天次要是分享对于 gRPC-Gateway Swagger 的实战局部,文章大体分为如下几个局部:
- 根本环境补充
<!—->
- gRPC-GateWay Swagger 实战
根本环境补充
首先,咱们来看一下环境搭建结束和实现实战之后的目录构造
通过目录构造咱们能够看到:
- my_grpcgateway 目录下多了 pkg 目录
这个目录是通过工具生成的,次要是解决 swagger 的 go 文件
- my_grpcgateway/protoc/order/order.swagger.json
工具生成的 swagger.json 文件,外面记录了对于 swagger 的接口 和 配置相干信息
- my_grpcgateway/protoc/order/protoc-gen-swagger
protoc-gen-swagger 工具目录
- my_grpcgateway/third_party
swagger 的资源目录
那么咱们就动起手来,一个一个的将上述的内容填充起来吧:
- 装置 Protoc Plugin
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
执行结束之后,咱们能够在咱们的 GOPATH 目录下找到 protoc-gen-swagger 目录
此时,咱们将 protoc-gen-swagger 目录拷贝到咱们的 my_grpcgateway/order/protoc 下
cd my_grpcgateway/order/protoc
cp /root/go/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.16.0/protoc-gen-swagger ./ -rf
- 下载 swagger-ui 的动态资源
进入地址:https://github.com/swagger-api/swagger-ui 将我的项目代码 download 下来
而后再咱们本人的我的项目目录 my_grpcgateway 下创立 third_party/swagger-ui 目录
mkdir third_party/swagger-ui/
最初将上述 swagger-ui 的 dist 目录下的所有内容,拷贝到咱们本人的 third_party/swagger-ui 目录下
cp xx/dist/* my_grpcgateway/third_party/swagger-ui/
- 装置必要的动态资源转换包
第一,先下载 go-bindata,用途是 go-bindata 用来将 swagger-ui 的源码转为 GO 代码
go get -u github.com/jteeuwen/go-bindata/...
第二,下载 go-bindata-assetfs,用途是 go-bindata-assetfs 可能联合 net/http
规范库和 go-bindata
所生成 Swagger UI
的 Go
代码两者来供内部拜访,也就是说 go-bindata-assetfs 能够对外提供文件服务,这样能够通过 web 拜访 swagger 的 json 文件
go get -u github.com/elazarl/go-bindata-assetfs/...
- 在 my_grpcgateway 目录下新建 pkg 目录,并应用工具在 pkg 目录下新增 swagger-ui 波及的代码
cd my_grpcgateway
mkdir pkg
go-bindata --nocompress -pkg swagger -o pkg/ui/data/swagger/datafile.go third_party/swagger-ui/...
执行结束之后,咱们就能够在 my_grpcgateway/pkg 目录下看到这样的目录构造了
对于环境的看到此处即可,剩下的就来开始 gRPC-GateWay Swagger 实战吧,再次动起手来干
gRPC-GateWay Swagger 实战
本次的 gRPC-GateWay Swagger 实战 是基于上次的 gRPC-GateWay 疾速实战的我的项目代码的
- 批改 my_grpcgateway/protoc/order/order.proto 代码
这个时候咱们能够关注到,proto 的如下几个变动:
- 咱们新导入了包
import "protoc-gen-swagger/options/annotations.proto";
<!—->
- Proto 文件中咱们新退出了 swagger 的定义
// 定义 swagger 内容
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
info: {
title: "grpc gateway order sample";
version: "1.0";
};
schemes: HTTP;
};
此处咱们将 schemes 设定为 HTTP 的,本次咱们不演示 HTTPS
- 应用工具生成 order.swagger.json 文件
protoc -I ./ \
--go_out ./ --go_opt paths=source_relative \
--go-grpc_out ./ --go-grpc_opt paths=source_relative \
--grpc-gateway_out ./ --grpc-gateway_opt paths=source_relative \
--swagger_out=logtostderr=true:. \
./order.proto
上述命令后面几行和之前都是一样的,本次次要是关注这句话
--swagger_out=logtostderr=true:. \
至此,上述环境筹备中说到的 4 个变动点 ,咱们都曾经筹备结束, 上面开始 swagger 相干的代码编写
- 编写咱们的服务,并把 swagger 加上去
- 批改 my_grpcgateway/main.go 文件,调用咱们的 RunGrpcGwWithSwagger 接口 来启动 grpc-gateway 服务并带上 swagger
- 批改咱们的 my_grpcgateway/server/server.go 文件,新加一个 RunGrpcGwWithSwagger 函数,外面解决 对于 swagger 相干内容
my_grpcgateway/server/server.go
上述代码不难,利用起来也很简略,咱们能够看出咱们本次对外提供了 2 个接口
- http://localhost:9999/swagger/order.swagger.json
拜访这个接口,实际上是申请到了 order.swagger.json 文件的具体内容,此处的解决逻辑是 svrSwaggerFile 函数会将 swagger.json 过滤出来,并加上相对路径 ./protoc/order/
,实际上就拜访到了咱们服务项目目录中的 my_grpcgateway/protoc/order/order.swagger.json
**
- http://localhost:9999/swagger-ui/
申请上述接口,咱们就能够看到咱们 swagger ui 界面了,这个时候,其实咱们看到的接口并不是咱们本人写的接口
因而如图中的查问门路目前是默认的
这个时候,咱们将搜寻框中的内容批改成 http://localhost:9999/swagger/order.swagger.json
此时,咱们就能够看到咱们本人编写的接口内容了,对于 swagger 咱们是能够在 swagger-ui 界面进行接口申请的,这里就简略指引一下,其余的就不赘述的了
第一,点击 Try it out
第二,填写咱们的申请参数
第三,点击 Execute 之后,查看咱们的响应后果
至此,对于 gRPC-GateWay Swagger 实战 就分享到此处,我的项目代码能够查看:https://github.com/qingconglaixueit/my_grpcgateway_demo
感激浏览,欢送交换,点个赞,关注一波 再走吧
欢送点赞,关注,珍藏
敌人们,你的反对和激励,是我保持分享,提高质量的能源
好了,本次就到这里
技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。
我是 阿兵云原生,欢送点赞关注珍藏,下次见~