平和县建设局网站,免费英文网站模板,网站支付端口,免费咨询律师网站目录前言快速体验说明1. 启动目标服务2. 启动代理3. 测试4. example.sh尾语前言
继上一篇博文的展望#xff0c;这个月rust-grpc-proxy提供了对restful的简单支持。 并且提供了完成的用例#xff0c;见地址如下#xff0c; https://github.com/woshihaoren4/grpc-proxy/tre…
目录前言快速体验说明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/postbody: *};};
}// 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?query666 | jq -r .response)assert_eq $result GET [SERVICE_ECHO]--- requesthello query666 test_one
}4. example.sh
不带任何参数执行example.sh会自动生成目标服务配置文件代理服务并自行验证。 这些生成好的服务和配置并不会自行销毁再次执行脚本时若存在则跳过不存在则生成
可使用如下参数清理
clean 清理代理服务目标服务配置文件config 重置配置文件
尾语
我在工作中尝试了rust-grpc-proxy目前很受测试同学的期待因为我们采用微服务架构很多服务都只提供了grpc接口这让测试同学很抓狂 一是grpc测试非常费劲又用protobuf编码通讯内容不易阅读调试也很费劲。不光测试安全部门也会各种扫描业务服务同样头疼grpc的安全性测试。每次proto的变动都需要各方重新编码效率极低。 二是我们的自动化测试平台对grpc支持并不友好或者说所有的自动化测试平台对grpc支持都很有限。如果用rust-grpc-proxy将grpc和http格式转换就能为自动化测试提供极大便利。