APIJSON

🏆 实时 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构 🏆 Real-Time coding-free, powerful and secure ORM 🚀 providing APIs and Docs without coding by Backend, and the returned JSON of API can be customized by Frontend(Client) users

OTHER License

Stars
17.2K
Committers
77

Bot releases are hidden (Show)

功能

条件组合新增支持任意逻辑表达式 @combine:"a | (b & !(c | d))";
image

JOIN 新增支持多个字段关联及引用赋值;
image

JOIN ON 新增支持带非引用赋值关联的普通条件;
image

JOIN ON 新增支持 {}, <>, $, ~, !, >, <, >=, <= 等多种关联方式;
image

& INNER JOIN 新增支持单独设置 JOIN 语句中的字段、条件、分组、聚合、排序等;
image

* CROSS JOIN 允许没有 JOIN ON 引用赋值关联条件;
模糊搜索 key$:value 新增支持 key 中定制占位符 %, _ 与 value 的拼接方式;
包含选项范围新增支持传路径,例如 key<>:{ path: "$", value:82001 };

聚合函数 @having 支持复杂条件组合,且新增 @having& 简化 AND 连接的写法;
image

对 @having:"表达式" 和 key{}:"表达式" 新增支持单引号、反引号、各种关键词等;
新增支持 @having:"match(arg0..)AGAINST(..)%2=1" 全文检索等函数后带数学表达式;
image

对 key{}:">0;length(key)<=5" 新增支持部分为 RAW SQL;
新增支持 NULL 值 @null:"tag";
新增支持类型转换 @cast:"date:DATE";
新增数组关键词 compat 解决对聚合函数字段通过 query:2 分页查总数返回值错误;
状态信息 msg 新增提问注意事项;

权限控制:分拆对角色的校验的代码为多个方法,方便灵活重写部分代码;
完善对 id, id{}, userId, userId{} 的条件强制前置 AND 处理;
预估容量新增对 HAVING 聚合函数的处理;
拼错单词 globle 纠正为 global;
去除不必要的 synchonized;
原来的 combine 重命名为 combineMap,combineExpression 重命名为 combine;

升级自身, fastjson 版本分别为 5.0.0, 1.2.79;

使用登记

新增 珠海采筑电子商务有限公司(房地产巨头万科发起),多个项目使用,感谢 @fanpocha 的登记 #367;
image

新增 乐拼用车 的 Logo,感谢 @VamChao 的登记 #187#issuecomment-1009633459

image

文档

新增功能演示及说明的 GIF 图;
image

image

兼容性

AbastractSQLConfig 原来的 combine 重命名为 combineMap,combineExpression 重命名为 combine,如果业务后端项目直接调用或重写了相关方法,需要对应修改;
https://github.com/Tencent/APIJSON/commit/b248c698887728bd826febd77c4404dd1faecf06

拼错单词 globle 纠正为 global,涉及 Parser 及 AbstractParser 中 getGlobleXXX, setGlobleXXX 14 个方法,如果业务后端项目直接调用或重写了相关方法,需要对应修改;
https://github.com/Tencent/APIJSON/commit/d7c311554042620a91faf8f4a63ebcf9a2fd0be2

聚合函数 "@having":"SQL表达式1;SQL表达式2" 默认由 AND 连接改为 OR 连接,改用 "@having&":"SQL表达式1;SQL表达式2" 实现 AND 连接,如果前端(客户端)已经在线上生产环境用了旧方式,后端可以修改 AbstractSQLConfig.IS_HAVING_DEFAULT_AND = true 来兼容
https://github.com/Tencent/APIJSON/commit/9776408d63bc1d768cdd97d910f6b2243b2a94a8

聚合函数 "@having":"toId>0" 这种不包含 SQL 函数的表达式,默认不再支持,可改为 "@having":"(toId)>0",如果前端(客户端)已经在线上生产环境用了旧方式,后端可以修改 AbstractSQLConfig.IS_HAVING_ALLOW_NOT_FUNCTION = true 来兼容
https://github.com/Tencent/APIJSON/commit/9776408d63bc1d768cdd97d910f6b2243b2a94a8

腾讯工程师公开称赞

腾讯 IEG 数据产品开发组负责人 xinlin:
”腾讯的 APIJSON 开源方案,它可以做到零代码生成接口和文档,并且整个生成过程是自动化。

当企业有元数据的时候,马上就可以获得接口“

引用来源:腾讯游戏业务竟然是这样利用低代码平台的 | ArchSummit 全球架构师峰会 2021(深圳)
image

