Skip to content

[WIP] 基于 go + goframe 实现的 apijson

License

Notifications You must be signed in to change notification settings

liushuai05/apijson-go-1

 
 

Repository files navigation

apijson-go [WIP]

基于 go + goframe 实现的 apijson

暂仍处于前期开发探索中, 请仅使用在 个人探索项目

快速体验

创建后 执行 demo/todo/todo/tests 下的 *_test.go 访问测试

功能实现

  • 单表查询、单表数组查询

  • 双表一对一关联查询、数组关联查询

  • 双表一对多关联查询、数组关联查询

  • @column, @order, @group, page, count

  • 单表单条新增

  • 单表单条修改

  • 单表单条、批量删除

  • Request表的tag校验

    • MUST
    • REFUSE
  • 分页返回total@

  • 可用的权限方案

    • get只有access中定义的才能访问
    • 非get操作则必须与request指定一致才可请求
    • 基于角色控制
  • 远程函数

  • 错误提示

  • 查询节点 自定义查询数据

查询实现

  1. 根据json构造节点树, 并检查节点结构(不符合直接返回)
  2. parse 节点树内容, 并分析关联关系(不要求json的key顺序, 因为go的原生map不支持顺序遍历)
  3. 从依赖关系中逐步fetch数据
  4. 构造响应数据

列表查询限制

  • []下只能有一个主查询表 (不依赖于列表中其他表)
  • 由于是应用内拼接结果处理1+n的问题, 当前以下写法total并不能获取到[]下单个节点的Todo[]的total值,也不能对Todo[]分页,所以勿使用于拔出萝卜带出泥的场景
{
	"[]":{
		"User":{

		},
		"Todo[]":{
			"user_id@":"/User/user_id"
		},
		"total@":"/Todo[]/total"
	}
}

权限控制方案

  • get 操作只能访问access中定义的表
  • 其他操作需和request中定义的结构一致方可访问

  • access 中定义各操作的角色权限, 角色有: 未登录用户/登录用户(OWNER/ADMIN/ 其他自定义角色)
  • 提供自定义函数 针对不同表不同角色添加 过滤条件

  • access_ext 中定义各操作的in/out字段列表, 限制各操作字段只能是此处的子集

开发指南

  1. go >= 1.18
  2. 创建mysql数据库
  3. 导入demo/todo/todo/todo.sql文件
  4. demo/todo/config.yaml.example 改成 demo/todo/config.yaml, 然后修改配置文件 config.yaml 中数据库连接
  5. 在demo/todo目录运行go run main.go
  6. 查看测试 demo/todo/todo/tests

感谢

参考链接

  1. 详细的说明文档.md
  2. 最新规范文档
  3. todo demo doc
  4. 如何实现其它语言的APIJSON?

About

[WIP] 基于 go + goframe 实现的 apijson

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%