Kratos 集成 Gin
-
- 规范项目分层
- 处理请求处理、响应
- 编写路由route
- Kratos 集成gin
- 注入 wire set中
源码
Kratos 可以在
.proto
文件定义请求类型,URL,响应等等,如官方示例:
service BlogService {
rpc CreateArticle (CreateArticleRequest) returns (CreateArticleReply) {
option () = {
post: "/v1/article/"
body: "*"
};
}
rpc UpdateArticle (UpdateArticleRequest) returns (UpdateArticleReply) {
option () = {
put: "/v1/article/{id}"
body: "*"
};
}
rpc DeleteArticle (DeleteArticleRequest) returns (DeleteArticleReply) {
option () = {
delete: "/v1/article/{id}"
};
}
rpc GetArticle (GetArticleRequest) returns (GetArticleReply) {
option () = {
get: "/v1/article/{id}"
};
}
rpc ListArticle (ListArticleRequest) returns (ListArticleReply) {
option () = {
get: "/v1/article/"
};
}
}
通过使用命令行工具 kratos 可以生成相关 http 请求处理、路由定义等,省略了自己去处理请求、响应等过程。
Kratos 的项目分层借鉴了 DDD 的思想,在官方推荐的 project layout 中,用户接口层(interfaces)的作用体现在了 api 层。
如果我们不使用官方自带的 http 处理方案(通过 .proto
生成样板代码),而是使用 gin 框架的话,需要自己做如下事情:
- 规范项目分层,在
/internal
目录下,新增一个用户接口层/interfaces
(DDD思想) - 通过gin编写自己的请求处理、响应
- 通过gin定义路由
- kratos 集成 gin
- 注入 wire set 中
规范项目分层
PS :kratos 的 biz 层更多是DDD 中 domain + repo接口定义 ,但是官方该层给的后缀却是 XXUseCase,个人感觉不太对啊, 还是自己的知识错了?
在 /internal
目录下新建 /interfaces
目录
之后的处理请求、编写路由、wire Provider 都在该目录下定义,最终结果如图:
处理请求处理、响应
在用户接口层 /interfaces
编写请求处理的方法,写了个最简单的 SayHi
:
//
package interfaces
import (
"context"
"kratos-admin/internal/service"
"/go-kratos/kratos/v2/log"
"/gin-gonic/gin"
)
type UserUseCase struct {
userService *service.UserService
log *log.Helper
}
func