基于 Kratos 微服务框架的示例项目,使用 Protobuf 定义 API,提供一个简单的 SayHello 接口。
demo/ ├── api/ # API 定义(Protobuf) │ └── helloworld/ │ └── v1/ │ ├── greeter.proto # Proto API 定义 │ ├── greeter.pb.go # 生成的 message 代码 │ ├── greeter_grpc.pb.go # 生成的 gRPC 代码 │ └── greeter_http.pb.go # 生成的 HTTP 代码(Kratos) ├── cmd/ # 程序入口 │ └── demo/ │ └── main.go ├── configs/ # 配置文件 │ └── config.yaml ├── internal/ # 内部逻辑(不对外暴露) │ ├── biz/ # 业务逻辑层 │ │ ├── biz.go │ │ └── greeter.go │ ├── conf/ # 配置结构定义 │ │ └── conf.go │ ├── data/ # 数据访问层 │ │ ├── data.go │ │ └── greeter.go │ ├── server/ # 服务层(HTTP/gRPC) │ │ ├── server.go │ │ └── http.go │ └── service/ # 服务实现层 │ ├── service.go │ └── greeter.go ├── third_party/ # 第三方 Proto 依赖 │ └── google/ │ ├── api/ │ │ ├── annotations.proto │ │ └── http.proto │ └── protobuf/ │ └── descriptor.proto ├── go.mod ├── go.sum ├── Makefile ├── Dockerfile ├── .gitignore └── README.md
make init
make api
go mod download
go run ./cmd/demo
# 或
make run
服务将在以下地址启动:
http://localhost:8000# GET 请求
curl "http://localhost:8000/helloworld/greeting?name=kratos"
# POST 请求
curl -X POST "http://localhost:8000/helloworld/greeting" \
-H "Content-Type: application/json" \
-d '{"name": "kratos"}'
响应示例:
{
"message": "Hello kratos!"
}
API 通过 Protobuf 定义在 api/helloworld/v1/greeter.proto:
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) { option (google.api.http) = { get: "/helloworld/greeting" additional_bindings { post: "/helloworld/greeting" body: "*" } }; } }
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /helloworld/greeting?name= | SayHello 问候接口 |
| POST | /helloworld/greeting | SayHello 问候接口 |
# 完整构建(生成 proto + 整理依赖 + 编译)
make all
# 仅编译
make build
# Docker 构建
docker build -t demo:latest .