gRPC-swagger是基于 gRPC反射开发的一款 gRPC 调试工具,可以使用swagger-ui方便地展示和调用gRPC方法。因为gRPC-swagger是基于反射开发,所以使用时无需修改proto及相关的代码实现,只需在启动服务时开启反射功能。
特点简单易用,只需启动服务时允许反射,无需修改proto及相关的实现。
集成swagger-ui,可以方便的查看gRPC方法和参数定义。
通过http方式调用gRPC服务,极大的提高了测试效率。
运行截图在线实例demo
部署运行使用打包好的jar包wget https://github.com/grpc-swagger/grpc-swagger/releases/download/0.1.1/grpc-swagger-web-0.0.1-SNAPSHOT.jarjava -jar grpc-swagger-web-0.0.1-SNAPSHOT.jar编译构建git clone https://github.com/grpc-swagger/grpc-swaggercd grpc-swaggermvn clean packagejava -jar grpc-swagger-web/target/grpc-swagger-web-0.0.1-SNAPSHOT.jar默认使用8080端口,如果使用其他端口可以通过--server.port=端口号的方式设置
java -jar grpc-swagger-web/target/grpc-swagger-web-0.0.1-SNAPSHOT.jar --server.port=8888使用流程运行gRPC-swagger,具体参考部署运行
启动服务时开启反射。下面是java示例pom.xml中添加依赖
<dependency> <groupId>io.grpc</groupId> <artifactId>grpc-services</artifactId> <version>${grpc.version}</version></dependency>启动服务时允许反射:
Server server = ServerBuilder.forPort(SERVER_PORT) .addService(new HelloServiceImpl()) .addService(ProtoReflectionService.newInstance()) .build() .start();注册实例,通过 register 将提供服务的实例注册到gRPC-swagger上,gRPC-swagger会自动扫描服务,注册完成之后会返回注册成功的服务。后面可以通过 listServices 接口查看注册成功的服务。为了方便使用,这里 提供了一个简单的html页面。
使用swagger-ui查看gRPC服务,在输入框中输入 <host:port>/v2/api?service=<fullServiceName>,其中fullServiceName 就是上面返回注册成功的服务。
点击 Tryitout 进行服务测试
接口注册实例url:/register
参数:
host -地址(必填)
port -端口(必填)
groupName -分组名(选填),默认是 host:port,通过指定分组名可以将部署相同服务的实例归为一组
返回示例
{ "code": 0, "data": { "groupName": "localhost:12347", "services": [ "io.grpc.grpcswagger.showcase.HelloService" ], "endpoints": [ "localhost:12347" ], "success": true }}服务列表url: /listServices
返回示例
{ "code": 0, "data": { "localhost:12347": { "groupName": "localhost:12347", "services": [ "io.grpc.grpcswagger.showcase.HelloService" ], "endpoints": [ "localhost:12347" ], "success": true } }}调用gRPC方法url: /{rawFullMethodName}
参数:
rawFullMethodName -需要调用方法的完整名,例如 io.grpc.grpcswagger.showcase.HelloService.GetUser
payload -gRPC方法参数,JSON格式。可以使用 endpoint 参数,来指定需要调用的实例。
返回结果就是方法执行结果。
Swagger接口url: /v2/api-docs
返回swagger-ui展示需要的数据。
参数:
service-完整的services名称,就是listServices中返回的services里的值
致谢感谢 polyglot 项目,本项目中gRPC反射相关逻辑基于该项目进行修改。
ContributeFeelfreetoopenanissueorpullrequest.Wewillappreciateit!
FAQLicenseMITLicense.
评论