gRPC-GateWay 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 代码

image.png

这个时候我们可以关注到,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

image.png

  • 修改我们的 my_grpcgateway/server/server.go 文件,新加一个 RunGrpcGwWithSwagger 函数,里面处理 关于 swagger 相关内容

my_grpcgateway/server/server.go

image.png

image.png

上述代码不难,应用起来也很简单,我们可以看出咱们本次对外提供了 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

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

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

可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103456.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】Git 分支

Git 分支 1.分支简介 为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的。 或许你还记得 起步 的内容, Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 。 在进行提交操作时,Git 会保存一…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

Vue2项目练手——通用后台管理项目第八节

Vue2项目练手——通用后台管理项目 菜单权限功能tab.jsLogin.vueCommonAside.vuerouter/index.js 权限管理问题解决router/tab.jsCommonHeader.vuemain.js 菜单权限功能 不同的账号登录,会有不同的菜单权限通过url输入地址来显示页面对于菜单的数据在不同页面之间的…

如何在`Pycharm`中配置基于WSL的`Python Interpreters`,以及配置基于WSL的`Terminal`

文章目录 一、创建pycharm用户并授予sudo权限0. 启动WSL下的CentOS1. 创建pycharm用户并授予sudo权限2. 设置pycharm用户为wsl启动Linux的默认用户3. 重启并重新登录wsl下的CentOS4. 验证pycharm用户的sudo权限 二、创建基于WSL的Python Interpreter1. 添加基于WSL的Python Int…

查看视频文件关键帧间隔

一、Elecard StreamEye Tools拖放视频文件查看。 红的是I帧;蓝的是P帧;绿的是B帧。 二、ffprobe -show_streams统计。 1、统计视频关键帧、非关键帧 ffprobe.exe -i 1.mp4 -show_streams v -show_packets -print_format json > d:\1.json 再统计1.j…

Greenplum执行SQL卡住的问题

问题 今天社区群里面一位同学反映他的SQL语句执行会hang住,执行截图如下。 分析 根据提示信息,判断可能是网络有问题,或者是跟GP使用UDP包有关系。 此同学找了网络检查的人确定网络没有问题,于是猜测跟UDP包有关。 参考文章ht…

Linux常用命令——convertquota命令

在线Linux命令查询工具 convertquota 把老的配额文件转换为新的格式 补充说明 convertquota命令用于将老的磁盘额数据文件(“quota.user”和“quota.group”)转换为新格式的文件(“quota.user”和“quota.group”)。 语法 c…

Vite + vue3 项目使用 amfe-flexible 和 postcss-pxtorem 实现不同屏幕自适应

amfe-flexible 和 postcss-pxtorem 可以一起使用来实现移动端的适配效果。 amfe-flexible 主要用于动态设置根元素字体大小(rem),以根据屏幕尺寸进行自适应布局。它会根据设备的屏幕宽度计算出根元素字体大小,并将其设置为页面的根…

微信小程序使用 scss

一、在 vscode 中安装 easy sass 扩展 二、在微信开发者工具导入 vscode 安装的 easy sass 扩展 安装完成后会让重新加载扩展 再次打开后就可以看到扩展已经有 easy sass 了 三、修改 easy sass 配置 重新加载扩展后,默认情况下这个扩展是已经启动的&#xff0c…

无涯教程-JavaScript - IMLOG10函数

描述 IMLOG10函数以x yi或x yj文本格式返回复数的公共对数(以10为底)。可以从自然对数计算复数的公共对数,如下所示: $$\log_ {10}(x yi)(\log_ {10} e)\ln(x yi)$$ 语法 IMLOG10 (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you …

数据可视化:四大发明的现代转化引擎

在科技和工业的蓬勃发展中,中国的四大发明——造纸术、印刷术、火药和指南针,早已不再是古代创新的象征,而是催生了众多衍生行业的崭新可能性。其中,数据可视化技术正成为这些行业的一颗璀璨明珠,开启了全新的时代。 1…

Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃

目前在大数据生态中,调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目,其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说,能够支持的可调度的任务类型同样是一个非常重要的因素&#xf…