Kratos 集成Gin

时间:2024-10-10 17:56:13

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 框架的话,需要自己做如下事情:

  1. 规范项目分层,在 /internal 目录下,新增一个用户接口层 /interfaces (DDD思想)
  2. 通过gin编写自己的请求处理、响应
  3. 通过gin定义路由
  4. kratos 集成 gin
  5. 注入 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