根据 OpenAPI 规范自动生成多种语言的 API 客户端 SDK、服务端桩代码和文档。
grpc-ecosystem/grpc-gateway
一个 protoc 插件,可生成反向代理服务,将 RESTful JSON HTTP 请求转换为 gRPC 调用。
- Star
- 20,008
- Fork
- 2,415
- 未关闭 Issue
- 150
- 最近提交
- 16小时前
这是什么?
gRPC-Gateway 是 Protocol Buffers 编译器(protoc)的一个插件,读取 protobuf 服务定义后生成反向代理服务。该服务接收 RESTful HTTP+JSON 请求并转发给 gRPC 服务,使同一套实现可同时服务 gRPC 客户端和 JSON 客户端。
HTTP 映射由 .proto 文件中的 google.api.http 注解驱动。即使没有注解,生成器也能通过默认映射暴露接口;若无法修改 proto 文件,可以改用外部 gRPC API Configuration 文件提供 HTTP 规则。项目还包含生成 Swagger 2.0 定义的 protoc-gen-openapiv2,以及仍处于 alpha 阶段、用于输出 OpenAPI 3.1 的 protoc-gen-openapiv3。
生成的代码依赖 Go 版本的 grpc-gateway runtime 包。它支持查询参数和路径参数,可将 PATCH 请求映射为 field mask,流式响应以换行分隔的 JSON 输出,并支持通过 Grpc-Timeout 请求头设置 gRPC 超时。
核心功能
- 01生成反向代理,将 HTTP+JSON 请求转换为 gRPC 调用。
- 02通过 google.api.http 注解,将 HTTP 路径、查询参数和请求体映射到 gRPC 消息。
- 03使用 protoc-gen-openapiv2 生成 Swagger 2.0 定义。
- 04提供处于 alpha 阶段的 OpenAPI 3.1 生成器 protoc-gen-openapiv3。
- 05将 PATCH 请求转换为 field mask 请求,并以换行分隔 JSON 形式输出流式响应。
适用场景
- 为现有 gRPC 服务提供仅使用 REST 和 JSON 的客户端访问入口。
- 在内部引入 gRPC 的同时保留 RESTful API 以兼容旧客户端。
- 直接从 protobuf 定义生成 Swagger 或 OpenAPI 文档。
- 向 gRPC 支持较弱的浏览器或编程语言提供后端服务。
快速上手
- 1
使用 Go 安装网关插件
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway - 2
在 .proto 文件中编写带有 google.api.http 注解的 gRPC 服务
- 3
使用 protoc 或 buf 和该插件生成反向代理代码
protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt paths=source_relative your/service/v1/your_service.proto
使用前须知
- 仅生成 Go 代码,适用于 Go 服务。
- 需要配置 protoc 或 buf 以及 protobuf 工具链才能生成代码。
- OpenAPI 3.1 生成器(protoc-gen-openapiv3)处于 alpha 阶段,输出可能变化。
收录于专题
标签
常见问题
- grpc-gateway 是什么?
- 一个 protoc 插件,可生成反向代理服务,将 RESTful JSON HTTP 请求转换为 gRPC 调用。 gRPC-Gateway 是 Protocol Buffers 编译器(protoc)的一个插件,读取 protobuf 服务定义后生成反向代理服务。该服务接收 RESTful HTTP+JSON 请求并转发给 gRPC 服务,使同一套实现可同时服务 gRPC 客户端和 JSON 客户端。
- grpc-gateway 可以免费使用吗?用的什么许可证?
- grpc-gateway 以 BSD-3-Clause 许可证开源。用于商业产品前,请先确认许可证条款。
- grpc-gateway 还在维护吗?
- 活跃维护中。grpc-gateway 最近一次提交是在 2026年10月22日。
- grpc-gateway 适合用来做什么?
- 为现有 gRPC 服务提供仅使用 REST 和 JSON 的客户端访问入口。 在内部引入 gRPC 的同时保留 RESTful API 以兼容旧客户端。 直接从 protobuf 定义生成 Swagger 或 OpenAPI 文档。 向 gRPC 支持较弱的浏览器或编程语言提供后端服务。
- grpc-gateway 怎么安装和运行?
- 使用 Go 安装网关插件: go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway 在 .proto 文件中编写带有 google.api.http 注解的 gRPC 服务 使用 protoc 或 buf 和该插件生成反向代理代码: protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt paths=source_relative your/service/v1/your_service.proto
- 在哪里获取 grpc-gateway?
- 源代码和安装说明在 GitHub 上:https://github.com/grpc-ecosystem/grpc-gateway
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
根据 OpenAPI/Swagger 定义生成 API 客户端 SDK、服务端桩代码和文档的命令行工具。
一个轻量的 Go 微服务框架,提供统一的 HTTP/gRPC 传输层、中间件和基于 Protobuf 的代码生成。
Swagger UI 可根据 OpenAPI/Swagger 规范文件在浏览器中生成可交互的 API 文档。
开源的 OpenAPI/Swagger 工具集,提供交互式 API 文档、离线优先的 API 客户端和多种 Web 框架集成。
面向 gRPC 服务的命令行工具,类似 curl,使用 JSON 调用 RPC 方法。