跳到主要内容

一键生成一个 Http 接口,包括 route、api、dto

生成 Http 接口

进入模块根目录执行 cvg add api 命令。 生成语法:cvg add api <method> <path>,method 为请求方式,支持:get post put delete, path 请求路径。例如:

cvg add api get api/user/info

路径中的 api 代表路由分组,如果没有分组则用 root 代替(root/user/info),user 代表 api 所在的 go 文件,info 代表请求方法,以上面的指令为例生成如下:

1.会使用 user 作为 api 层的文件名,创建一个 user.api.go 文件,如果文件已存在则跳过此步。

2.在 user.api.go 中再创建一个 GetUserInfo() 方法。

3.在 dto 层创建 user.dto.go,如果文件已存在则跳过此步。

4.在 user.dto.go 中创建 GetUserInfoReqGetUserInfoRes 结构体。

提示

如果创建模块时添加了 swagger 支持,则生成的 api 方法会自动添加 swagger 注释。

以上操作生成好代码之后,还差一步,你需要去 routing/routting.go 中添加一条路由指向刚刚在 user.api.go 中生成的 GetUserInfo() 方法, 然后就可以访问这个接口了。不过这一步也可以自动完成,将路由生成的到 routting.go中,你需要进行如下操作:

1.在模块的 routting.go 中添加一行注释作为标记,路由会生成到这行标记的下面一行:

package routing

import (
"chord/internal/api"
"cvgo/provider/httpserver"
"cvgo/provider/httpserver/middleware"
)

func Routes(engine *httpserver.Engine) {
engine.Get("/", api.Index)

authGroup := engine.Prefix("/api").UseMiddleware(middleware.Auth())
{
// cvgflag=authGroup
authGroup.Get("/demo", api.Index)
}
}

在上面的例子中,我想要把路由生成到 authGroup 路由分组下面,所以我在这个分组下面加了一行 // cvgflag=authGroup 标记。

2.在生成接口的时候,我们原封不动的带上这个标记就 OK 了:

cvg add api get api/user/info --cvgflag=authGroup

然后就会把路由生成到标记的下一行。

重要

这里需要注意的是标记的写法。其中 cvgflag= 是固定的写法,它的值 authGroup 不是固定的,生成的路由会使用这个值作为前缀。譬如上面的例子就会生成 authGroup.Get("/user/info", api.GetUserInfo) 这么一条路由。

  • 如果标记改成 cvgflag=engine 就会生成 engine.Get("/user/info", api.GetUserInfo)
  • 如果标记改成 cvgflag=helloWorld 就会生成 helloWorld.Get("/user/info", api.GetUserInfo),这就不对了,语法报错了。

生成 api 时生成 service

Service(CURD) 章节详细介绍了如何生成 service 层方法。 这里在创建 api 的时候也可以直接生成对应的 service 层方法,并在 api 方法中生成调用 service 层方法的代码。只需要带上 --table=表名称 即可。

cvg add api curdl api/user/info --cvgflag=authGroup --table=user

以上命令生成如下 5 个 api 方法和 service 方法:

  • CreateUserInfo() Post 请求
  • UpdateUserInfo() Put 请求
  • GetUserInfo() Get 请求
  • DeleteUserInfo() Delete 请求
  • UserInfoList() Post 请求。List 通常会带有筛选参数,所以使用默认使用了 Post 请求。

同样也支持选择列表是否使用游标分页

cvg add api curdl api/user/info --cvgflag=authGroup --table=user --cursor