Repolode
grpc-ecosystem

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. 1

    使用 Go 安装网关插件

    go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
  2. 2

    在 .proto 文件中编写带有 google.api.http 注解的 gRPC 服务

  3. 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 数据每日更新。

相关项目