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)

APIJSON - 【安全】增强对批量删改中 id{} 的校验

Published by TommyLemon almost 4 years ago

解决 Windows mysql-5.6.26-winx64 等低于 5.7 的 MySQL 可能 id{}: [0] 生成 id IN(0) 触发 MySQL bug 导致忽略 IN 条件;

注:
本 bug 由于隐式类型转换时把 字符串类型的非数字值 转为 0 导致,目前仅在数据库类型为 MySQL 且版本低于 5.7 时发现。
感谢开源作者群友 天津黑核科技-湖水没了(企业法人代表) 发现的风险
https://my.oschina.net/publiccms/blog/4769241

APIJSON - 重构请求参数校验;完善文档;

Published by TommyLemon almost 4 years ago

dbUri 完全交给用户控制,不再针对 MySQL 版本号来自动配置参数;

数据和结构校验类 Structure 整合到 AbstractVerifier;
AbstractParser 中 IdCallback 相关方法移到 AbstractVerifier;
AbstractParser 优化代码避免 NPE;

升级版本号为 4.3.0;
新增 APIJSONORM 的远程依赖文档;
更新其它文档;

APIJSON - 【安全】解决校验 JSON 参数的 bug

Published by TommyLemon almost 4 years ago

操作方法 Operation 新增 MUST 和 REFUSE 分别替代 NECESSARY 和 DISALLOW;
解决 Structure.sqlVerify 不可用及预防可能的 SQL 注入;
解决 SQLConfig 自定义的 idKey 和 userIdKey 在 Structure 中未同步导致自定义值校验不通过;

APIJSON - 升级 fastjson 版本;更新文档

Published by TommyLemon almost 4 years ago

升级 fastjson 版本为 1.2.74(测试 1.2.75 下载不了 Maven 依赖);
更新文档;

APIJSON - fastjson 升到 1.2.73;删除 APIJSONFramework;

Published by TommyLemon about 4 years ago

APIJSONORM:
fastjson 升级到最新建议稳定版 1.2.73;
自身版本提高到 4.2.1;

APIJSONFramework:
删除,只用 https://github.com/APIJSON/apijson-framework

APIJSON - 调整项目结构;解决编译错误

Published by TommyLemon about 4 years ago

Srever:
Demo 工程及数据库文件都迁移到 APIJSON-Demo 项目;
APIJSONORM 和 APIJSONFramework 迁移到最外层;
APIJSONORM 新增 EXIST 校验;
APIJSONORM 解决编译错误;

打包 apijson-orm-4.2.0.jar 和 apijson-framework-4.2.0.jar,并作为默认依赖;

其它:
更新文档

APIJSON - 新增支持 @raw 关键词 和 IBM DB2 数据库

Published by TommyLemon over 4 years ago

Server:
新增支持 IBM DB2 数据库;
新增 @raw 关键词,支持自定义 WHERE 条件拼接,感谢 @zhoulingfengofcd 的贡献;
新增是否成功 ok、详细的分页信息 info;
新增支持随机函数 rand() 来排序;
新增 ( ANTI JOIN 和 ) FOREIGN JOIN;
新增支持自动补全 Comment:[] 这种每个项都自定义的 批量新增/修改 的请求配置;
新增支持重写方法 onMissingKey4Combine 来自定义 @combine 的空值处理;

完善 OUTER, ANTI, FOREIGN JOIN 的无条件边界情况;
调整 ^ SIDE JOIN 和 * CROSS JOIN 的实现;
优化批量新增、修改后返回的字段,保持和规范统一;
APIJSONFramework 引入 UnitAuto 自动化单元测试工具 MethodUtil 及相关接口和远程函数;
APIJSONBoot 新增 Rap 的文档接口 Demo,优化测试用的 Swagger 文档接口;
删除 APIJSONBoot 和 APIJSONBootTest 中多余的 apijson-orm 依赖;

解决PUT方法,某个字段加减时,类型keyType没有重置的BUG;
重命名错误单词 outter 为 outer;

打包 apijson-orm-4.1.0.jar 和 apijson-framework-4.1.0.jar;

Android:
替换自动生成的用来测试封装 Request JSON 和解析 Response JSON 的 Java 和 Kotlin 代码

其它:
新增 APIJSON 规划及路线图 文档;

Server:

