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 - 兼容 jdk1.8+ 及 SpringBoot2.x Latest Release

Published by TommyLemon 3 months ago

兼容 jdk1.8+ 及 SpringBoot2.x;

完整 Demo 见以下 Assets 附件 APIJSONBoot-MultiDataSource-APIJSON-7.0.3-jdk1.8-springboot2.5.zip。

兼容性:

如果有用到 apijson-framework,必须 6.3.0,并且排除它依赖的 APIJSON ORM;
如果有用到 apijson-column 或 apijson-router,都必须用 1.8.0,并且排除它们依赖的 APIJSON ORM;

        <!-- 可使用 libs 目录的 apijson-orm.jar, apijson-framework.jar, apijson-column.jar 来替代,两种方式二选一 <<<<<<<<<< -->
        <dependency>
            <groupId>com.github.Tencent</groupId>
            <artifactId>APIJSON</artifactId>
            <version>7.0.3-jdk1.8</version>
        </dependency>
        <dependency>
            <groupId>com.github.APIJSON</groupId>
            <artifactId>apijson-framework</artifactId>
            <version>6.3.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.github.Tencent</groupId>
                    <artifactId>APIJSON</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.APIJSON</groupId>
            <artifactId>apijson-column</artifactId>
            <version>1.8.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.github.Tencent</groupId>
                    <artifactId>APIJSON</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.APIJSON</groupId>
            <artifactId>apijson-router</artifactId>
            <version>1.8.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.github.Tencent</groupId>
                    <artifactId>APIJSON</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 可使用 libs 目录的 apijson-orm.jar, apijson-framework.jar, apijson-column.jar 来替代,两种方式二选一 >>>>>>>>>> -->
APIJSON - 兼容 JDK 1.8+

Published by TommyLemon 3 months ago

兼容 JDK 1.8+

APIJSON - jdk1.8+

Published by TommyLemon 3 months ago

兼容 JDK 1.8+

APIJSON - 兼容 JDK 1.8+

Published by TommyLemon 3 months ago

重新依赖 javax.activation;
java.version 及 maven-compiler-plugin 配置 source, target 都改为 1.8;
删除打包 JDK17+ 的 jitpack.yml;

APIJSON - 优化分页;引用路径支持特殊符号等

Published by TommyLemon 4 months ago

新增支持 key[]:{ query:2 或 query:"ALL" } 默认返回列表分页信息;

新增把引用赋值路径 URL encode 后的值 decode 回原始值,例如 %2Fuser%2Flist -> /user/list;

解决 format: true 对应 key 返回不是小驼峰,而是强制小写,例如 User[] 返回不是 userList 而是 userlist;

APIJSON - 映射表名和数据库(模式)名

Published by TommyLemon 4 months ago

feat: 实现和配置 TABLE_SCHEMA_MAP 映射表名和数据库(模式)名,感谢 @csx-bill 的贡献 #27

APIJSON - 7.0.0

Published by TommyLemon 5 months ago

7.0.0

APIJSON - 多字段 IN;函数做 key;完善远程函数等

Published by TommyLemon 9 months ago

多字段 IN;函数做 key;
完善远程函数等;
解决 jitpack 打包失败;

从主分支同步过来,包括 6.3.0 及之后的一些更改:
https://github.com/Tencent/APIJSON/releases/tag/6.3.0
https://github.com/Tencent/APIJSON/pull/667

APIJSON - create jitpack.yml

Published by TommyLemon 9 months ago

create jitpack.yml

APIJSON - pom.xml 新增 encoding 配置

Published by TommyLemon 9 months ago

pom.xml 新增 encoding 配置

APIJSON - 多字段 IN;函数做 key;完善远程函数等

Published by TommyLemon 9 months ago

从主分支同步过来,包括 6.3.0 及之后的一些更改:
https://github.com/Tencent/APIJSON/releases/tag/6.3.0
https://github.com/Tencent/APIJSON/pull/667

新增支持多字段 IN,SQL 函数 作为 表达式 左侧 值 等条件;
@raw 原始 SQL 片段默认支持 & | ^ ~ &= >> 等位运算;

远程函数:新增支持从当前请求的全局对象及 Parser 全局缓存取参数值;
完善同一个请求内多种不同操作的关键词,新增支持 @post: "User", @gets: { "Privacy": "Privacy-phone" } 等简化写法;

新增对允许但容易导致潜在问题的情况在 DEBUG 下返回警告信息;

