乐趣区

关于grpc:gRPCGateWay-Swagger-实战

上一次咱们分享了对于 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 的资源目录

那么咱们就动起手来,一个一个的将上述的内容填充起来吧:

  1. 装置 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
  1. 下载 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/
  1. 装置必要的动态资源转换包

第一,先下载 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 UIGo 代码两者来供内部拜访,也就是说 go-bindata-assetfs 能够对外提供文件服务,这样能够通过 web 拜访 swagger 的 json 文件

go get -u github.com/elazarl/go-bindata-assetfs/...
  1. 在 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 疾速实战的我的项目代码的

  1. 批改 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

  1. 应用工具生成 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 相干的代码编写

  1. 编写咱们的服务,并把 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

感激浏览,欢送交换,点个赞,关注一波 再走吧

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是 阿兵云原生,欢送点赞关注珍藏,下次见~

退出移动版