腾讯科技 后台开发高级工程师 雷大锤:
“可以抽出时间来看apijson了,这个可以为T10做准备,也是业界很火的东西,可以提升个人影响力!”

引用来源:腾讯人工作日常—在沟通和扯皮中度过的一周
image

APIJSON - 零代码、全功能、强安全 ORM 库

腾讯开源前十、内外五个奖项,后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构
http://apijson.cn
image
image

APIJSON - 新增支持 Hive 及 Hadoop;提升单表和 JOIN 结果集解析性能

Published by TommyLemon over 2 years ago

新增支持 Hive 及 Hadoop,感谢 @chenyanlann 的贡献 #353 #356 以及生态项目 APIJSONBoot_Hive,大家可以点 Star 支持下~
调试时间字段新增 parse 和 sql 两个时长,例如 "time:start|duration|end|parse|sql": "1641751048573|145|1641751048718|50|95";

提升 JOIN 结果集解析性能,减少 ArrayList 反复扩容的性能开销;

新增登记 腾讯音乐、传音、社宝科技、华能贵诚信托、投投科技、圆通、乐拼科技 等公司名及链接。

APIJSON - 新增自助调试说明;解决 JOIN bug 并显著提升性能

Published by TommyLemon almost 3 years ago

功能特性

报错信息新增搜索链接及带环境信息的提交问题模板,帮助用户自行解决及提交问题;

解决 LEFT/RIGHT JOIN 副表关联主表外键的字段取别名导致 SQL 报错 #346;
解决 SQL JOIN 副表包含 SQL 函数时没有返回 SQL 函数的执行结果以及未用上 SQL 缓存导致冗余 SQL 查询 #341;
解决 SQL JOIN 副表除了引用赋值键值对还有 id/id{}/userId/userId{} 键值对时不能命中缓存,导致 一对多、多对多副表数据重复 以及 一对一、多对一 查询性能问题 #341;
解决某个字段值为 null 导致中断后续正常返回值;
解决 AbstractVerifier.verifyAccess 只允许 Number 类型的 id,并优化变量名;

优化 SQL JOIN 副表解析结果集 ResultSet 的性能(减少同副表字段的重复逻辑),实测提升 6%-21% #354;
删除多余且未实际用上的的 Response.java;

周边生态

新增基于 Hyperf&Swoole 的 PHP 协程版 APIJSON 叫 hyperf-APIJSON,感谢 @kvnZero 的贡献;
新增接入 IBM DB2 的 Demo 叫 apijson-db2,感谢 @andream7 的贡献;
新增接入 ClickHouse Demo 叫 APIJSONDemo,感谢 @qiujunlin 的贡献;
新增使用 Gradle 依赖构建的 APIJSON Java 模版 apijson_template,感谢 @abliger 的贡献;
新增适配 Oracle 事务的 api-json-demo,感谢 @hxdwd 的贡献;

创作不易,右上角点 ⭐Star 支持下项目作者们吧~

相关推荐

新增文章 使用APIJSON写低代码Crud接口,感谢博主的贡献;

新增 7 篇代码分析相关系列文章,基本都是 27 篇中的开篇,感谢 3 个博主的贡献:
APIJSON(一:综述)
APIJSON 代码分析(三:demo主体代码)
APIJSON 代码分析(二)AbstractParser类(解析器)
APIJSON 代码分析(四:AbstractObjectParser源码阅读)
APIJSON 代码分析 AbstractSQLConfig 第二篇
APIJSON 代码分析(六)APIJSON—Verifier检查类
APIJSON 代码分析(四)AbstractSQLExecutor—SQL执行器

可以点赞/收藏支持下文章博主们哦~

其它

完善图文教程、路线规划等;

新增支持 ClickHouse,感谢 @chenyanlann、@qiujunlin 的贡献 #307 #309;
新增支持 PostgreSQL, Oracle 等数据库的窗口函数 OVER(PARTITION BY .. ORDER BY ..),感谢 @qiujunlin 的贡献 #305;
重构 enum RequestRole 为 String 方便用户自定义扩展
新增对 PUT 默认支持条件,不传 @combine 也行,感谢 @chenyanlann 的贡献 #307;
修改 @column 中的解析代码,使之支持带 SQL 关键词、单引号 'value' 等字符串,感谢 @qiujunlin 的贡献 #305;
新增支持 @column:"`key`" 反引号指定字段名以及 @column:"cast(`date` AS TIME)" 这种在函数内 `key` 与关键词等组合的格式;
新增支持 CASE WHEN,例如 (CASE sex WHEN 0 THEN '男' WHEN 1 THEN '女' ELSE '其它' END);

