基于 Protobuf 创建 gRPC+HTTP 服务开发指南
为什么选择 HTTP + gRPC 服务?
概述
基于 protobuf 创建 gRPC+HTTP 服务
为通用的 gRPC+HTTP 混合服务开发提供了一套完整的解决方案。该方案让开发者只需专注于业务逻辑的实现,而其他基础代码(如框架代码、接口定义等)均由 sponge 自动生成。值得一提的是,业务逻辑代码还可借助 sponge 内置的 AI 助手生成,进一步降低人工编码工作量。
提示
另一种 gRPC+HTTP 服务开发方案基于 sql 创建 gRPC+HTTP 服务
(参见 基于 SQL)只使用内置 ORM 组件,而本方案支持使用内置 ORM 组件或自定义 ORM 组件,这是两种方案创建 gRPC+HTTP 混合服务的区别,其他都一样。
适用场景:适合同时支持 gRPC 和 http 协议的通用后端服务项目。
基于 protobuf 创建 gRPC+HTTP 服务
默认无 ORM 组件,支持使用内置 ORM 组件或自定义 ORM 组件进行开发,以下将以内置 ORM 组件 gorm 为例,详细介绍 gRPC+HTTP 服务的开发步骤。
提示
内置 ORM 组件:gorm、mongo,支持数据库类型 mysql、mongodb、postgresql、sqlite。
自定义 ORM 组件:例如 sqlx、xorm、ent 等。选用自定义 ORM 组件时,需要开发者自行实现相关代码,点击查看章节:使用自定义 ORM 组件说明。
前期准备
环境要求:
- 已安装 sponge
- mysql 数据库服务
- 数据库表结构
- proto 文件,例如user.proto。
创建 gRPC+HTTP 服务
在终端执行命令sponge run
进入生成代码 UI 界面:
- 点击左边菜单栏【Protobuf】 → 【创建 gRPC+HTTP 服务】;
- 选择 proto 文件(可多选);
- 接着填写其他参数,鼠标放在问号
?
位置可以查看参数说明。
提示
如果填写参数启用了大仓库类型
选项,后续所有相关代码生成都需保持此设置。
填写完参数后,点击按钮下载代码
生成 gRPC+HTTP 服务项目代码,如下图所示:

等价命令
sponge micro grpc-http-pb --module-name=user --server-name=user --project-name=edusys --protobuf-file=./user.proto
提示
生成的 gRPC+HTTP 混合服务代码目录默认命名为
服务名称-类型-时间
格式,您可根据实际需要自行修改该目录名称。系统会自动保存成功生成的代码记录,方便下一次生成代码使用,刷新或重新打开页面时显示上一次部分参数。
目录结构
生成的代码目录结构如下:
.
├─ api
│ └─ user
│ └─ v1
├─ cmd
│ └─ user
│ ├─ initial
│ └─ main.go
├─ configs
├─ deployments
│ ├─ binary
│ ├─ docker-compose
│ └─ kubernetes
├─ docs
├─ internal
│ ├─ config
│ ├─ ecode
│ ├─ handler
│ ├─ routers
│ ├─ server
│ └─ service
├─ scripts
└─ third_party
代码结构示意图
创建的 gRPC 服务代码采用的"鸡蛋模型"架构:

代码调用链路说明
gRPC 主要调用链路:
cmd/user/main.go
→internal/server/grpc.go
→internal/service
→internal/dao
→internal/model
http 主要调用链路:
cmd/user/main.go
→internal/server/http.go
→internal/routers/router.go
→internal/handler
→internal/service
→internal/dao
→internal/model
从调用链路上可以看出,http 调用链路与 gRPC 调用链路共用业务逻辑层 service,不需要写两套代码与协议转换。
其中 service 层主要负责 API 处理,若需处理更复杂业务逻辑,建议在 service 和 dao 之间额外添加业务逻辑层(如internal/biz
)。详情请点击查看 代码分层架构章节。
测试 gRPC+HTTP 服务 API
解压代码文件,打开终端,切换到 gRPC+HTTP 服务代码目录,执行命令:
# 生成与合并 api 相关代码
make proto
# 打开生成的代码文件(例如 internal/service/user.go)
# 填充业务逻辑代码,支持人工编写或使用内置 AI 助手生成
# 编译和运行服务
make run
make proto
命令详解
使用建议
仅当 proto 文件中 API 描述发生变更时才需执行该命令,否则跳过该命令,直接运行make run
命令。该命令会后台执行以下自动化操作
- 生成
*.pb.go
文件 - 生成路由注册代码
- 生成错误码定义
- 生成 Swagger 文档
- 生成 gRPC 客户端测试代码
- 生成 API 模板代码
- 自动合并 API 模板代码
- 生成
安全机制
- 代码合并时会保留原有业务逻辑
- 每次合并前会自动备份代码至:
- Linux/Mac:
/tmp/sponge_merge_backup_code
- Windows:
C:\Users\[用户名]\AppData\Local\Temp\sponge_merge_backup_code
- Linux/Mac:
测试 gRPC API
测试方式一:使用 IDE
打开项目
- 使用
Goland
或VSCode
等 IDE 加载项目。
- 使用
执行测试
- 进入目录
internal/service
,打开后缀为_client_test.go
的文件。 - 文件包含 proto 定义的每个 API 的测试和压测函数。
- 修改请求参数(类似 Swagger 界面测试)
- 通过 IDE 运行测试,如下图所示:
micro-rpc-test - 进入目录
测试方式二:使用命令行
进入目录
cd internal/service
修改参数
- 打开
xxx_client_test.go
文件 - 填写 gRPC API 的请求参数
- 打开
执行测试
go test -run "测试函数名/gRPC 方法名"
示例:
go test -run "Test_service_teacher_methods/GetByID"
测试 HTTP API
在浏览器访问 http://localhost:8080/apis/swagger/index.html,测试 http api。
添加 CRUD API
点击查看章节:添加 CRUD API。
开发自定义 API
点击查看章节:开发自定义 API。
跨服务 gRPC API 调用
点击查看章节:跨服务 gRPC API 调用。
服务配置说明
点击查看章节:服务配置说明。