GoFly 框架接口命名规则与实现方法
本文介绍 GoFly 快速开发框架新增接口及接口命名规则,通过示例说明在现有文件中添加接口和新建文件添加接口的开发方式。
接口命名规则
1. GET 请求命名
当接口以 Get 开头命名,比如 GetList、GetData、Get_list、Get 时,路由会将其注册为 get 请求。
2. DELETE 请求命名
当接口以 Del 开头命名,比如 DelArticle、DelData、Del 时,路由会将其注册为 delete 请求。
3. PUT 请求命名
当接口以 Put 开头命名,比如 PutArticle、PutData、Put 时,路由会将其注册为 put 请求。
4. GetPost 请求命名
当接口以 GetPost 开头命名,比如 GetPostArticle、GetPostData、GetPost 时,路由会将其注册为两个请求方式路径(GET 和 POST)。这种命名方式常用于微信公众号接收服务接口,验证有效时为 GET 请求,推送数据时为 POST 请求。
5. 默认是 Post 请求
除去以上 Get、Del、Put、GetPost 开头命名方式以外,系统将默认注册成 Post 请求方式。例如:Save、Status、DoMore、OnLink、Update 等都是 Post 请求。
6. 特别说明
由于 Go 语言规则,为了让其他 package 调用方法,首字母必须大写。然而接口为了满足驼峰命名规则,添加到路由上的地址时将命名的方法首字母改为小写。例如 GetList 变成 getList、DelArticle 变成 delArticle、PutArticle 变成 putArticle、GetPostArticle 变成 getPostArticle、Save 变成 save 等。
已有文件添加接口
在 app\business\article\cate.go 下存在 cate.go 文件,在原有文件里添加 Save 来保存添加文章分类数据,代码如下:
package article
import (
"gofly/utils/gf"
)
type Cate struct{}
// 文章分类
func init() {
fpath := Cate{}
gf.Register(&fpath, fpath)
}
// 保存数据
func (api *Cate) Save(c *gf.GinCtx) {
param, _ := gf.RequestParam(c)
data, err := gf.Model("gf_article_cate").Save(param)
if err != nil {
gf.Failed().SetMsg("保存失败").SetData(err).Resp(c)
} else {
gf.Success().SetMsg("保存成功").SetData(data).Resp(c)
}
}
这样就成功添加了 save 接口,路由自动加载,无需手动配置路由,避免手动添加产生路由冲突。

新增 go 文件添加接口
- 在 app/business/article 新建文件 comment.go。新增文件中添加 func 引入路由,包名(package)为 article,并用文件名 comment 作为路由名,代码如下:
package article
// 文章评论
import (
"gofly/utils/gf"
)
// 路由标识要与文件名相同
type Comment struct{}
func init() {
fpath := Comment{}
gf.Register(&fpath, fpath)
}
其中 type Comment struct{} 和 fpath := Comment{} 中的 Comment 就是评论路由文件名,后面新增其他文件改成对应文件名称。
- 添加接口,添加获取评论列表和保存评论两个接口,分别命名为:GetList 和 Save,代码如下:
package article
// 文章评论
import (
"gofly/utils/gf"
)
// 路由标识要与文件名相同
type Comment struct{}
func init() {
fpath := Comment{}
gf.Register(&fpath, fpath)
}
// 获取数据列表
func (api *Comment) GetList(c *gf.GinCtx) {
param, _ := gf.RequestParam(c)
list, err := gf.Model("gf_article_comment").Where("article_id", param["id"]).Fields("id,name").Select()
if err != nil {
gf.Failed().SetMsg("错误").SetData(err).Resp(c)
} else {
gf.Success().SetMsg("请求成功").SetData(list).Resp(c)
}
}
// 保存数据
func (api *Comment) Save(c *gf.GinCtx) {
param, _ := gf.RequestParam(c)
data, err := gf.Model("gf_article_comment").Save(param)
if err != nil {
gf.Failed().SetMsg("保存失败").SetData(err).Resp(c)
} else {
gf.Success().SetMsg("保存成功").SetData(data).Resp(c)
}
}
注意:函数前加 (api Comment),其中 Comment 是 type Comment struct{} 中 Comment,后面新增其他文件改成对应文件名。
到此新增文件及接口完成,在终端就看到新增路由了。

框架自动把你新增接口加到路由中,加上热编译,这样就可以边开发边测试,减少手动添加路由错误导致路由与实际接口文件路径对不上,后期找代码修改找不位置。自动加载就可以避免这些错误提高代码维护性,可读性。
框架目录结构
├── app # 应用目录
│ ├── admin # 后台管理应用模块(安装 saas 时存在)
│ ├── business # 业务端应用模块
│ ├── common # 公共应用模块
│ └── controller.go # 应用控制器
├── devsource # 开发静态资源 (安装界面)
├── resource # 静态资源及配置文件 - 发布应用带上
├── runtime # 运行时文件
├── tmp # 开发是使用 fresh 热编译 产生临时文件
├── utils # 框架核心代码及工具包
├── views # 前端 - 后台管理系统(Vue + ts)代码
├── go.mod # 依赖包管理工具
├── go.sum
├── main.go # main 函数
├── runner.conf #fresh 热编译配置文件
└── README.md # 项目介绍