解决表对象中的子表对象数据总是一样以及在 Table[]:{ Table:{ ChildTable:{} } } 情况下只有首个 Table 里返回了 ChildTable;
解决聚合与分组等统计语句不支持 HAVING 等,感谢 @LiXinnnnnn 的贡献 #311;
解决 PUT "balance+": 1 未加到 update set 导致报错;
解决 PUT "key<>":[] 等被错误地转成了 SQL 条件 key = '[]' 等,感谢 @chenyanlann 的贡献 #307;
解决 PUT Table[] 请求中在某些情况下传远程函数无效的 bug,感谢 @WaizLee 的贡献 #324;
解决对 Oracle 的子查询 SELECT 语法错误的问题,感谢 @qiujunlin 的贡献 #309;
解决对 PostgreSQL 重复设置事务等级的 bug,感谢 @bullhe4d 的贡献 #316;

优化 Table[]:{ Table:{} } 这种单表数组的查询性能,实测提升 19%-27% #315;
将隐藏字段功能单独抽取方法 isHideColumn,方便重写来自定义;
抽取根据 tag 自动包装请求结构的方法为 wrapRequest,方便实现 简单形式的接口
AbstractSQLConfig 中 getValue 和 preparedValueList 修饰符改为 protected 方便子类重写来实现兼容 Oracle DATETIME,TIMESTAMP 等日期时间类型,例如对应 POST/PUT 的 to_date(?,'yyyy-mm-dd hh24:mi:ss');
Parser 移除未用上且没必要的方法 parseCorrectResponse;
删除部分已废弃的方法;

通用文档 新增本身说明、3.2 功能符 全局关键词和"@datasource":"DRUID" 跨数据源、3.1 操作方法 简单接口相关文档;
Pull Request 新增小改文档或代码 的简要步骤;
更新 详细的说明文档.md,修复一些错误或过时的内容;
完善 保持与 APIJSON 仓库的同步 的可视化操作步骤;
解决中英文首页文档部分用户 Logo 不显示,感谢 @sy-records 的贡献 #325;

生态周边项目新增 apijson-practice,感谢 BAT 技术专家 vcoolwind 的贡献;
增加一个示例项目和一篇文章,感谢 @jerrylususu 的贡献 #291;
新增 apijson-go 的链接,感谢作者 @j2go 的贡献 #apijson-go
新增包括 1 个腾讯工程师在内的 8 个贡献者,感谢大家的贡献;
主项目贡献者新增 1 人,生态项目贡献者新增 7 人,感谢大家的贡献;
使用登记新增圆通公司(场景:大数据应用APP内部接口);

兼容性:

重构 enum RequestRole 为 String 方便用户自定义扩展,
移除了原有的 apijson.RequestRole.java
改为了现在的 apijson.orm.AbstractVerifier 中的 String 常量

	/**未登录,不明身份的用户
	 */
	public static final String UNKNOWN = "UNKNOWN";

	/**已登录的用户
	 */
	public static final String LOGIN = "LOGIN";

	/**联系人,必须已登录
	 */
	public static final String CONTACT = "CONTACT";

	/**圈子成员(CONTACT + OWNER),必须已登录
	 */
	public static final String CIRCLE = "CIRCLE";

	/**拥有者,必须已登录
	 */
	public static final String OWNER = "OWNER";

	/**管理员,必须已登录
	 */
	public static final String ADMIN = "ADMIN";

如果你的业务项目中用到了 RequestRole 相关代码,则:

1.所有 apijson.RequestRole.角色名 全局替换为 apijson.orm.AbstractVerifier.角色名;
2.所有类型为 RequestRole 的地方全局替换为 String;
3.所有 role == RequestRole.角色名 全局替换为 AbstractVerifier.角色名.equals(role);

腾讯 CSIG 某项目性能测试结果

MySQL 5.7 共 1.9KW 记录的大表,统计 CRUL 10-20M/s 网速从发起请求到接收完回包的总时长,具体见 https://github.com/Tencent/APIJSON/issues/315#issuecomment-975603059