将 APIJSONboot 抽取为 APIJSONFramework 和新的 APIJSONBoot
新增简单 Demo,叫 APIJSONBootTest,只有 3 个类、几十行代码;

新增支持批量 POST,格式为 Table[]:[{...},{...}...] - 感谢 @zhoulingfengofcd 的贡献 ;
PUT 支持单独设置每项的批量修改,格式和批量新增 POST 相比多了 id;
新增支持数据库自增 id;
新增对 DATE, TIME, DATETIME 及 DATE[], OBJECT[], ARRAY[] 等对应数组的类型校验;
完善远程函数的环境变量,方便做更细致的操作;
APIJSONBoot 新增代理接口,支持前端任意跨域;
APIJSONBoot 新增查询 Swagger 文档的示例接口;

解决远程函数对比版本错误;
解决多表 JOIN,生成的 SQL 未按 join 参数顺序导致乱序问题 - 感谢 @zhoulingfengofcd 的贡献 ;

Operation,RequestRole 和正则匹配 COMPILE_MAP 中 key 强制名称大写;
Parser.noVerify 改成 needVerify;
删除已被废弃的 Operation;
删除废弃的大驼峰命名的校验类型;
删除多余的 APIJSONOracle 工程;

ORM 库包名 zuo.biao.apijson 重命名为 apijson,apijson.server 重命名为 apijson.orm;
完善操作参数的 Operation 的注释;
统一 pom.xml 中的 apijson-orm,apijson-framework,fastjson 依赖;
提升版本号为 4.0.0;

打包 apijson-orm-4.0.0.jar 和 apijson-framework-4.0.0.jar;

Android:

新增 UnitAuto 单元测试工具类 MethodUtil.kt;
APIJSONApp 和 APIJSONTest 适配全面屏;
APIJSONTest 修改文案 向上依赖 Rely 为 引用赋值 Reference;

迁移两个工具类至 util 包;
升级 SDK 版本至 29;
删除 APIJSONApp 和 APIJSONTest 的 APIJSONLibrary,用 gradle 依赖代替;

其它:

完善设计规范文档,新增存储过程、批量新增,@json 等;
首页 README 新增常见问题、贡献者等;

注意事项:

这个版本进行了大幅重构,大部分功能对前端调用无影响,但后端工程不兼容以前的版本。
如果已经使用过 3.9.0 或以下版本,则替换为 4.0.0 或以上版本后需要在自己业务工程内修改代码:

如果前端使用过 @role: RequestRole 对应的非全大写值,可以改为全大写,或者后端统一转为全大写。

APIJSON - 【质量】新增随机测试、增强子查询

Published by TommyLemon almost 5 years ago

Server:
允许非 GET 方法使用子查询,以便实现多对多关联操作;
解决子查询额外加的 []/0 路径导致嵌套层级过深报错;
解决全局默认的 @explain 或 @cache 放到子查询内导致 SQL 语法报错;

MySQL:
更新表,新增随机参数配置 Random 表;

PostgreSQL:
解决 Function 表数据中一个远程函数命名错误;

其它:
更新文档,包括新增比较运算的功能符说明等;

APIJSON - 完善支持 Oracle 和 MS SQL Server 的分页等功能;新增多个功能

Published by TommyLemon almost 5 years ago

Server:
APIJSONORM 完善 Oracle 和 MS SQL Server 的分页、正则匹配、包含选项、子查询 、性能分析 等功能;
APIJSONORM 新增 SQL Server 的表和字段属性 系统表;
APIJSONORM 支持在 column 的 SQL 函数里传非字段参数,实现时间格式化等功能;
APIJSONORM 匹配条件范围新增支持 key{}:"=null" 和 key{}:"!=null" 两种 null 值判断;
APIJSONORM 新增 @ json 自动把字段值转为 JSON 格式;
APIJSONORM 新增判断数据库类型的方法;
APIJSONBoot 新增 Oracle 和 MS SQL Server 的驱动和配置;

APIJSONORM 解决非 DEBUG 模式下不能访问 Access 和 Request 表导致部分功能不可用;
APIJSONORM 解决获取表和字段属性因为默认的 schema 导致某些情况下出错;
APIJSONORM 匹配选项范围解决 key!{}:[] (空数组)查不到数据;