解决一个事务内有多类型数据库/多个不同数据库连接有时不能同步提交/回滚;解决特定版本的 MySQL 等部分数据库重复;

权限:解决删改不支持 String 类型主键;

更新版本号和添加 source 插件,感谢 @jarrodquan 的贡献 #610;

新增驼峰与蛇形命名互转方法以及 JSONResponse.IS_FORMAT_UNDERLINE 等配置;
全能 CRUD: "@gets": { "User":"" // 空字符串转为与 key 同名值 User },"@put": { "Moment":{} // 自动加 "tag":"Moment" },@post:"Comment[]" 自动转为 "@post":{ "Comment[]":"Comment:[]" };
主键类型相关代码全面使用泛型;

假删除:解决 notDeletetValue 未配置也会用 false 作为默认值;解决某些情况下读配置时抛异常,感谢 @cloudAndMonkey 的贡献 #603;

SQLConfig 内把所有 AbstractSQLConfig 改成 SQLConfig;
删除 @Deprecated 代码;
优化 Verifier 的注释;

doc:调整通用文档描述错误,感谢 @NIXUS 的贡献 Gitee#5

用户分享文章新增 MassCMS With APIJSON最佳实践,感谢博主的热心分享,点赞支持下吧~
https://zhuanlan.zhihu.com/p/655826966

生态新增 apijson-builder: 简单包装 APIJSON,相比直接构造查询 JSON 更好记,感谢 @yeli19950109 的贡献,打开链接右上角点 ⭐Star 支持下吧~
https://github.com/yeli19950109/apijson-builder

登记企业新增 上海麦市信息科技有限公司,感谢 @gemufeng 的贡献 #616

登记企业新增 邻盛科技(武汉)有限公司,感谢 @Ivan 的贡献 Gitee#6

APIJSON - 增强远程函数与参数校验;优化体验 等

Published by TommyLemon about 1 year ago

功能

PUT 新增支持对 JSONObject {} 格式的字段值传 "key+": [{"key":value}] 新增,传 "key-": ["key"] 移除;
请求操作符新增支持监听事件 IF: { "name": { UPDATE:{ "Comment": {"userName@": "User/name" } } } },方便同步修改其它表字段值等,并支持执行自定义脚本代码;
新增支持在 @column: value 中传自定义表名,例如 Comment.toId, Moment.userId 等;
最外层返回当前时间戳毫秒值,方便前后端同步校准时间等场景;
对存储过程单独传自定义的 数据库名/模式名 时支持横杠,例如可写为 @key():"api-json.function(arg)",反引号可去掉;
新增支持子查询对象内省略关键词 from,自动取最上方的表对象 key 作为 from;
远程函数:新增根据路径从当前对象取值的方法 getArgVal(String),方便 Long uid = getArgVal("User/id") 这样取值;
AbstractSQLConfig 新增 IGNORE_BLANK_STRING_METHOD_LIST 支持对指定的方法忽略空字符串作为条件值或写入值等;
优化假删除,支持 notDeletedValue,适配 deletedTime = NULL 表示未删除等需求;
完善用异常转换状态码 code;

对 SQLConfig 传入 Parser, ObjectParser, version, tag 等,拿到上下文信息来实现某些需求;
开放请求 GET, HEAD 也处理 version 和 tag,解决字段插件配置不能根据版本号生效等问题;
SQLConfig 和 SQLExecutor 也指定主键泛型;
自动校验参数:解决自定义代码包含 ":" 冒号时可能误判不是语言名称的字符串,导致报错找不到执行引擎;
调整有问题的方法命名 onJoinComplextRelation 为 onJoinComplexRelation;
优化代码及注释的格式;

文档

Complete Doc-English for global keyword description, thx to @YqxLzx #585;
Update README-English.md, fix typo, update company logos;
新增对腾讯分布式数据库 TDSQL, TencentDB 的支持说明;
在线体验 调整为 测试用例;
新增上市公司飞企互联的凌云中台官网 "APIJSON 使用介绍" 的链接;
http://api.flyrise.cn:9099/docs/open-docs//1459

GitHub 15.5K Star 在 400W Java 项目排名前 100,远超 FLAG, BAT 等国内外绝大部分开源项目;
APIJSONBoot 约一下午 相当于 SSMH 大小周过半个月,开发效率提升 26 倍;
https://github.com/Tencent/APIJSON#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-apijson

统计分析新增 Apple 苹果公司,更新分析截屏让 Google 谷歌公司更显眼
https://github.com/Tencent/APIJSON#%E7%BB%9F%E8%AE%A1%E5%88%86%E6%9E%90

使用登记新增 IOTOS 公司的 logo,感谢 @andy19055 的登记;
https://github.com/Tencent/APIJSON#%E4%BD%BF%E7%94%A8%E7%99%BB%E8%AE%B0

生态新增低代码 ERP 项目 xyerp,感谢 yinjg1997 的贡献
https://gitee.com/yinjg1997/xyerp

生态新增快速构建 APIJSON 查询条件的插件,感谢 mingbaobaba 的贡献
https://gitee.com/mingbaobaba/apijson-query-spring-boot-starter

生态新增基于 APIJSON 的低代码系统等,感谢 @csx-bill 的贡献
https://github.com/csx-bill/quick-boot

调整微软工程师接入 IBM DB2 的 Demo,感谢 @andream7 的贡献
https://github.com/andream7/apijson-db2

创作不易,打开链接右上角点 ⭐️ Star 支持下热心的作者们吧~

🏆 零代码、全功能、强安全 ORM 库 🚀
后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构
https://github.com/Tencent/APIJSON

APIJSON - Snowflake,Databricks,Cassandra; 增强条件组合、参数校验等

Published by TommyLemon over 1 year ago

功能

新增支持 云数据仓库 Snowflake, 大数据湖仓一体平台 Databricks, 分布式 NoSQL 数据库 Cassandra;
支持验证是否存在的联合校验,感谢 @aninZz 的贡献 #503;
@combine 模板支持默认值,感谢 @cloudAndMonkey 的贡献 #519;
完善常用场景的正则校验规则,感谢 @leomiaomiao 的贡献 #505;
新增 ENABLE_WITH_AS 和 isWithAsEnable(),不启用 WITH AS 时去除多余的 SELECT * FROM(...) 包装;

Added support for hyphen(-) under email regex, thx to @hiteshbedre #543;
修复多表 gets bug、别名从代码解析改为数据库配置、支持 sql@ UPDATE/DELETE,感谢 @cloudAndMonkey 的贡献 #551;
解决多表插入报错,感谢 @wahowaho 的贡献 #545;
解决 增删改、WITH AS 子查询 因预编译参数重复添加导致报错;

优化 crud method 判断逻辑,删除无用代码,感谢 @cloudAndMonkey 的贡献 #525;
优化代码;
升级版本为 6.1.0;

文档

首页 README 新增 Snowflake, Databricks, InfluxDB, Cassandra, Kafka, Redis, Elasticsearch, Lua 的支持说明;
完善 Update 详细的说明文档.md,调整细节问题;
更正错别字,感谢 @YqxLzx 的贡献 #535;
生态项目新增 apijson-go-uiapijson-go-demo,感谢 @glennliao 的贡献;
用户新增海尔、亚信安全、兴鑫互联 等上市公司和其它几家公司;
登记包括阿里云工程师在内的 4 个贡献者,感谢大家的贡献~
https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md

思科、麦当劳等巨头在内网链接了 APIJSON 仓库,兴鑫互联、Varite 等在招聘要求提到了 APIJSON,腾讯阿里等大厂面试时问到了 APIJSON
https://github.com/Tencent/APIJSON/labels/Popularize%20%E5%AE%A3%E4%BC%A0%2F%E6%8E%A8%E5%B9%BF%2F%E5%B8%83%E9%81%93

根据开源指南针报告,APIJSON 已经是国内顶级、国际一流的 Java 开源项目了 🎉
对比 mybatis, grpc-java, dubbo, spring-boot, spring-framework 等基本 10 年以上的国内外顶级开源项目,
APIJSON 作为比它们都年轻几年的新兴项目,6 年取得这些成就已实属难得:
https://github.com/Tencent/APIJSON/issues/518

🏆 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构
https://github.com/Tencent/APIJSON

功能

新增支持全能接口 /crud,一个请求 JSON 同时使用多种 CRUD 操作,并支持跨源事务,感谢 @cloudAndMonkey 的贡献 #481 #485;
新增支持假删除,感谢 @cloudAndMonkey 的贡献 #493;
新增支持 Elasticsearch(简称 ES), Kafka(MQ 消息队列),感谢 @cloudAndMonkey 的贡献 #487 #493;
新增支持 Lua 等各种脚本语言,感谢 @cloudAndMonkey 的贡献 #500;
PUT 和 DELETE 新增支持子查询,感谢 @cloudAndMonkey 的贡献 #481;
新增支持 SQL 中的 WITH AS 表达式,感谢 @cloudAndMonkey 的贡献 #481;

远程函数:新增支持 JavaScript 脚本,方便动态配置业务逻辑以及作为 Serveless 服务;
远程函数:新增 ENABLE_REMOTE_FUNCTION, ENABLE_SCRIPT_FUNCTION, ENABLE_VERIFY_ROLE, ENABLE_VERIFY_CONTENT 等配置;
远程函数:新增校验 Function 表中配置的 returnType;
远程函数:新增支持自动且智能解析参数值,兼容 `key`, 'value' 指定键值格式;

新增校验请求字符串长度的规则,感谢 @aninZz 的贡献 #498;
@raw 新增支持远程函数和存储过程;
存储过程:新增支持单独指定数据库名/模式名 schema;
批量新增或批量单独设置修改:新增配置允许部分子项失败;
GETS/HEADS/PUT/DELETE 不允许前端传 @combine,感谢 @cloudAndMonkey 的贡献 #494;

优化对 SQL 执行结果的 增删改查 缓存逻辑;
优化 SQLConfig.getSQL(boolean prepared) 相关代码;
简化依赖,感谢阿里云工程师 @cnscoo 的贡献 #489;

文档

新增包括阿里云工程师在内的 8 个贡献者,特别致谢 @cloudAndMonkey 贡献全能 CRUD、Elasticsearch, WITH AS、跨库跨源事务 等
https://github.com/Tencent/APIJSON#%E8%B4%A1%E7%8C%AE%E8%80%85%E4%BB%AC

新增文章《apijson 初探》,感谢 x3d 的贡献,点赞/收藏/关注 作者来支持下 TA 吧~
https://www.cnblogs.com/x3d/p/apijson-lowcode.html

增加《APIJSON使用文档》链接,感谢 @12345ZMTHL 的贡献 #483,点赞、收藏支持下热心的作者吧~
https://juejin.cn/post/7148253873478565902

Fix typo in Document-English.md,thanks to @eltociear 's contribution #472;

Roadmap 路线图 新增需求:支持 id/userId 与其它字段同时作为增删改条件;更新假删除、WITH AS 等进度,感谢 @cloudAndMonkey, @ifooling 的贡献
https://github.com/Tencent/APIJSON/blob/master/Roadmap.md

其它

完善提 issue 流程,引导填写必要信息;

🎉 Java 前百!Tencent/APIJSON 14.4K Star 进入 GitHub Java 语言 400W 项目中排名 Top 100,
远超国外 FLAG, 国内 BAT 等各大厂商的绝大部分开源项目!

https://github.com/search?l=Java&o=desc&p=10&q=stars%3A%3E%3D14000&s=stars&type=Repositories
image

Java 中文软件类项目排名前 30
https://github.com/GrowingGit/GitHub-Chinese-Top-Charts/blob/master/content/charts/overall/software/Java.md
image

Java 英文软件类项目排名第 63
https://github.com/GrowingGit/GitHub-English-Top-Charts/blob/main/content/charts/overall/software/Java.md
image

APIJSON - 分布式OLAP与大数据Presto&Trino,阿里巴巴飞猪团队也推荐APIJSON

Published by TommyLemon almost 2 years ago

功能

新增支持分布式 OLAP 与大数据 查询引擎 Presto & Trino(原名 PrestoDB 和 PrestoSQL),Demo 有 BigDataPresto

远程函数:解决 key-() 优先执行结果不会作为 SQL 部分,解决非表对象中 key() 执行时机滞后于子对象;
解决 SQL JOIN 当部分 JDBC rsmd.getTableName 返回空值导致最终主表字段插到副表对象;

文档

新增登记另一个更完善的 Go 版,感谢 @glennliao 的贡献 #456,为 apijson-go 点 Star 支持下热心的作者吧~
完善 English READMEDocument
生态周边项目的作者:2 腾讯、1 BAT 专家、1 微软、2 字节跳动、1 神州数码工程师&Apache dubbo2js 作者 等;

为什么选择 APIJSON?

前后端 关于接口的 开发、文档、联调 等 10 大痛点解析
https://github.com/Tencent/APIJSON/wiki

  • 解决十大痛点 (可帮前后端开发大幅提振开发效率、强力杜绝联调扯皮、巧妙规避文档缺陷、非常节省流量带宽)
  • 开发提速很大 (CRUD 零代码热更新全自动,APIJSONBoot 对比 SSM、SSH 等保守估计可提速 20 倍以上)
  • 腾讯官方开源 (使用 GitHub、Gitee、工蜂 等平台的官方账号开源,微信公众号、腾讯云+社区 等官方公告)
  • 社区影响力大 (GitHub 1W+ Star 在 350W Java 项目中排名前 120,远超 FLAG, BAT 等国内外绝大部分开源项目)
  • 多样用户案例 (腾讯内有互娱、音乐、微信、云与智慧,外部有华为、华能、百度、快手、中兴、圆通、传音等)
  • 适用场景广泛 (社交聊天、阅读资讯、影音视频、办公学习 等各种 App、网站、公众号、小程序 等非金融类项目)
  • 周边生态丰富 (Android, iOS, Web 等各种 Demo、继承 JSON 的海量生态、零代码 接口测试 和 单元测试 工具等)
  • 文档视频齐全 (项目介绍、快速上手、安装部署 等后端、前端、客户端的 图文解说、视频教程、代码注释 等)
  • 功能丰富强大 (增删改查、分页排序、分组聚合、各种条件、各种 JOIN、各种子查询、跨库连表 等零代码实现)
  • 使用安全简单 (自动增删改查、自动生成文档、自动管理版本、自动控制权限、自动校验参数、自动防 SQL 注入)
  • 灵活定制业务 (在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象 等,然后自定义处理)
  • 高质可靠代码 (代码严谨规范,商业分析软件源伞 Pinpoint 代码扫描报告平均每行代码 Bug 率低至 0.15%)
  • 兼容各种项目 (协议不限 HTTP,与其它库无冲突,对各类 Web 框架集成友好且提供 SpringBoot, JFinal 的示例)
  • 工程轻量小巧 (仅依赖 fastjson,Jar 仅 280KB,Java 文件仅 59 个共 13719 行代码,例如 APIJSONORM 4.3.1)
  • 多年持续迭代 (自 2016 年至今连续维护 6 年,50+ 个贡献者、90+ 次发版、2900+ 次提交,不断更新迭代中...)

image

用户反馈

腾讯 IEG 数据产品开发组负责人 xinlin:
“腾讯的 APIJSON 开源方案,它可以做到零代码生成接口和文档,并且整个生成过程是自动化。当企业有元数据的时候,马上就可以获得接口”

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

腾讯 bodian520:
“在调试GET、POST、PUT接口时遇到了一些问题,把个人的摸索经验分享一下,希望作者能梳理下文档,方便我们更好的接入”

华为 minshiwu:
“demo工程,默认使用apijson-framework,可以做到无任何配置即可体验apijson的各种能力。”

字节跳动 qiujunlin:
“初次见到这个项目,觉得太惊艳了,眼前一亮。给我的感受是,项目大大简化了开发流程,开发效率提升了很多倍。”

百度智慧城市 lpeng:
“很兴奋的发现APIJSON很适合我们的一个开发场景,作为我们协议定义的一部分”

中兴 duyijiang:
“感谢腾讯大大提供的框架,很好用”

其它

Alibaba 阿里巴巴飞猪前端团队也推荐了 APIJSON #461

APIJSON 九阴真经 - 软件开发行业的 ATM 机

接口全万能,前端不求人。要啥就有啥,所求即所得。
需求由它变,后端稳如山。不变应万变,上午就上线。

APIJSON - 达梦数据库; JOIN/Oracle bug; English doc

Published by TommyLemon about 2 years ago

功能

新增支持国产达梦数据库 DM 7.6+,对应 Demo APIJSONBoot-MultiDataSource
解决 JOIN 当主副表都有条件、子查询当内外查询都有条件时可能预编译值错位;
fix: 修复子查询与外查询参数顺序,感谢 @transtone 的贡献 #447;
fix: 解决数据源为Oracle时,@explain 报错问题,感谢 @ifooling 的贡献 #434;
fix: 解决数据源为Oracle时,使用自增主键,获取不到插入的主键问题,感谢 @ifooling 的贡献 #434;
优化调试信息及日志打印,解决异常栈不够精准;

文档

完善 English READMEDocument
新增登记 爱投斯智能技术(深圳)有限公司,感谢 @andy19055 的贡献 #452;
新增登记 上海信息出奇科技有限公司,感谢 @AwenJackson 的贡献 #450;
新增 晨讯科技web前端开发高级工程师的文章 APIJSON-零代码接口和文档 JSON 协议 与 ORM 库
新增公众号“程序猿香蕉”的 3 篇文章,包括 APIJSON的那些事儿,感谢 @AwenJackson 的贡献 #443;
生态项目新增 SQLAuto-智能零代码自动化测试 SQL 语句执行结果的数据库工具,点 Star 支持作者吧~

其它

优化代码格式;

贡献者们

主项目 APIJSON 的贡献者们(6 个腾讯工程师、1 个微软工程师、1 个知乎基础研发架构师、1 个字节跳动工程师、1 个网易工程师、1 个 Zoom 工程师、1 个圆通工程师、1 个智联招聘工程师、1 个美国加州大学学生、3 个 SUSTech 学生等):
https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md

生态周边项目的作者们(2 个腾讯工程师、1 个 BAT 技术专家、1 个微软工程师、2 个字节跳动工程师、1 个神州数码工程师&Apache dubbo2js 作者 等):
https://github.com/search?o=desc&q=apijson&s=stars&type=Repositories
https://search.gitee.com/?skin=rec&type=repository&q=apijson&sort=stars_count

感谢大家的贡献。

统计分析

国内腾讯、华为、阿里巴巴、美团、字节跳动、百度、京东、网易、快手等 和 国外 Google, Microsoft, Amazon, Paypal, IBM, Shopee 等
数百名知名大厂员工点了 Star,也有腾讯、华为、字节跳动、Microsoft、Zoom 等不少知名大厂员工提了 PR/Issue,非常感谢大家的支持~



APIJSON - 物联网数据库 TDengine; JOIN 性能提升

Published by TommyLemon about 2 years ago

功能

新增支持物联网时序数据库 TDengine,对应 Demo APIJSONBoot-MultiDataSource
2677A7863B725488AE4FD8B7DC4FEEFB
AE875F70EA0A5E6D6D72AD528B1E3836
C37146C233CE53077C7584D4AB4F0BC3
image

新增对 Year, Month, DayOfWeek 的支持;
完善数据库版本判断,兼容 MySQL 8.0 以上和以下版本,适配正则匹配、窗口函数等;

解决 APP JOIN 一对多时子数组长度超过预设范围;
fix: sql join缓存丢失而出现1+N查询问题,感谢用户 架构 - Jar @github291406933 再次贡献 #417;

大幅提升 APP JOIN 一对多时子数组查询和缓存性能;
优化 Join.isOne2Many 判断性能;
优化一对多 APP JOIN 的缓存逻辑;

记录 SQL JOIN 副表的聚合函数结果和之前不一致问题;

文档

doc: 修改文档错别字'借口'为'接口' issue #420,感谢 @Finkyky 的贡献 #421;
修改 APIJSON初期构思及实现.pages 中的错别字;
用户:腾讯外有华为、华能、百度、快手、中兴、圆通、传音等;

其它

如果你 提 PR 登记了自己使用 APIJSON 的公司,可以加 企业用户支持群,作者亲自且优先答疑,
只有解答了这个群里的全部问题,才看情况解答其它群里的问题(其它群不保证解答、更不保证及时)。

如果你为 APIJSON 做出了以下任何一个贡献:
提交了 PR 且被合并提交了优质 Issue发表了优质文章开发了可用的生态项目
可以在群里发出贡献链接并附带说明,管理员将设置关注你一段时间,优先答疑解惑。
其它群一般解答顺序:贡献者 > 帮助他人的群友 > 带企业名昵称 > 带岗位名昵称 > 其他群友。

APIJSON - 跨级 APP JOIN;腾讯业务百万数据 6s 响应

Published by TommyLemon over 2 years ago

新增支持跨层级 APP JOIN,感谢 @github291406933 的贡献 #413 ;

新增对 LocalDateTime 类型支持,感谢 @MentosL 的贡献 #394 ;

还原依赖 javax.activation,实测 JDK 11, 13 都需要;
修复多字段参与 JOIN 时,没有命中缓存而出现的 1+N 查询性能问题,感谢 @github291406933 的贡献 #403 ;
完善对 APP JOIN 的 SQL 执行与缓存次数统计;
解决 @combine:"(a | b) & (c | d)" 这种任意条件组合情况下有时预编译值错位导致 SQL 报错;
解决 APP JOIN 副表返回内部字段 @RAW@LIST;

升级 fastjson 版本至 1.2.83

相关推荐新增 腾讯业务百万数据 6s 响应,APIJSON 性能优化背后的故事

数量级 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 - 提升可扩展性;解决 bug;优化功能和代码;完善文档等

Published by TommyLemon over 2 years ago

功能

请求参数校验:REFUSE 新增支持 !key 排除禁止字段,优化 MUST 和 REFUSE 处理性能;
部分常量改为可自定义静态变量;

解决 PUT 不能完整替代 json, jsonb 字段的数组值,感谢 @weiwei162 的贡献 #387;
解决 Oracle 分页获取时无法获取除第一页以外的数据,感谢 @SingleDogL 的贡献 #390;
解决高并发下生成主键冲突导致新增记录失败等;
解决关闭权限校验时 POST 请求传 userId 无效,加强对 POST 请求内字段格式的校验;
解决 format: true 在 Log.DEBUG 时也不返回 SQL、时间等调试信息;
解决 JOIN 副表返回空对象;
解决预估容量判断 NOT 条件用错逻辑 key;

优化 SQL 执行缓存;
优化角色权限、参数校验、远程函数的初始化;
优化登录报错和远程函数执行报错的提示;
优化主键泛型;
优化代码;
删除不再需要的依赖 javax.activation;
升级自身版本为 5.1.0;

文档

更新 @combine 条件组合说明为 5.0+ 的条件任意组合格式;
更新 5.0 新增的 @having&:"...", @having:{...} 两种用法;
完善 JOIN 的类型以及 join:{...} 这种可带 ON 及功能符的写法;
完善 JOIN ON 的各种关联方式、支持多字段关联、支持其它条件的说明;
相关推荐新增 apijson在同一个接口调用中 使用远程函数写入更新时间和创建时间,感谢博主,点赞、收藏支持下博主吧~
生态项目新增 路由插件 apijson-router,对外暴露类 RESTful 接口,内部转成 APIJSON 接口执行,点 Star 支持下作者吧~

兼容性

AbastractSQLConfig 中

原来的 IdCallback 加了泛型 <T extends Object>,并且 Object newId(RequestMethod method, String database, String schema, String table) 改为 T newId(RequestMethod method, String database, String schema, String datasource, String table);
原来的 Callback 加了泛型 <T extends Object>,并且 SQLConfig getSQLConfig(RequestMethod method, String database, String schema, String table) 改为 SQLConfig getSQLConfig(RequestMethod method, String database, String schema, String datasource, String table);
原来的 SimpleCallback 加了泛型 <T extends Object>;
如果业务后端项目直接调用或重写了相关方法,需要对应修改;
https://github.com/Tencent/APIJSON/commit/8df36e26d7ad74f2df4df4e9ce5b29530d814141

AbstractSQLExecutor 中

SQLExecutor.KEY_RAW_LIST 移到 AbstractSQLExecutor,如果业务后端项目直接引用了这个常量,需要对应修改;
原来的缓存读写方法 putCache, removeCache, getCache, getCacheItem 中最后参数 int type 都改为了 SQLConfig config,如果业务后端项目直接调用或重写了相关方法,需要对应修改;
https://github.com/Tencent/APIJSON/commit/8df36e26d7ad74f2df4df4e9ce5b29530d814141

Parser 中

用于接口限流的配置参数 DEFAULT_QUERY_COUNT, MAX_QUERY_PAGE, MAX_QUERY_COUNT, MAX_UPDATE_COUNT, MAX_SQL_COUNT, MAX_OBJECT_COUNT, MAX_ARRAY_COUNT, MAX_QUERY_DEPTH 全都移到 AbstractParser,如果业务后端项目直接引用了这些常量,需要对应修改;
https://github.com/Tencent/APIJSON/commit/8df36e26d7ad74f2df4df4e9ce5b29530d814141

pom.xml 中

移除了依赖 javax.activation
https://github.com/Tencent/APIJSON/commit/95432dde2c7a1f5147f9fe2f77f5500d33c651d0
如果用 JDK 11 +,可能编译不通过或运行报错,可以在自己项目 <dependencies></dependencies> 标签内加上:

		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>activation</artifactId>
			<version>1.1.1</version>
		</dependency>
Badges
Extracted from project README's
Stargazers over time
Related Projects