go微服务框架Kratos:定义api接口以及实现
一、运行样例
我们先启动一个kratos样例的http服务
在上节创建的helloworld项目目录执行
go run ./cmd/helloworld -conf configs/config.yaml

可以启动http服务。
我们打开 浏览器输入
http://localhost:8000/helloworld/1
会返回

可以发现样例运行成功了。
二、样例api接口阅读
我们打开使用kratos建立的样例项目helloworld,
在 greeter.proto文件里有 下面一个路由
get: “/helloworld/{name}”

2.1 修改样例,新增一个 get 请求
2.1.1 我们打开 greeter.proto文件,对照 SayHello增加一个接口SayHi如下:
// Sends a hi
rpc SayHi (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
get: "/hi/{name}"
};
}
写好后如下:

2.1.2 执行make api,生产api接口
➜ make api
输出:
protoc --proto_path=./api \
--proto_path=./third_party \
--go_out=paths=source_relative:./api \
--go-http_out=paths=source_relative:./api \
--go-grpc_out=paths=source_relative:./api \
--openapi_out=fq_schema_naming=true,default_response=false:. \
api/helloworld/v1/error_reason.proto api/helloworld/v1/greeter.proto
如果执行make api 报错,比如提示,未安装 protoc-gen-go: program not found or is not executable,可以在 make api 执行之前,先执行一下 make init 安装一下kratos需要的依赖和插件。
此时我们可以看 greeter_http.pb.go 里面的代码,增加SayHi()如下:

2.1.3 实现api接口SayHi()
我们查看 SayHello()接口的实现,发现在 internal/service/greeter.go

那我们实现SayHi()也同样在这样文件中。
我们在 SayHello()方法下,写入如下代码:
// SayHi implements helloworld.GreeterServer.
func (s *GreeterService) SayHi(ctx context.Context, in *v1.HelloRequest) (*v1.HelloReply, error) {
g, err := s.uc.CreateGreeter(ctx, &biz.Greeter{Hello: in.Name})
if err != nil {
return nil, err
}
return &v1.HelloReply{Message: "hi " + g.Hello}, nil
}
此时显示如下:

2.1.4 在浏览器中访问接口 http://localhost:8000/hi/1
我们重新编译一下,
go run ./cmd/helloworld -conf configs/config.yaml
然后在浏览器中输入:http://localhost:8000/hi/1 展示如下:

我们第一个get接口写成功了。
2.2 修改样例,新增一个 post 请求
2.2.1 新增一个 Say() proto定义,如下:
// Say a hi
rpc Say (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
post: "/say",
body: "*",
};
}
我们这里主要有两点修改
- post方法,以及api的url
- 定义接受的body为 “*”
2.2.2 执行make api,生成api接口
➜ make api
我们会发现greeter_http.pb.go文件中GreeterHTTPServer中多了一个 Say()
type GreeterHTTPServer interface {
Say(context.Context, *HelloRequest) (*HelloReply, error)
SayHello(context.Context, *HelloRequest) (*HelloReply, error)
SayHi(context.Context, *HelloRequest) (*HelloReply, error)
}
2.2.3 在service中实现api接口Say()
在internal/service/greeter.go中实现 Say()方法,代码如下:
// Say implements helloworld.GreeterServer.
func (s *GreeterService) Say(ctx context.Context, in *v1.HelloRequest) (*v1.HelloReply, error) {
g, err := s.uc.CreateGreeter(ctx, &biz.Greeter{Hello: in.Name})
if err != nil {
return nil, err
}
return &v1.HelloReply{Message: "say " + g.Hello}, nil
}
2.2.4 请求post接口
此时我们重启一下一下服务
go run ./cmd/helloworld -conf configs/config.yaml
然后模拟请求一下,成功了。
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 9个最佳Text2Sql开源项目:自然语言到SQL的高效转换工具
- 深入解析API网关策略:认证、授权、安全、流量处理与可观测性
- GraphQL API手册:如何构建、测试、使用和记录
- 自助式入职培训服务API:如何让企业管理更上一层楼?
- Python如何调用Jenkins API自动化发布
- 模型压缩四剑客:量化、剪枝、蒸馏、二值化
- 火山引擎如何接入API:从入门到实践的技术指南
- 为什么每个使用 API 的大型企业都需要一个 API 市场来增强其合作伙伴生态系统
- 构建更优质的API:2025年顶级API开发工具推荐 – Strapi
- 外部函数与内存API – Java 22 – 未记录
- FAPI 2.0 深度解析:下一代金融级 API 安全标准与实践指南
- .NET Core 下的 API 网关