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 的资源目录
那么我们就动起手来,一个一个的将上述的内容填充起来吧:
- 安装 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
感谢阅读,欢迎交流,点个赞,关注一波 再走吧
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI
相关文章:
gRPC-GateWay Swagger 实战
上一次我们分享了关于 gRPC-Gateway 快速实战 ,可以查看地址来进行回顾 : 也可以查看关于 gRPC 的历史文章: gRPC介绍 gRPC 客户端调用服务端需要连接池吗? gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分享关于 gRPC-G…...
【webpack】HMR热更新原理
本文:参考文章 一、HMR是什么,为什么出现 1、出现的原因 之前,应用的加载、更新都是一个页面级别的操作,即使单个代码文件更新,整个页面都要刷新,才能拿到最新的代码同步到浏览器,导致会丢失…...
Ceph构件及组件分析
Ceph存储架构 Ceph 存储集群由几个不同的daemon组成,每个daemon负责Ceph 的一个独特功能并。每个守护进程是彼此独立的。 下面将简要介绍每个Ceph组件的功能: RADOS(Reliable Autonomic Distributed Object Store, RADOS) RADOS…...
第六章:中华民族的抗日战争
1.日本发动灭亡中国的侵略斗争 关键字: 中国抗日战争的起点与全民族抗战阶段 2.中国人民奋起抗击日本侵略者 关键字: 1 国共第二次统一战线初步建立的标志:国民党五届三中全会 2 扭转时局的枢纽,国内和平初步实现:…...
签到系统怎么设计
背景 相信签到系统大家都有接触过,更多的是使用。但是有思考过这种系统是怎么设计的吗?比方说我统计一下每个月中每天的签到情况,怎么设计呢?今天一篇文章告诉你。 首先,我们熟悉的思维是:我设计一个数据…...
危险的套娃:攻击者在 PDF 文件中隐藏恶意Word 文档
据BleepingComputer消息,日本计算机紧急响应小组 (JPCERT) 日前分享了在2023 年 7 月检测到的利用PDF文档的新型攻击——PDF MalDoc攻击,能将恶意 Word 文件嵌入 PDF 来绕过安全检测。 JPCERT采样了一种多格式文件,能被大多数扫描引擎和工具识…...
怎样将几个pdf合并?
在日常工作中,我们经常需要处理大量的PDF文件。有时候,我们需要将多个PDF文件合并成一个文件,以便于快速传输或方便查阅。虽然PDF文件本身不能进行编辑,但是借助专业的PDF编辑软件,我们可以轻松地实现将多个PDF文件合并…...
vr健康管理服务情景化教学弥补现代医学教学中的诸多不足之处
高职高专临床医学院校以培养岗位胜任力为目的,该专业是一门专业性、实践性较强的医学学科,要求培养出来的学生具有较强的临床实践能力,医学生所学的全部知识,都应与实践相结合,解决临床的实际问题,为患者解…...
【业务功能篇92】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue
三、CompletableFutrue 一个商品详情页 展示SKU的基本信息 0.5s展示SKU的图片信息 0.6s展示SKU的销售信息 1sspu的销售属性 1s展示规格参数 1.5sspu详情信息 1s 1.ComplatableFuture介绍 Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用 isDone方…...
CAN FD的一致性测试 助力汽车电子智能化
后起之秀——CAN FD:随着各个行业的快速发展,消费者对汽车电子智能化的诉求越来越强烈,这使得整车厂将越来越多的电子控制系统加入到了汽车控制中,且在传统汽车、新能源汽车、ADAS和自动驾驶等汽车领域中也无不催生着更高的需求&a…...
微信短链跳转到小程序指定页面调试
首先说下背景:后端给了短链地址,但是无法跳转到指定页面。总是在小程序首页。指定的页面我们是h5页面。排查步骤如下: 1、通过快速URL Scheme 编译。上部普通编译 下拉找到此选项。 、 2、按照小程序的要求的URL Scheme输入。另外后端给的…...
机器学习——聚类算法一
机器学习——聚类算法一 文章目录 前言一、基于numpy实现聚类二、K-Means聚类2.1. 原理2.2. 代码实现2.3. 局限性 三、层次聚类3.1. 原理3.2. 代码实现 四、DBSCAN算法4.1. 原理4.2. 代码实现 五、区别与相同点1. 区别:2. 相同点: 总结 前言 在机器学习…...
【2023研电赛】安谋科技企业命题三等奖作品: 短临天气预报AI云图分析系统
本文为2023年第十八届中国研究生电子设计竞赛安谋科技企业命题三等奖分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来…...
The Sandbox 与韩国仁川市合作,打造身临其境的城市体验内容
简要概括 ● The Sandbox 与仁川市联手展示城市魅力,打造创新形象。 ● 本次合作包含多种多样的活动,如 NFT 捐赠活动和针对元宇宙创作者的培训计划。 我们非常高兴地宣布与仁川市合作,共同打造身临其境的城市体验。 双方合作的目的是在国…...
JVM之堆和方法区
目录 1.堆 1.1 堆的结构 1.1.1 新生代(Young Generation) 1.1.2 年老代(Old Generation) 1.1.3 永久代/元空间(Permanent Generation/Metaspace) 1.2 堆的内存溢出 1.3 堆内存诊断 1.3.1 jmap 1.3.2…...
Java 中的 IO 和 NIO
Java 中的 IO 和 NIO Java IO 介绍Java NIO(New IO)介绍windows 安装 ffmpeg完整示例参考文献 Java IO 介绍 Java IO(Input/Output)流是用于处理输入和输出数据的机制。它提供了一种标准化的方式来读取和写入数据,可以…...
Linux-crontab使用问题解决
添加定时进程 终端输入: crontab -e选择文本编辑方式,写入要运行的脚本,以及时间要求。 注意,如果有多个运行指令分两种情况: 1.多个运行指令之间没有耦合关系,分别独立,则可以直接分为两个…...
【设计模式】
文章目录 设计模式分类UML图类与类之间关系的表示方式 设计原则 设计模式分类 创建型模式 用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。单例、原型、工厂、抽象工厂、建造者等 5 种创建型模式。 结构型模式 用于描述如何将类或对象按某种…...
2023_Spark_实验四:SCALA基础
一、在IDEA中执行以下语句 或者用windows徽标R 输入cmd 进入命令提示符 输入scala直接进入编写界面 1、Scala的常用数据类型 注意:在Scala中,任何数据都是对象。例如: scala> 1 res0: Int 1scala> 1.toString res1: String 1scala…...
【深入解析spring cloud gateway】04 Global Filters
上一节学习了GatewayFilter。 回忆一下一个关键点: GateWayFilterFactory的本质就是:针对配置进行解析,为指定的路由,添加Filter,以便对请求报文进行处理。 一、原理分析 GlobalFilter又是啥?先看一下接口…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
