当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 0 Fork 0

kirileec/kapi
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
WTFPL

kapi

介绍

基于gin的扩展, 支持 //@POST 式注释路由, 解析结构体并生成swagger文档

注意: 还有很多问题, 不要在生产环境使用, 会很难受的

特性

  1. 使用注释路由
  2. 更简单的swagger文档生成方式

注意

由于使用了go 1.16新增的embed特性, 因此只能在1.16以上版本使用

快速开始

  1. https://gitee.com/kirile/k-cli 安装cli
  2. 安装后执行go mod init {module_name} 然后 k init, 自动创建 config.toml build.toml main.go 等
   k := kapi.New(func(option *kapi.Option) {
	   // 也可以在config.toml中进行修改, 这里写的话将覆盖配置文件中的设置
        option.SetNeedDoc(true) //是否需要生成swagger文档
        option.SetDocName("系统")
        option.SetDocDescription("系统api")
        option.SetIsDebug(true)
        option.SetPort(3080)
        option.SetDocVersion("")
        //option.SetApiBasePath("/")
       //option.SetDocDomain("http://example.com") // 使可以支持在线上用域名访问文档, 本地开发时默认为http://局域网ip+端口/swagger/
        option.SetRedirectToDocWhenAccessRoot(true) //访问 / 时跳转到文档
        option.SetStaticDirs("html", "h5")  //可以设置多个static目录
    })
    // 注册路由
    k.RegisterRouter(new(controller.BannerController),
        new(controller.AssetController),
        new(controller.CategoryController),
        new(controller.UserController),
        new(controller.SysConfigController))
	k.Run() //运行
  1. 创建 controller.HelloController , 并实现一个路由方法
// World1 World1
// 一个Context参数的方法
// @GET /hello/list
func (h *HelloController) World1(c *kapi.Context) {
	c.SuccessExit()
}

其他路由和swagger文档相关请到example中查看

  1. 运行 go run main.go 或者 k run

具体可查看example文件夹

支持一些奇怪的特性 🐶

  • //@TAG 分类 在struct上增加, 可以指定在swagger文档中的标签, 默认为struct的名字, 目前不加@TAG注释, 则默认使用struct自己的注释
  • 一个方法List上如果有这样的注释 //List 获取列表 那么获取列表 将作为一个路由的Summary显示在swagger文档里
  • //@AUTH Authorization 在struct上增加, 可以为该struct的每个方法的请求参数加上一个Header请求头, 其中 Authorization 可以不要, 默认是 Authorization. 这个需要配合 BaseAuthController来对各个方法进行鉴权
  • //@ROUTE /banner 为该struct下的方法增加一个路由地址的前缀, 会拼接起来. 例如 struct上有//@ROUTE /banner, 其下方的方法//@GET /list 则实际的路由为 GET /banner/list
  • 请求的参数可以使用类似继承的方式来声明参数.
type PageSize struct {
    Page int `query:"page" default:"1"`
    Size int `query:"size" default:"15"`
}

func (p *PageSize) GetLimit() (int, int) {
    return p.Size, (p.Page - 1) * p.Size
}
type GetBannerListReq struct {
	PageSize
}
  • 请求参数的struct支持多种tag, query path header json defaultbinding, 这个是基于gin的bind实现的, 由于不同类型的参数混在一起, 因此这里可能需要优化性能

  • kapi.Context包含一些Exit方法, 可以不用return直接跳出流程, 这是通过panic实现的, 当然如果方法使用了返回值, 就不能用这个方式了

  • 实现了 kapi.Interceptor 的中间件, 可以存储一些上下文数据, 比如 当前用户 CurrentUser *model.User, 无需使用Context的相关方法

  • kapi.RegisterFuncGetResult 可以修改默认的返回json的结构, 为自带的 *Exit系方法自定义返回

部署

k build./bin/版本/系统_架构/目录下的文件即为全部, 如果是自行编译, 则需要同时拷贝swagger.json和gen.gob以及config.toml.

当前主分支, 在 k build -g 后会覆盖 swagger.jsongen.gob ,config.toml则仅当输出目录下不存在config.toml时才会拷贝

TODO

  • 修改为func方式配置kapi
  • controller 增加 //@ROUTE 用于标记整个controller的path
  • 增加@AUTH标记支持, 用于设置传输token的header名, 可以放在controller上
  • 增加静态目录配置, Context增加 SaveFile
  • 在issue中进行任务处理
  • 加入二维数组支持
  • 请求参数可以使用类似继承的方式来重用结构
  • 配置文件配置服务 (需要配合 k init)
  • 增加命令行参数用于仅生成路由和文档, 实现编译前无需运行即可更新文档
  • 优化ast包解析, 减少循环 (目前通过增加map来缓存需要的数据, 重复的对象不会多次遍历ast树)
  • 加入枚举支持
  • k cli 加入项目判断, 使其可用于其他纯go项目的编译

感谢

https://github.com/xxjwxc/ginrpc 大部分代码参考该项目, 例如代码解析\文档生成, 由于我需要一个方便单纯写写接口, 快速生成文档, 该项目无法满足, 而且也很难在基础上进行PR(改动较大, 并可能无法适应比较大众化的框架需求), 才有了魔改一顿的想法

k

介绍

这是本框架提供的命令行工具, 代码基本来自 github.com/gogf/gf-cli, 目前包含 安装、运行、编译三个部分, 后续会加入其它功能.

使用kapi进行开发, 建议同时使用k-cli, 由于kapi的swagger文档以及路由注册需要在开发环境运行后才会生成, 使用go自带的编译可能无法正常使用文档和注册路由

目前移动到 https://gitee.com/kirile/k-cli 仓库

app

介绍

app包, 包装了xorm mysql 和 redis的初始化连接以及一些简单的封装方法. 还包括了一个toml读取的辅助. 不是必要的, 你可以用你喜欢的库进行数据库操作

目前移动到https://gitee.com/kirile/kapp

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO.

简介

基于gin的扩展, 支持 //@POST 式注释路由, 解析结构体并生成swagger文档 展开 收起
Go 等 3 种语言
WTFPL
取消

发行版

暂无发行版

贡献者 (2)

全部

近期动态

接近3年前推送了新的提交到 master 分支,bb4af33...bacb620
接近3年前推送了新的 v0.2.9 标签
接近3年前推送了新的 v0.2.8 标签
3年前推送了新的提交到 master 分支,0815e34...bb4af33
3年前推送了新的提交到 master 分支,242e1f5...0815e34
加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/kirile/kapi.git
git@gitee.com:kirile/kapi.git
kirile
kapi
kapi
master

搜索帮助