对restful的支持 rust-grpc-proxy
目录
- 前言
- 快速体验
- 说明
- 1. 启动目标服务
- 2. 启动代理
- 3. 测试
- 4. example.sh
- 尾语
前言
继上一篇博文的展望,这个月rust-grpc-proxy提供了对restful的简单支持。
并且提供了完成的用例,见地址如下,
https://github.com/woshihaoren4/grpc-proxy/tree/main/example/restful
下面我们来体验一下
快速体验
github 地址 https://github.com/woshihaoren4/grpc-proxy
cd example/restful
chmod +x example.sh
./example.sh
会见到如下输出,说明服务运行和测试成功,细节详见example.sh文件

说明
上面到底干了个啥那,让我们往下看
1. 启动目标服务
首先启动两个提供grpc服务的程序SERVICE_ECHO 和 SERVICE_GREET,他们的proto如下
- EchoGet 方法的路径
get: "/api/v1/echo/{request}/get",这里{request}是声明此处的路径会被解析到方法入参EchoGetRequest中 - EchoGet 对应的是一个get请求,其中入参
EchoGetRequest的另一个参数int32 query = 2;,没有在path中声明,则会在http请求中的query种解析
// Echo Service
service EchoService {rpc EchoGet(EchoGetRequest) returns (EchoGetResponse){option (google.api.http) = {get: "/api/v1/echo/{request}/get"};};rpc EchoPost(EchoGetRequest) returns (EchoGetResponse){option (google.api.http) = {post: "/api/v1/echo/post"body: "*"};};
}// Echo Service
service GreetService {rpc GreetGet(GreetGetRequest) returns (GreetGetResponse){option (google.api.http) = {get: "/api/v1/greet/{request}"};};
}message EchoGetRequest {string request = 1;int32 query = 2;
}message EchoGetResponse {string response = 1;
}message GreetGetRequest {string request = 1;string content = 2;
}message GreetGetResponse {string response = 1;
}
2. 启动代理
启动代理钱会先生成测试文件,这里指明了我们上面启动的两个服务的地址 和路径前缀,配置文件如下
[[proxy_sink]]
name = "echo"
addr = "127.0.0.1:1234"
prefix = "/api/v1/echo"[[proxy_sink]]
name = "hello"
addr = "127.0.0.1:1235"
prefix = "/api/v1/greet"
生成文件后就会启动代理
3. 测试
代理启动后会执行三个curl,根据返回的结果断言 验证服务的正确性
比如测试用例一
function test_one() {result=$(curl -s -l --location --request GET 'http://127.0.0.1:6789/api/v1/echo/hello/get?query=666' | jq -r '."response"')assert_eq "$result" 'GET [SERVICE_ECHO]---> request=hello query=666' "test_one"
}
4. example.sh
不带任何参数执行example.sh,会自动生成目标服务,配置文件,代理服务,并自行验证。
这些生成好的服务和配置并不会自行销毁,再次执行脚本时,若存在则跳过,不存在则生成
可使用如下参数清理
- clean 清理代理服务,目标服务,配置文件
- config 重置配置文件
尾语
我在工作中尝试了rust-grpc-proxy,目前很受测试同学的期待,因为我们采用微服务架构,很多服务都只提供了grpc接口,这让测试同学很抓狂,
一是grpc测试非常费劲,又用protobuf编码,通讯内容不易阅读,调试也很费劲。不光测试,安全部门也会各种扫描业务服务,同样头疼grpc的安全性测试。每次proto的变动都需要各方重新编码,效率极低。
二是我们的自动化测试平台对grpc支持并不友好,或者说所有的自动化测试平台对grpc支持都很有限。如果用rust-grpc-proxy将grpc和http格式转换,就能为自动化测试提供极大便利。
相关文章:
对restful的支持 rust-grpc-proxy
目录前言快速体验说明1. 启动目标服务2. 启动代理3. 测试4. example.sh尾语前言 继上一篇博文的展望,这个月rust-grpc-proxy提供了对restful的简单支持。 并且提供了完成的用例,见地址如下, https://github.com/woshihaoren4/grpc-proxy/tre…...
【模拟集成电路】环路滤波器(LPF)设计
环路滤波器 LPF 设计 前言环路滤波器设计仿真结果各部分链接链接:前言 本文主要内容是对环路滤波器 模块设计设计进行阐述,LPF在电荷泵频率综合器中,主要作用是进行滤波,消除毛刺,因此一个简单的RC就可以起到很好的效果…...
adb及cmd部分常用命令
adb及cmd部分常用命令cmd常用命令adb常用命令内存/cpu相关此文章日常记录,有可能存在不准确的地方,仅供参考即可。 cmd常用命令 返回上一级: cd… 进入指定盘: D: 进入指定路径: cd 文件路径 查看子文件列表…...
ProtoBuf介绍
1 编码和解码编写网络应用程序时,因为数据在网络传输的都是二进制字节码数据,在发送数据时进行编码,在接受数据时进行解码codec(编码器)的组成部分有2个:decoder(解码器)和encoder&a…...
数据结构:完全二叉树开胃菜小练习
目录 一.前言 二.完全二叉树的重要结构特点 三.完全二叉树开胃菜小练习 1.一个重要的数学结论 2.简单的小练习 一.前言 关于树及完全二叉树的基础概念(及树结点编号规则)参见:http://t.csdn.cn/imdrahttp://t.csdn.cn/imdra 完全二叉树是一种非常重要的数据结构: n个结点的…...
mybatis与jpa
1、官方文档 mybatis:mybatis-spring – jpa:https://springdoc.cn/spring-data-jpa/ 应用文档 jpa详解_java菜鸟1的博客-CSDN博客 JPA简介及其使用详解_Tourist-xl的博客-CSDN博客_jpa的作用 2、使用比较 mybatis一般用于互联网性质的项目&#x…...
js 求解《初级算法》66. 加一
一、题目描述 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入:…...
力扣-游戏玩法分析
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:511. 游戏玩法分析二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结…...
ZZNUOJ_用C语言编写程序实现1186 : 奖学金(结构体专题)(附完整源码)
题目描述 某校发放奖学金共5种,获取条件各不同: 1.阳明奖学金,每人8000,期末平均成绩>80,且在本学期发表论文大于等于1篇; 2.梨洲奖学金,每人4000,期末平均成绩>85,且班级评议成绩>80; 3.成绩优秀奖,每人2000,期末平均成绩>90; 4.西部奖学金,…...
加油站ai系统视频监测 yolov5
加油站ai系统视频监测通过yolov5网络模型深度学习边缘计算技术,加油站ai系统视频监测对现场卸油过程中人员违规离岗、现场灭火器没有按要求正确摆放、以及卸油前需要遵守静电释放15分钟、打电话、明火烟雾情况、抽烟行为进行自动识别。YOLO系列算法是一类典型的one-…...
【JDK8新特性之Stream流-Stream结果收集案例实操】
一.JDK8新特性之Stream流-Stream结果收集以及案例实操 二.Stream结果收集(collect函数)-实例实操 2.1 结果收集到集合中 /*** Stream将结果收集到集合中以及具体的实现 collect*/Testpublic void test01(){// 收集到List中 接口List<Integer> list Stream.of(1, 2, 3…...
Fiddler 抓包工具
HTTP代理所谓的http代理,其实就是代理客户机的http访问,主要代理浏览器访问页面。代理服务器是介于浏览器和web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Requ…...
2023最新版网络安全保姆级指南,手把手带你从零基础进阶渗透攻防工程师
前言 一份网络攻防渗透测试的学习路线,不藏私了! 1、学习编程语言(phpmysqljshtml) 原因: phpmysql可以帮助你快速的理解B/S架构是怎样运行的,只有理解了他的运行原理才能够真正的找到问题/漏洞所在。所以对于国内那些上来就说…...
排序基础之选择排序法
目录 前言 一、什么是选择排序 二、实现选择排序 三、使用泛型扩展 四、使用自定义类型测试 前言 今天天气不错,这么好的天气不干点啥实在是有点可惜了,于是乎,拿出键盘撸一把! 来,今天来学习一下排序算法中的选…...
2.24测试用例
一.测试模型1.V模型特点:1.明确标注了测试的类型2.明确标注了测试阶段和开发阶段的对应关系缺点:测试后置2.W模型也叫双v模型,测试阶段全流程介入缺点:1.上一阶段完成.下一个阶段才能开始2.开发模型和测试模型也保持着一种线性的前后关系3.重文档,重过程,不支持敏捷模式二.设计…...
面试必刷101 Java题解 -- part 1
练习地址 面试必刷101-牛客1、链表反转2、链表内指定区间反转**3. 链表中的节点每k个一组翻转**4、**合并两个排序的链表**5、**合并k个已排序的链表**6、**判断链表中是否有环****7、链表中环的入口结点**8、链表中倒数最后k个结点**9、删除链表的倒数第n个节点****10、两个链…...
Python---关联与继承
专栏:python 个人主页:HaiFan. 专栏简介:Python在学,希望能够得到各位的支持!!! 关联与继承前言has a关联关系is a继承关系子类不添加__init__子类添加__init__前言 has a关联关系 has - a 是在…...
数据库行业的 “叛逆者”:大数据已“死”,MotherDuck 当立
“大数据”已死——现今我们最重要的事情不是担心数据大小,而是专注于我们将如何使用它来做出更好的决策。数据库行业发展至今,在数据层面有很多的加速和变革,尤其是过去几年的云数仓爆炸式增长,带来了行业的很多变化。毫无疑问&a…...
Linux->进程优先级
目录 1. 优先级的概念 2. 优先级的运作方式 3. Linux下查看进程优先级以及调整 3.1 查看进程优先级 3.2 修改进程优先级 1. 优先级的概念 1. cpu资源分配的先后顺序,就是指进程的优先权(priority)。 2. 优先权高的进程有优先执行权利。配…...
loki 日志管理的安装部署使用
loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。 不对日志进行…...
华为交换机MAC地址漂移检测与风暴抑制联动配置指南
1. 华为交换机MAC地址漂移检测原理与实战 刚接触网络运维时,第一次遇到MAC地址漂移报警简直一头雾水。后来才发现,这其实是交换机在提醒我们:"兄弟,你的网络里可能有环路!" MAC地址漂移的本质是同一个MAC地址…...
革新性英雄联盟智能辅助解决方案:一站式游戏体验提升工具
革新性英雄联盟智能辅助解决方案:一站式游戏体验提升工具 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英…...
如何极速获取金融市场数据:5分钟实战指南
如何极速获取金融市场数据:5分钟实战指南 【免费下载链接】qstock qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策…...
DAMOYOLO-S快速上手:移动端浏览器访问Web服务与触屏操作适配说明
DAMOYOLO-S快速上手:移动端浏览器访问Web服务与触屏操作适配说明 1. 开篇:一个能“看懂”世界的AI助手 想象一下,你正用手机拍一张街景照片,屏幕上立刻就能标出“汽车”、“行人”、“交通灯”,甚至“手提包”。这不…...
如何通过技术优化提升Element Plus开发效率
如何通过技术优化提升Element Plus开发效率 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus 在前端开发过程中,Element Plus作为一款基于Vue.js 3…...
如何跨越语言盲区,让学术表达精准落地
当我们完成了精妙的实验设计,获得了宝贵的数据,准备向世界展示科研成果时,却常常在“最后一公里”遭遇阻碍。这种阻碍并非源于科研本身的深度,而是来自于语言表达的信心不足与自查盲区。你是否也有过这样的经历:对着屏…...
YOLOv10镜像作品集:高清图像目标检测惊艳案例分享
YOLOv10镜像作品集:高清图像目标检测惊艳案例分享 1. 引言:YOLOv10带来的视觉革命 在计算机视觉领域,目标检测技术正经历着前所未有的变革。YOLOv10作为最新一代的目标检测模型,以其无与伦比的速度和精度重新定义了实时检测的标…...
保姆级教程:在OBBDetection项目中为DOTA数据集定制检测结果可视化(mmdetection 2.2)
深度定制OBBDetection检测结果可视化:DOTA数据集高级实践指南 在旋转目标检测领域,DOTA数据集因其复杂的航拍场景和多角度目标特性,对结果可视化提出了独特挑战。本文将带您从零构建一套完整的可视化解决方案,涵盖从基础配置到高级…...
Local AI MusicGen商业应用:电商视频智能配乐
Local AI MusicGen商业应用:电商视频智能配乐 你是不是也遇到过这样的烦恼?制作电商短视频时,翻遍了免费音乐库,要么版权有问题,要么风格不搭,要么就是千篇一律的背景音。自己配乐?没那个时间和…...
Metro性能监控终极指南:如何快速分析和优化React Native打包构建过程
Metro性能监控终极指南:如何快速分析和优化React Native打包构建过程 【免费下载链接】metro 🚇 The JavaScript bundler for React Native 项目地址: https://gitcode.com/gh_mirrors/me/metro Metro作为React Native的官方JavaScript打包工具&a…...
