Releases: Tencent/APIJSON
【性能】新增存储过程 @key():"fun(...)";新增对象关键词 @explain 和 @cache;多方面提升性能;完善和解决 bug 等
Server:
新增存储过程 @key():"fun(...)",与远程函数相比用法除了多了 @ 其它都一致;
新增对象关键词 @Explain 和 @cache 来帮助分析执行性能;
新增全局默认的 @Explain 和 @cache;
新增调试模式下输出时间;
解决 id{} 和 id 同时存在有时候 contains 因为类型不一致导致判断错误而 throw NotExistException;
解决 newSQLConfig 抛 NotExistException 没被 catch 到导致最终返回错误结果;
解决全局的 @database 和 @Schema 对 JOIN 的副表在解析生成 JOIN 副表语句时未生效,导致 SQL 内主表和副表引号不一致而报错;
避免全局默认的 @Schema 自动填充进来导致 Table,Column,PgClass,PgAttribute 的 schema 错误,查不到文档;
解决对表对象数量限制失效;
纠正并完善 sql count 的计算和显示;
MySQL preparedStatement 严格按照类型调用方法,避免隐式转换提高性能;
加强对远程函数 "key()":"fun(arg0,arg1...)" 的格式校验;
优化访问限制的计算及报错;
优化 AbstractSQLExecutor 的缓存;
优化 SQLExecutor 缓存的数据结构,提高性能;
优化存储过程的性能;
提高非调试模式下的日志性能;
调整解析 key:{} 和 key[]:{} 抛异常顺序,优化报错和性能;
SQLConfig 删除多余的 cacheStatic;
打包 apijson-orm-3.5.7.jar;
MySQL:
更新表;
Android:
APIJSONApp 引入 Kotlin,并新增测试自动生成代码的 TestRequestAndResponse 的 Java 和 Kotlin 的工具类;
其它:
完善文档;
【性能】新增4个限制请求的方法;更新文档
Server:
Parser新增maxObjectCount和maxArrayCount限制;
Parser新增maxQueryDepth限制,优化maxObjectCount和maxArrayCount限制;
APIJSONORM完善getMaxSQLCount限制;
调试模式下输出depth,sql:count等信息;
MAX_QUERY_DEPTH值调高为5;
优化getMaxQueryDepth的判断;
MAX_SQL_COUNT提高到1000条;
打包 apijson-orm-3.5.3.jar;
其它:
更新文档,纠正错误;
LEFT JOIN 和 RIGHT JOIN 支持定制子查询外层的 column,group,order,having;支持通过 PgClass 和 PgAttribute 查 PostgreSQL 的表属性和字段属性;
Server:
支持通过 PgClass 和 PgAttribute 查 PostgreSQL 的表属性和字段属性;
增强 LEFT JOIN 和 RIGHT JOIN ,支持
"join": {
"</User/id@": {
"@column": "name",
"@order": "date-"
},
"</Comment/momentId@": {
"@column": "toId,userId,content,date",
"@group": "toId",
"@having": "toId>100"
}
}
定制子查询外层的 column,group,order,having;
修复Colomn非常规数据库字段,获取表名失败导致输出异常;
解决HEAD查总数且字段取别名时校验不通过报错,导致不能同时查总数及有别名的数据;
打包apijson-orm3.5.0.jar;
全面兼容PostgreSQL;新增支持自定义主键名等功能;其它完善优化等
Server:
新增支持自定义主键名getIdKey和用户主键名getUserIdKey;
login接口新增defaults:{},为每个请求JSON最外层新增默认字段;
新增通过 Log.DEBUG 来切换日志输入,非 DEBUG 模式下隐藏敏感信息;
新增支持全局默认模式 @Schema;
完善JSONObject和JSONRequest中子查询的关键词;
大小写敏感,正则匹配,包含选项,增加移除,POST等功能兼容PostgreSQL;
完善默认数据库类型改为 PostgreSQL 的代码及注释;
跨数据库@database:value中value取值只能是全大写;
解决PostgreSQL的json类型字段返回的值总是多包一层的对象;
解决PostgreSQL预编译模式下传JSON参数到SQL后报错类型不是jsonb;
解决包含选项 key<>:value 不兼容 PostgreSQL,Number或Boolean类型不用单引号包裹;
解决对MySQL输入的SQL与实际执行的SQL不符;
fastjson升级为1.2.55;
打包apijson-orm-3.4.9.jar;
PostgreSQL:
完善表结构和数据;
部分表字段类型改为jsonb;
删除多余的表;
MySQL:
更新表;
打包整个Schema所有表的apijson_all_mysql.sql重命名为sys.sql;
文档:
更新文档,新增使用 APIJSON 的企业或项目 Logo 及链接等;
新增 >,<,>=,<= 比较运算;完善APIJSONFinal
Sever:
APIJSONORM 新增 >,<,>=,<= 比较运算;
APIJSONFinal 新增启动时的自检;
APIJSONFinal 解决自动化 API 的入口方法和 APIJSON 操作方法对应错误;
APIJSONORM 优化生成 SQL 语句的格式,比较运算符前后加空格;
APIJSONBoot 和 APIJSONFinal 完善启动说明;
打包 apijson-server3.4.5.jar;
文档:
新增子查询等功能说明;
新增JFinal版Demo叫APIJSONFinal;重命名Library为ORM,Demo为Boot;完善类型校验;修复JOIN和子查询的问题等
Server:
新增JFinal版Demo,名叫APIJSONFinal;
新增URL,BOOLEAN[],STRING[],NUMBER[],DECIMAL[],URL[]类型校验,原有的类型名全改为大写;
Parser新增getMaxQueryPage限制最大分页页码;
AbstractSQLExecutor新增getValue方法支持子类扩展处理value;
DemoSQLExecutor新增支持Blob和Clob类型数据的处理,感谢 @Zerounary 的贡献;
解决 < LEFT JOIN和 > RIGH JOIN 丢主表条件;
解决有 @ APP JOIN 会丢前面 JOIN 的条件;
解决=,IN等只能是1个字段的子查询嵌套JOIN会因为超过一个字段报错;
子查询range的all和any全改为大写的ALL和ANY;
加强对数组关键词query,count,page的校验;
APIJSONLibrary重命名为APIJSONORM;
APIJSONDemo重命名为APIJSONBoot;
打包apijson-server3.4.1.jar;
MySQL:
新增 apijson_all_mysql.sql,整合多张表为一个 sql 文件,可一键导入,感谢 @linbren 的贡献。
新增支持子查询"key@":{};新增支持EXISTS "key}{@":{};新增支持数组默认count
Server:
新增支持 =, IN, FROM 3种类型的子查询 "key@":{ "range": "any", "from": "Table", "Table":{} };
新增支持EXISTS "key}{@":{ "range": "all", "from": "Table", "Table":{} };
新增支持数组默认count,可重写 Parser.getDefaultQueryCount 来自定义;
executeSQL.executeSQL内抽取出onVerifyRole;ObjectParser.executeSQL内抽取出setSQLConfig;
打包 apijson-server3.3.0.jar;
更新 English Document;
MySQL:
更新表;
不兼容的改动:
AbstractParser.onArrayParse 因为 705 行的默认 count 会导致在原来不传 count 但返回结果数 >getDefaultQueryCount() 的情况下,返回的结果只有 getDefaultQueryCount() 个。
https://github.com/TommyLemon/APIJSON/blob/5c989a24618aa2b2ad0964f0c2c58e65b27a2a59/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractParser.java
以下解决方法任选一种即可
1.重写 getDefaultQueryCount 并 return getMaxQueryCount();
2.修改 Parser.DEFAULT_QUERY_COUNT = MAX_QUERY_COUNT;
3.对应的 /get 新增 APIJSON 版本号,例如 /apijson/3.3/get (也可以在 Request Header 或 JSON 参数内 传过来版本号),最后判断版本号按照以上步骤 1 来兼容旧版;
新增详细的图文使用文档;新增TiDB 的使用说明;改进连续范围 key%:[] 和 远程函数等
Server:
新增详细的图文使用文档,感谢 @Zerounary 的贡献。
连续范围 key%:[] 由 [1,2] 改为 ['1,2', '3,4'...];
Operation新增UPDATE替代PUT避免和RequestMethod.PUT混淆;
远程函数DemoFunction构造方法新增RequestMethod支持函数对方法的限制;
Demo 支持自定义端口号;
login接口支持记住登录7天;
解决login接口在数据库异常时返回结果缺少必要信息;
DemoSQLConfig 新增 TiDB 的使用说明;
优化启动时校验远程函数前查数据的异常处理;
远程函数DemoFunction实例创建从ObjectParser移到Parser,减少不必要的内存占用;
删除Verifier.removeAccessInfo;
打包 apijson-server3.2.5.jar;
MySQL:
更新表;
新增应用层连表 APP JOIN,例如 "join":"@/User/id@"
Server:
新增应用层连表 APP JOIN,例如 "join":"@/User/id@",支持跨不同类型数据库,缓存粒度更细更容易命中;
减少AbstractSQLExecutor.execute因为viceColumnStart起始值错误导致的多余一次缓存;
打包 apijson-server3.2.0.jar;
更新MySQL表;解决Demo工程错误
Server:
新增漏提交的方法 value;
解决 DemoVerifier.getVisitorId 类型转换错误;
优化 AbstractVerifier 和 DemoVerifier 的代码;
打包 apijson-server3.1.7.jar;
MySQL:
更新表;