数量级 4.7.0(5次取平均值) 4.8.0(5次取平均值) 是否正常回包 where条件 性能提升
10W 1.739s 1.159s 50%。即((1/1.159-1/1.739)/(1/1.739))*100%
20W 3.518s 2.676s 31.5%
50W 9.257s 6.952s 33.2%
80W 16.236s 10.697s -Xmx=3192M时无法正常回包,OOM错误,调大-Xmx参数后ok。 51.8%
100W 19.748s 14.466s -Xmx=3192M时无法正常回包,OOM错误,调大-Xmx参数后ok 36.5%
10W 1.928s 1.392s "x_xid{}":[xxxx36,xxxx38],覆盖数据超过100W数据。 38.5%
20W 4.149s 2.852s "x_xid{}":[xxxx36,xxxx38] 45.5%
50W 10.652s 7.231s "x_xid{}":[xxxx36,xxxx38] 47.3%
80W 16.975s 12.465s 调整了-Xmx后正常回包 "x_xid{}":[xxxx36,xxxx38] 36.2%
100W 20.632s 16.481s 调整了-Xmx后正常回包 "x_xid{}":[xxxx36,xxxx38] 25.2%
APIJSON - 解决远程函数拿不到当前对象;解决 UNIQUE 防重校验失效

Published by TommyLemon about 3 years ago

解决远程函数拿不到有效的当前对象,导致校验参数容易放行等问题 #281 ;
解决操作符 UNIQUE 校验不允许重复失效 #282 ;

优化文档,贡献者名单新增圆通工程师等 3 人,感谢贡献 #278 #279 #280 ;
删除多余的文件;
升级版本号为 4.7.2;

APIJSON - 解决 @raw 对应值包含 date_format 等特殊文本时查询报错

Published by TommyLemon about 3 years ago

解决 @raw 对应值包含 date_format 等特殊文本时查询报错,感谢圆通工程师反馈 bug 及贡献源码 #278 ;
D7F11B88E79952A8929003A1E60FB090
7A2B158EF0CD41F1136A4970D1F19876

新增数据源关键词 @datasource,可由业务完全自定义,感谢腾讯同事 fineday009 #251 ;
去除 JSONResponse 中 KEY_CODE 等常量的 final 关键字,方便业务重新定义 ok、code、msg 字段名,感谢 gujiachun #227 ;

解决 > RIGHT JOIN, ^ SIDE JOIN, ! ANTI JOIN, ) FOREIGN JOIN 等不返回副表数据;
解决 | FULL JOIN 返回的副表数据部分是错的;
分页:解决 query=2 不兼容 主表 @column:"fun()" 这种包含 SQL 函数的写法;
SQL 函数:获取右括号 ) 的位置从 indexOf 改为 lastIndexOf,解决多个右括号解析问题;
解决 JOIN 副表有 引用赋值 外的条件时因为缓存 SQL WHERE 中条件顺序不一致导致多余查询;
解决查询计划 @explain 不支持增删改方法;在分页详情 info 内返回查询计划 @explain;
更新为最新的手机号正则表达式匹配,感谢 Rkyzzy #241 ;

log print current time, thanks to Tencent colleague jun0315 #250 ;
优化 system.err.printlin 输出,感谢 kxlv2000 #238 ;
对 JSONResponse.java中 的 formatHyphen 方法的优化,感谢 403f #217 ;
使用 entrySet 迭代器替代 keySet 迭代器提高效率,感谢 Rkyzzy #224 ;
Using Arrays.toString() to deal with methods array, thanks to gdjs2 #221 ;
将 StringUtil.java 类中三处字符串直接拼接优化为使用 StringBuilder 拼接,感谢 Rkyzzy #222 ;
Format the code & Replace the Long(String) by Long.valueOf(String), thanks to gdjs2 #225 ;

Update README-English.md, thanks to Tencent colleague Wscats #235 ;
修改 Document 文档 OUTER JOIN 拼写错误,感谢腾讯同事 caohao-php #233 ;

APIJSON - 优化状态信息和日志打印

Published by TommyLemon over 3 years ago

