手把手带你从0到1封装Gin框架:07 第一个查询接口

271 阅读2分钟

项目源码

Github

前几章我们做了很多基础的搭建,但是路由只是实现了一个简单的Hello World,现在我们来实现一个查询接口

封装response

首先封装一个response,新建app/response/response.go文件:

package response

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// Response 定义一个统一的返回值结构体
type Response struct {
	ErrorCode int         `json:"error_code"`
	Data      interface{} `json:"data"`
	Message   string      `json:"message"`
}

// Success 成功返回
func Success(c *gin.Context, data interface{}) {
	c.JSON(http.StatusOK, Response{
		0,
		data,
		"ok",
	})
}

// Error 失败返回
func Error(c *gin.Context, errorCode int, msg string) {
	c.JSON(http.StatusOK, Response{
		errorCode,
		nil,
		msg,
	})
}

在response包中,定义了一个统一的返回值结构体,并新增SuccessError方法用来处理接口的返回值

封装service

为了处理后续复杂的业务逻辑,我们再封装一个Service层,新建app/service/base_service.go文件:

package service

import "gorm.io/gorm"

// service基类,其他service都继承它
type baseService struct {
	db *gorm.DB
}

新建app/service/admin_service.go文件:

package service

import "eve/app/model"

type adminService struct {
	baseService
}

func (a *adminService) Profile() (model model.Admin) {
	a.db.First(&model)
	return model
}

新建app/service/init.go文件:

package service

import (
	"eve/internal/global"
)

var (
	BaseService = &baseService{db: global.DB}

	AdminService = &adminService{baseService: *BaseService}
)

app/service/init.go文件用来实例化service层用到的对象

封装api

新建app/api/admin/admin_api.go文件:

package admin

import (
	"eve/app/response"
	"eve/app/service"
	"github.com/gin-gonic/gin"
)

type adminApi struct{}

func (a *adminApi) Profile(c *gin.Context) {
	admin := service.AdminService.Profile()

	response.Success(c, admin)
}

新建app/api/admin/init.go文件:

package admin

var (
	AdminApi = new(adminApi)
)

app/api/admin/init.go文件用来实例化api层用到的对象

注册路由

修改app/route/admin.go文件:

package route

import (
	"eve/app/api/admin"
	"github.com/gin-gonic/gin"
)

func genAdminRouter(rg *gin.RouterGroup) {
	rg.GET("/profile", admin.AdminApi.Profile)
}

注册完成之后重启项目,访问admin/profile接口:

➜  ~ curl http://127.0.0.1:8082/admin/profile
{"error_code":0,"data":{"id":1,"name":"管理员","password":"NOEFNIE","created_at":"2024-07-15T15:12:26+08:00","updated_at":"2024-07-15T16:01:08+08:00"},"message":"ok"}

可以看到返回了数据库中第一条记录,我们的第一个查询接口就完成了

总结

  • 封装response
  • 封装service
  • 封装接口

commit-hash: 662b02f