GoFly 框架接口命名规则与实现方法
GoFly 框架采用约定式路由自动注册接口,支持 GET、DELETE、PUT、GetPost 及默认 POST 请求方式。开发者可在现有业务文件中添加函数,或新建 Go 文件定义 Struct 并通过 init 函数注册路由。框架具备热编译能力,可动态加载接口,降低维护成本。

GoFly 框架采用约定式路由自动注册接口,支持 GET、DELETE、PUT、GetPost 及默认 POST 请求方式。开发者可在现有业务文件中添加函数,或新建 Go 文件定义 Struct 并通过 init 函数注册路由。框架具备热编译能力,可动态加载接口,降低维护成本。

本文介绍 GoFly 快速开发框架新增接口及接口命名规则,通过示例说明在现有文件中添加接口和新建文件添加接口的开发方式。
当接口以 Get 开头命名,比如 GetList、GetData、Get_list、Get 时,路由会将其注册为 get 请求。
当接口以 Del 开头命名,比如 DelArticle、DelData、Del 时,路由会将其注册为 delete 请求。
当接口以 Put 开头命名,比如 PutArticle、PutData、Put 时,路由会将其注册为 put 请求。
当接口以 GetPost 开头命名,比如 GetPostArticle、GetPostData、GetPost 时,路由会将其注册为两个请求方式路径(GET 和 POST)。这种命名方式常用于微信公众号接收服务接口,验证有效时为 GET 请求,推送数据时为 POST 请求。
除去以上 Get、Del、Put、GetPost 开头命名方式以外,系统将默认注册成 Post 请求方式。例如:Save、Status、DoMore、OnLink、Update 等都是 Post 请求。
由于 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 接口,路由自动加载,无需手动配置路由,避免手动添加产生路由冲突。

package article
// 文章评论
import (
"gofly/utils/gf"
)
// 路由标识要与文件名相同
type Comment struct{}
func init() {
fpath := Comment{}
gf.Register(&fpath, fpath)
}
其中 type Comment struct{} 和 fpath := Comment{} 中的 Comment 就是评论路由文件名,后面新增其他文件改成对应文件名称。
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 # 项目介绍

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online