AbstractSQLExecutor 优化增删改未成功也未抛异常的 code 和 msg;
AbstractParser 优化请求及响应的日志打印;
AbstractSQLConfig 优化 key$ 的格式校验;
错误码只在最外层返回,逻辑统一,感谢腾讯 CSIG 的同事 fineday009 贡献代码 [#202];

文档:

生态项目 新增 APIJSON 的字段插件,支持 字段名映射 和 !key 反选字段;
贡献者列表 新增 腾讯后台工程师 fineday009;

APIJSON - SQL 函数白名单新增 length;key$ 模糊搜索不允许连续的 %

Published by TommyLemon over 3 years ago

SQL 函数白名单新增 length;
key$ 模糊搜索不允许连续的 %;
AbstractSQLExecutor 新增 getKey 方法;
新增待实现关键词 @null;
删除 Structure.java, Operation 中 NECESSARY, DISALLOW 等已废弃的部分代码;

APIJSON - 【安全】加强对 JOIN 和 SQL 函数的防护

Published by TommyLemon over 3 years ago

调用 SQL 函数只允许用后端已配置的,避免 sleep(10) 这种命令函数导致数据库异常或耗时很久;
加强对 JOIN 相关键值对的校验,避免通过特殊符号进行 SQL 注入;
加强对命名的校验,避免用纯数字等非字母开头的表名/字段名导致 SQLException;

新增 整合 APIJSON 和微服务框架 light-4j 的 Demo(同时接入了 Redis);
新增用户发的文章 全国行政区划数据抓取与处理
删除已废弃的 Test 类的相关代码;

APIJSON - 解决对 Response 校验只对最外层生效;移除已废弃的 Test 类

Published by TommyLemon over 3 years ago

解决对 Response 校验只对最外层生效;
移除已废弃的 StructureUtil 和 Test 的相关代码;

APIJSON - 【性能】大幅提升数组内主表查询性能

Published by TommyLemon over 3 years ago

解决 bug

解决 "toId%": "0,10" 等连续范围报错 value 类型不合法;
解决 "id{}@": "[]/Moment/praiseUserIdList" 等引用赋值的值有时类型为 List 时报错 ArrayList cannot be cast to JSONArray;
解决 "key<>": "a" 这种包含字符串的格式报错 Data truncation: Invalid JSON text,原来必须里面再用 "" 包装一次,JSON 中还得转义,现在简化成直接写即可;

增强安全

对 MySQL 的 DELETE 和 UPDATE 强制加 LIMIT,限制一次操作记录的数量;

提升性能

通过缓存及复用数组主表 ObjectParser 来大幅提升大量数据的数组内主表的查询性能;
通过减少不必要的 newSQLConfig 及 getSQL 等步骤来大幅提升大量数据的数组内主表的查询性能;

对比 4.5.2 在 Log.DEBUG = true(开启日志)的情况下

TestRecord[] 耗时降低至原来 24%,性能提升 300% 至原来 4 倍;
Moment[] 耗时降低至原来 33%,性能提升 200% 至原来 3 倍;
朋友圈列表耗时降低至原来 77%,性能提升 23% 至原来 1.2 倍。
其中每个数组都按 100 条来测试,如果每页数量更大或每项数据量更大,则提升会更加明显。

腾讯 CSIG 某项目线上生产环境实测 Log.DEBUG = false 时 2.3KW 大表(由两张等量拆分表组成)查询

LIMIT 100 相比原来从 2s 降到 164ms 提升 11 倍;
LIMIT 1000 相比原来从 30s 降到 197ms 提升 151 倍;
LIMIT 10000(一次 /get 到 1W 条记录) 整个网络请求耗时仅 633ms;
LIMIT 1000000(带条件一次 /get 到 12W+ 条记录共 72.5M 数据,CURL 下载速度 20M/s) 整个网络请求仅 5.624s,实际服务执行仅 2s。

兼容性

这个版本重构了几个方法:

1.Parser.createObjectParser
Parser createObjectParser(JSONObject request, String parentPath, String name, SQLConfig arrayConfig, boolean isSubquery) throws Exception;

删除 1 个参数 String name 新增 2 个参数 boolean isTable, boolean isArrayMainTable 后为

Parser createObjectParser(JSONObject request, String parentPath, SQLConfig arrayConfig, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception;
2.AbstractParser.createObjectParser
AbstractObjectParser createObjectParser(JSONObject request, String parentPath, String name, SQLConfig arrayConfig, boolean isSubquery) throws Exception

删除 1 个参数 String name 新增 2 个参数 boolean isTable, boolean isArrayMainTable 后为

AbstractObjectParser createObjectParser(JSONObject request, String parentPath, SQLConfig arrayConfig, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception
3.ObjectParser.parse
ObjectParser parse() throws Exception;

新增 2 个参数 String name, boolean isReuse 后为

ObjectParser parse(String name, boolean isReuse) throws Exception;
4.AbstractObjectParser.parse
AbstractObjectParser parse() throws Exception;

新增 2 个参数 String name, boolean isReuse 后为

AbstractObjectParser parse(String name, boolean isReuse) throws Exception;
5.AbstractObjectParser 的构造方法
public AbstractObjectParser(@NotNull JSONObject request, String parentPath, String name, SQLConfig arrayConfig, boolean isSubquery) throws Exception

删除 1 个参数 String name 新增 2 个参数 boolean isTable, boolean isArrayMainTable 后为

public AbstractObjectParser(@NotNull JSONObject request, String parentPath, SQLConfig arrayConfig, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception
具体见

https://github.com/Tencent/APIJSON/commit/a406242a81f2b303a1c55e6a4f5c3c835e62e53a

APIJSON - 兼容 JDK 11+;优化性能和代码;完善文档等

Published by TommyLemon over 3 years ago

APIJSONORM

新增 javax.activation 依赖来兼容 JDK 11+,感谢 知乎 sunxiaoguang 的贡献 PR#194
新增 APIJSON 接口调试实践 的链接,感谢腾讯同事贡献 Issue#189
解决异常情况下未及时释放资源,感谢 奇安信代码卫士 的贡献 Issue#182-185
解决某些情况下解析 引用赋值 出错,其它修复与优化,感谢  源伞科技 的贡献 Issue#48

优化全局默认参数的解析性能;

文档:

相关推荐新增 APIJSON 接口调试实践,感谢腾讯同事的贡献;
相关推荐新增用户发的博客 apijson简单使用,感谢 Grey Zeng;
贡献者们新增来自知乎的 sunxiaoguang,感谢贡献代码;

APIJSON - 【安全】解决高并发时参数校验出错

Published by TommyLemon almost 4 years ago

解决高并发情况下参数校验规则可能因为执行过程 remove 了部分操作关键词导致校验出错甚至出现安全漏洞 - 该问题由 APIJSON 4.4.5 优化 增删改 性能时 引入

APIJSON - 优化代码;更新文档;升级 fastjson;

Published by TommyLemon almost 4 years ago

优化代码,感谢 github-ganyu 的贡献 #190
升级 fastjson 至 1.2.75,感谢 github-ganyu 的贡献 #190
更新文档,新增贡献者昵称和头像;

apijson-framework 4.3.3-4.5.0
https://github.com/APIJSON/apijson-framework/releases

APIJSON-Demo 4.2.0-4.5.0
https://github.com/APIJSON/APIJSON-Demo/releases

APIJSON - 升级 APIJSONORM 版本为 4.4.8

Published by TommyLemon almost 4 years ago

注:只是为了解决 jitpack.io 打包后 maven 下载失败,实际上只是因为 maven 仓库同步延迟,之前打的 4.4.6 和 4.4.7 现在也能成功通过 maven 下载依赖包了

APIJSON - 升级版本号至 4.4.7

Published by TommyLemon almost 4 years ago

APIJSON - 解决校验参数的 bug

Published by TommyLemon almost 4 years ago

解决 REQUEST_MAP 缓存中的 strcuture 在校验参数抛异常后未被还原,导致后续解析丢了部分配置;
解决 REFUSE 值为 "!" 时因为没有匹配 MUST,而是匹配了 NECESSARY 导致判断出错;
升级版本号为 4.4.6;

返回字段 @column 支持 (balance)*100 和 length(content)%2=0 这种 字段 或 SQL 函数 后拼接数字比较表达式;

解决 PUT 请求传 @key:[] 被当成表字段然后解析报错;
解决 关闭权限验证情况下批量新增、批量修改依然会验证权限;

@column 和 @having 不允许注释符 /*;

通过缓存 Request 校验规则来大幅提升增删改等非开放请求的性能;

升级版本号至 4.4.5;
完善文档;

原始 SQL 片段 @raw:"key" 新增支持条件范围 key{}: "(`Comment`.`userId`=`to`.`userId`)"、比较运算 key>: "to.momentId"、过滤字段 @column: "SUBSTRING_INDEX(SUBSTRING_INDEX(name,',',2),',',1)",聚合函数 @having:"to_days(now())-to_days(`date`)<=7" ;
@having 和 @column 一样支持 function(arg,&char,!) 中包含不符合 字段命名 的字符;优化代码和报错提示;

解决 "isPraised-()": "isContain(praiseUserIdList,userId)" 这种有前置执行 远程函数 的表对象可能返回没有表数据的对象,只有 { "isPraised": true } 这种无意义的对象;

存储过程 @procedure():"fun(key0,key1..)" 返回格式中去掉 key 的 @ 前缀;
取消支持 key? 这种正则匹配方式,全面用 key~ 替代;
优化报错提示;
优化代码;
升级项目版本号;
更新文档;

Badges
Extracted from project README
Stargazers over time
Related Projects