gRPC 请求构建器
粘贴 .proto 文件内容或手动填写 Service/RPC 定义,生成 grpcurl 命令、JavaScript/Python/Go 四种语言的 gRPC 客户端调用代码。
免费在线工具
Loading…
使用说明
- 选择输入模式:A)粘贴 .proto 文件内容,工具会用正则自动提取 package、service、rpc 方法定义(含请求/响应消息类型);B)手动输入模式,直接填写 Service 名、RPC 方法名、请求/响应消息类型和 Package。
- proto 模式下,粘贴内容后“解析结果”区域会实时显示提取出的 Package、Service、RPC 列表,并自动把第一个 RPC 的信息填充到手动模式的字段里备用。
- 填写“服务器信息”:服务器地址(host:port)、请求消息内容(JSON 格式)、Metadata(JSON 格式,用于认证等自定义 header)。
- 点击“加载示例”里的 Greeter / RouteGuide / Health Check 三个按钮之一,快速加载对应的 .proto 示例内容和请求参数。
- 在“生成的代码”区域切换四个标签页(grpcurl 命令、JavaScript/TS、Python、Go),查看对应语言/工具的完整调用代码,点击“复制”按钮复制到本地使用。
功能介绍
- 支持两种输入方式:粘贴 .proto 文本自动解析(正则提取 package/service/rpc 定义),或手动填写 Service/RPC/消息类型字段。
- proto 解析目前仅支持简单的单行/单块 service 定义提取(正则匹配 rpc 方法名、请求类型、返回类型),不是完整的 Protocol Buffers 语法解析器,复杂 proto 文件(如嵌套 message、import、oneof、stream 关键字)可能无法完整识别。
- 生成 grpcurl 命令:包含服务反射 list 命令、列出服务方法命令、调用方法命令(带 -d JSON 请求体),以及不支持反射时需指定 proto 文件的备选命令。
- 生成 JavaScript/TypeScript 客户端代码(基于 @grpc/grpc-js + @grpc/proto-loader),含 metadata 设置和回调处理。
- 生成 Python 客户端代码(基于 grpcio),含 channel/stub 创建、请求构造、grpc.RpcError 异常处理。
- 生成 Go 客户端代码(基于 google.golang.org/grpc),含连接创建、超时 context、metadata 注入。
- 内置 3 个示例场景:Greeter(基础问候服务)、RouteGuide(含 stream 方法的路线服务)、Health Check(标准健康检查协议)。
- 所有生成的代码均为文本模板,工具不会真的向填写的服务器地址发起 gRPC 调用(浏览器本身也无法直接发起原生 gRPC 请求)。
使用场景
用 grpcurl 快速验证一个 gRPC 接口
后端刚上线一个新的 gRPC 服务,想用命令行工具测试一下,把 proto 或接口信息填进工具,直接复制生成的 grpcurl 命令去终端里跑,不用手记 -d 参数和方法全路径的拼写格式。
跨语言核对同一个 RPC 调用的客户端写法
团队里前端用 JS、算法组用 Python、基础设施用 Go,都要调用同一个 gRPC 接口,用本工具针对同一份 proto 一次性生成三种语言的调用代码,减少每个人各自查文档拼语法的时间。
学习 gRPC 客户端代码的基本结构
刚接触 gRPC,想知道 Python 里 grpc.insecure_channel + Stub 大致怎么用、Go 里 grpc.Dial + context 超时怎么设置,直接看生成的代码作为学习模板。
快速生成带认证 Metadata 的调用示例
接口需要在 gRPC Metadata 里带 Bearer Token 认证信息,填好 Metadata JSON 后四种语言的生成代码都会自动带上对应的 metadata/header 设置代码,不用分别去查每种语言 SDK 的 metadata 写法。
常见问题
这个工具会真的向我填的服务器地址发起 gRPC 调用吗?
不会。它只在浏览器本地根据你填写的信息拼接生成命令和代码文本,不会发起任何网络请求;实际上浏览器本身也无法直接发起原生 gRPC(HTTP/2 + Protobuf)调用,生成的代码需要你在支持 gRPC 的运行环境(如终端、Node.js、Python、Go 程序)里执行。
.proto 解析支持完整的 Protocol Buffers 语法吗?
不支持。当前解析基于简单的正则匹配,只能提取形如 "service X { rpc Y (Req) returns (Resp); }" 这样结构清晰的定义,遇到嵌套 message、import 其他 proto 文件、oneof、复杂注释等情况可能提取不完整或提取失败,建议解析后在“解析结果”区域核对一下提取是否正确,必要时切到手动输入模式补充。
proto 里如果有 stream 关键字(流式 RPC)会怎样?
正则只提取 rpc 方法名、请求类型、返回类型,不会识别 stream 关键字,所以生成的调用代码都是按一元(unary)调用生成的,流式 RPC(server streaming/client streaming/双向流)需要你自己在生成代码基础上手动调整为对应语言 SDK 的流式调用写法。
grpcurl 命令里的服务反射是什么意思,如果我的服务器没开反射怎么办?
gRPC 反射(reflection)允许 grpcurl 不需要本地 proto 文件就能获取服务接口信息,命令里的 list 相关命令都依赖服务器开启了反射;如果没有开启,需要使用工具生成的备选命令(带 -import-path 和 -proto 参数,指定本地 proto 文件路径)。