APIJSONORM 放开 DEBUG 模式下对系统表的 SQL 执行数量限制;
APIJSONORM 调试信息字段用 | 替代 / 来分割,避免 APIJSON ORM,APIAuto 等解析路径错误;
APIJSONORM 优化各种数据库的配置和判断;
APIJSONORM 的 postgresql-42.2.4.jar 替换为 42.2.5 的 Maven 依赖;
同步 APIJSONBoot 代码到 APIJSONFinal;
APIJSONBoot 尝试升级 SpringBoot 至 2.1.9 失败;

新增 oracle 驱动 jar 包;
打包 apijson-orm-3.8.6.jar;

MySQL:
更新表

PostgreSQL:
更新表

SQLServer:
新增配置和测试表文件

APIJSON - 完善中文和英文文档;更新 PostgreSQL 的测试表

Published by TommyLemon about 5 years ago

Server:
完善远程函数调用在函数格式错误时的报错信息;
非开放请求不允许传远程函数;
解决 Access 表里配置 name 和 alias 未成功实现表映射;
同步 APIJSONBoot 的 Application 代码到 APIJSONFinal;

MySQL:
更新表

PostgreSQL:
更新表

文档:
完善 判断是否存在 EXISTS 和 子查询 Subquery 的说明;
解决英文文档的一些文案和格式问题;

APIJSON - 同步 APIJSONBoot 的代码到 APIJSONFinal

Published by TommyLemon about 5 years ago

Server:
解决 APIJSONFinal 缺 libs 目录及相关 jar 包;
同步 APIJSONBoot 的代码到 APIJSONFinal;

APIJSON - 新增多表关联操作的事务处理;完善 JFinal 的 Demo

Published by TommyLemon about 5 years ago

Server:

新增支持多表关联操作的事务处理;
RemoteFunction 内强制校验远程函数必须符合 Function 表的配置;
Function 表新增 methods,tag,version 用于限制远程函数的使用范围;

非 DEBUG 模式下禁用 @ explain;
非 DEBUG 模式下不允许访问字段 debug 为 0 的表;
APIJSONBoot 升级 fastjson 版本,纠正版本号;
APIJSONFinal 与 APIJSONBoot 同步代码和依赖;

解决已执行 SQL 数量统计错误;
解决 DemoFunction 在 Function 表的 version 为 null 时测试不通过;
解决 DemoFunction.getFunctionCall 参数 arguments 为 null 时拼接错误;

优化代码;
废弃 @ correct;

ORM 升级版本为 3.7.0 并打新的 jar 包;

MySQL:

更新表;

文档:

完善对首页简介及通过用文档的英文翻译,感谢 @ruoranw 的贡献

APIJSON - 新增支持热更新 请求校验 和 权限校验

Published by TommyLemon about 5 years ago

Server:
新增支持热更新 远程函数、请求校验、权限校验 的配置,通过调用新增的 /reload 接口来实现;
AbstractSQLConfig.Callback 新增 database 和 schema 参数来区分同名表;

解决 JOIN 副表有 DISTINCT 时外层 SELECT 字段出现多余的 DISTINCT 导致语法错误;
解决 JOIN 主表和副表重名导致语法错误,通过给副表加 AS 别名来实现;

调整 Join 类的 表名 和 请求对象 分别对应的 变量名,避免和其它类不一致导致误解;

打包 apijson-orm-3.6.5.jar;

MySQL:
更新表,并把单个表文件都放到 single 目录,避免和 sys.sql 一起导入报错;

APIJSON - 新增支持去重关键词 DISTINCT

Published by TommyLemon about 5 years ago

Server:
新增支持去重关键词 DISTINCT,例如 "@column": "DISTINCT momentId;count(DISTINCT userId)";
升级 mysql-connector-java 驱动,兼容 MySQL 8;

解决 Oracle 版 oracle jdbc 依赖下载不了,注释报错且未用上的方法;
解决 pom.xml有可能出现的错误;- 感谢 @vincentCheng 的贡献

完善详细的说明文档,修正错误;- 感谢 @vincentCheng 的贡献
打包 apijson-orm-3.6.0.jar;

MySQL:
更新表;

Android:
完善 Java 和 Kotlin 测试解析 Response JSON 的代码;

文档:
更新说明文档;

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 的工具类;

其它:
完善文档;

APIJSON - 【性能】新增4个限制请求的方法;更新文档

Published by TommyLemon over 5 years ago

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;

其它:
更新文档,纠正错误;

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;

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 及链接等;

Badges
Extracted from project README
Stargazers over time
Related Projects