一键生成一个 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
中创建 GetUserInfoReq
和 GetUserInfoRes
结构体。
如果创建模块时添加了 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