Go doudou开发单体RESTful服务快速上手教程
什么是Go doudou
Go doudou是一个基于Go语言的Web框架,它依赖于Swagger和Gin,可以快速开发RESTful API。
安装Go doudou
首先需要在本地安装Go语言环境,并将GOPATH配置正确。然后,可以通过以下命令安装Go doudou:
go get github.com/unionj-cloud/go-doudou
创建一个单体RESTful服务
- 创建一个空的Go模块项目:
mkdir go-doudou-demo
go mod init go-doudou-demo
- 安装依赖:
go get github.com/gin-gonic/gin
go get github.com/swaggo/files
go get github.com/swaggo/gin-swagger
- 创建main.go文件并编写代码:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/swaggo/files"
_ "github.com/swaggo/gin-swagger"
"github.com/unionj-cloud/go-doudou/svc"
"go-doudou-demo/controller"
)
func main() {
svc.Run(controller.NewUserController(), func(r *gin.Engine) {
fmt.Println("Welcome to My User API Engine")
})
}
上述代码中,我们导入了Gin和Swagger的依赖,同时导入了go-doudou的svc和我们自己的controller模块。在main函数中,我们创建了一个新的UserController实例,并使用svc.Run()函数将路由和中间件打包到Gin引擎中运行。
- 创建controller文件并编写代码:
package controller
import (
"github.com/gin-gonic/gin"
"github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles"
"github.com/unionj-cloud/go-doudou/ddl"
"github.com/unionj-cloud/go-doudou/pathutils"
"go-doudou-demo/model"
)
type userControllerImpl struct {
ddl.BaseController
}
func NewUserController() *userControllerImpl {
return &userControllerImpl{}
}
func (u *userControllerImpl) Query(params *model.UserModel) (ret []model.UserModel, msg string, code int) {
// 查询用户
}
func (u *userControllerImpl) Detail(id int) (ret model.UserModel, msg string, code int) {
// 查询id指定的用户
}
func (u *userControllerImpl) Save(params *model.UserModel) (ret model.UserModel, msg string, code int) {
// 新增或修改用户
}
func (u *userControllerImpl) Delete(id int) (msg string, code int) {
// 删除用户
}
func (u *userControllerImpl) Swagger(c *gin.Context) {
// 集成Swagger API文档
dir, _ := pathutils.Abs("./")
url := ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", 8080))
c.Redirect(302, url+"?url="+dir+"/swagger/doc.json")
}
// 自动生成Swagger并渲染到HTML文件,使用前先安装swag工具
// `go get -u github.com/swaggo/swag/cmd/swag`
// 然后进入controller目录执行命令:swag init
// 就会在controller目录生成docs子目录,里面存放着Swagger API文档相关的文件
// docs目录会被纳入到gitignore,不会污染代码版本库
//
// 访问http://localhost:8080/swagger/index.html看到自动生成的Swagger API文档
// 注意:需要先执行本示例,让RESTful API服务启动,才能访问Swagger API文档
//
// @title go-doudou User API
// @version v1
// @description This is an API server powering go-doudou User API
// @host localhost:8080
// @BasePath /api/v1
func (u *userControllerImpl) Docs() gin.HandlerFunc {
return swaggerFiles.Handler
}
上述代码中,我们定义了一个userControllerImpl结构体,它继承了go-doudou的ddl.BaseController结构体,从而获得了一些基础的RESTful API方法。在NewUserController()函数中,我们实例化了一个userControllerImpl对象并返回。我们还分别实现了Query()、Detail()、Save()、Delete()和Swagger()方法,它们分别对应查询用户、查询id指定的用户、新增或修改用户、删除用户、和Swagger API文档。
- 创建model文件并编写代码:
package model
type UserModel struct {
ID int `json:"id,string,omitempty"`
Username string `json:"username,omitempty"`
}
上述代码中,我们定义了一个UserModel结构体,它包含了用户ID和用户名两个字段。
- 启动服务:
go run main.go
至此,一个简单的单体RESTful服务就完成了。我们可以在本地运行该服务,使用Postman等RESTful客户端工具访问http://localhost:8080/api/v1/users等API接口。
示例说明
示例1:查询用户
func main() {
//...
router.GET("/api/v1/users", func(c *gin.Context) {
username := c.Query("username")
params := &model.UserModel{Username: username}
ret, msg, code := controller.User().Query(params)
c.JSON(http.StatusOK, gin.H{
"data": ret,
"msg": msg,
"code": code,
})
})
//...
}
上述代码中,我们在main函数中定义了一个HTTP GET方法,用于查询用户信息。该方法接受username作为请求参数,然后根据参数构造UserModel对象并调用controller.User().Query()方法进行查询。最后返回查询结果。
示例2:自动生成Swagger文档
// 自动生成Swagger并渲染到HTML文件
router.GET("/", controller.User().Docs())
上述代码中,我们在路由中添加了一个GET方法,用于生成Swagger API文档。该方法调用了userControllerImpl结构体中的Docs()方法,并返回了Swagger API文档的HTML文件。我们只需访问http://localhost:8080/就能看到自动生成的Swagger API文档。需要注意的是,要先启动RESTful服务才能访问Swagger API文档。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:go doudou开发单体RESTful服务快速上手教程 - Python技术站