A JSON Transmission Protocol and an ORM Library for automatically providing APIs and Docs.

Overview

Tencent is pleased to support the open source community by making APIJSON available.
Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
This source code is licensed under the Apache License Version 2.0

APIJSON

零代码、热更新、全自动 ORM 库
🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构

   

     

   

English  通用文档 视频教程 在线体验


导航目录: 项目简介 上手使用 社区生态      完整详细的导航目录 点这里查看

APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。
为各种增删改查提供了完全自动化的万能 API,零代码实时满足千变万化的各种新增和变更需求。
能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
适合中小型前后端分离的项目,尤其是 初创项目、内部项目、低代码/零代码、小程序、BaaS、Serverless 等。

通过万能的 API,前端可以定制任何数据、任何结构。
大部分 HTTP 请求后端再也不用写接口了,更不用写文档了。
前端再也不用和后端沟通接口或文档问题了。再也不会被文档各种错误坑了。
后端再也不用为了兼容旧接口写新版接口和文档了。再也不会被前端随时随地没完没了地烦了。

特点功能

对于前端

  • 不用再向后端催接口、求文档
  • 数据和结构完全定制,要啥有啥
  • 看请求知结果,所求即所得
  • 可一次获取任何数据、任何结构
  • 能去除重复数据,节省流量提高速度

对于后端

  • 提供通用接口,大部分 API 不用再写
  • 自动生成文档,不用再编写和维护
  • 自动校验权限、自动管理版本、自动防 SQL 注入
  • 开放 API 无需划分版本,始终保持兼容
  • 支持增删改查、复杂查询、跨库连表、远程函数等

APIJSON 接口展示

Postman 展示 APIJSON


APIAuto 展示 APIJSON

使用 APIAuto-机器学习接口工具 来管理和测试 HTTP API 可大幅提升接口联调效率
(注意网页工具界面是 APIAuto,里面的 URL+JSON 才是 APIJSON 的 HTTP API):

APIJSON 多表关联查询、结构自由组合,APIAuto 多个测试账号、一键共享测试用例


APIAuto 自动生成前端(客户端)请求代码 和 Python 测试用例代码,一键下载


APIAuto 自动保存请求记录、自动生成接口文档,可添加常用请求、快捷查看一键恢复


APIAuto 一键自动接口回归测试,不需要写任何代码(注解、注释等全都不要)


一图胜千言 - APIJSON 部分基础功能概览



APIJSON App 演示

使用 APIJSON + ZBLibrary 开发的 Android 客户端 Demo (以下 Gif 图看起来比较卡,实际上运行很流畅):


APIJSON 分享演讲

APIJSON-零代码接口与文档 ORM 库(国际开源谷 Gitee Meetup)

https://www.bilibili.com/video/BV1Tv411t74v

image

APIJSON 和 APIAuto-零代码开发和测试(QECon 全球软件质量&效能大会)

https://www.bilibili.com/video/BV1yv411p7Y4

wecom-temp-377bbd0daf5aed716baf7ebcb003d94c


为什么选择 APIJSON?

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

  • 解决十大痛点 (APIJSON 可帮助用户 提振开发效率、杜绝联调扯皮、规避文档缺陷、节省流量带宽 等)
  • 开发提速很大 (CRUD 零代码热更新自动化,APIJSONBoot 对比 SSM、SSH 等保守估计可提速 20 倍以上)
  • 腾讯官方开源 (使用 GitHub、Gitee、工蜂 等平台的官方账号开源,微信公众号、腾讯云+社区 等官方公告)
  • 社区影响力大 (GitHub 1W+ Star 在 350W Java 项目中排名前 120,远超 FLAG, BAT 等国内外绝大部分开源项目)
  • 多样用户案例 (腾讯内部用户包含 互娱、音乐、云与智慧,外部用户包含 500 强上市公司、数千亿资本国企 等)
  • 适用场景广泛 (社交聊天、阅读资讯、影音视频、办公学习 等各种 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 年开源至今已连续维护 5 年,累计 2000+ Commits、80+ Releases,不断更新迭代中...)

常见问题

1.如何定制业务逻辑?

在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象、参数名称 等,然后对查到的数据自定义处理
https://github.com/Tencent/APIJSON/issues/101

2.如何控制权限?

在 Access 表配置校验规则,默认不允许访问,需要对 每张表、每种角色、每种操作 做相应的配置,粒度细分到行级
https://github.com/Tencent/APIJSON/issues/12

3.如何校验参数?

在 Request 表配置校验规则 structure,提供 MUST、TYPE、VERIFY 等通用方法,可通过 远程函数 来完全自定义
https://github.com/Tencent/APIJSON/wiki#%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86

更多常见问题及提问前必看
https://github.com/Tencent/APIJSON/issues/36

注意事项

请求参数 JSON 中表名、字段名、关键词及对应的值都是大小写敏感、逗号敏感、分号敏感、空格敏感、换行敏感,
大部分情况都不允许空格和换行,表名以大写字母开头,不要想当然,请严格按照 设计规范 来调用 API #181



导航目录: 项目简介 上手使用 社区生态      完整详细的导航目录 点这里查看

快速上手

1.后端上手

可以跳过这个步骤,直接用APIJSON服务器IP地址 apijson.cn:8080 来测试接口。
见  APIJSON后端上手 - Java

2.前端上手

可以跳过这个步骤,直接使用 APIAuto-机器学习HTTP接口工具 或 下载客户端App。
见  Android  或  iOS  或  JavaScript

下载客户端 App

仿微信朋友圈动态实战项目
APIJSONApp.apk

测试及自动生成代码工具
APIJSONTest.apk

开源许可

使用 Apache License 2.0,对 公司、团队、个人 等 商用、非商用 都自由免费且非常友好,请放心使用和登记

使用登记

如果您在使用 APIJSON,请让我们知道,您的使用对我们非常重要(按登记顺序排列):
https://github.com/Tencent/APIJSON/issues/187



贡献者们

主项目 APIJSON 的贡献者们(6 个腾讯工程师、1 个知乎基础研发架构师、1 个圆通工程师 等):
https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md


生态周边项目的作者们(2 个腾讯工程师、1 个 BAT 技术专家、1 个字节跳动工程师 等):
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


还有为 APIJSON 扫描代码贡献 Issue 的 奇安信代码卫士源伞科技


感谢大家的贡献。

规划及路线图

新增功能、强化安全、提高性能、增强稳定、完善文档、丰富周边、推广使用
https://github.com/Tencent/APIJSON/blob/master/Roadmap.md

理论上所有支持 SQL 与 JDBC/ODBC 的软件,都可以用本项目对接 CRUD,待测试:
Elasticsearch, OceanBase, Presto, Spark, Hive(延伸支持 Hadoop, Spark), Phoenix(延伸支持 HBase), Presto/Trino(延伸支持 Redis, Hive, Kafka, Elasticsearch, Thrift, Cassandra, MySQL, PostgreSQL, Oracle, MongoDB...)

我要赞赏

如果你喜欢 APIJSON,感觉 APIJSON 帮助到了你,可以点右上角 Star 支持一下,谢谢 ^_^



导航目录: 项目简介 上手使用 社区生态      完整详细的导航目录 点这里查看

技术交流

如果有什么问题或建议可以 提ISSUE 或 加群,交流技术,分享经验。
如果你解决了某些bug,或者新增了一些功能,欢迎 贡献代码,感激不尽~
https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md

QQ 技术群: 734652054(新)、607020115(旧)

如果你为 APIJSON 做出了以下任何一个贡献:
提交了 PR 且被合并提交了优质 Issue发表了优质文章开发了可用的生态项目登记了你的公司,可以加
贡献者微信群,注意联系 LonelyExplorer,加好友描述中附上贡献链接,谢谢

相关推荐

APIJSON, 让接口和文档见鬼去吧!

仿QQ空间和微信朋友圈,高解耦高复用高灵活

后端开挂:3行代码写出8个接口!

后端自动化版本管理,再也不用改URL了!

3步创建APIJSON后端新表及配置

APIJSON对接分布式HTAP数据库TiDB

APIJSON教程(一):上手apijson项目,学习apijson语法,并实现持久层配置

apijson简单demo

apijson简单使用

APIJSON简单部署和使用

学习自动化接口APIJSON

APIJSON 接口调试实践

APIJSON使用例子总结

APIJSON 自动化接口和文档的快速开发神器 (一)

APIJSON在mac电脑环境下配置去连接SQL Server

APIJSON复杂业务深入实践(类似12306订票系统)

全国行政区划数据抓取与处理

新手搭建 APIJSON 项目指北

使用APIJSON写低代码Crud接口

APIJSON(一:综述)

APIJSON 代码分析(三:demo主体代码)

APIJSON 代码分析(二)AbstractParser类(解析器)

APIJSON 代码分析(四:AbstractObjectParser源码阅读)

APIJSON 代码分析 AbstractSQLConfig 第二篇

APIJSON 代码分析(六)APIJSON—Verifier检查类

APIJSON 代码分析(四)AbstractSQLExecutor—SQL执行器

生态项目

APIJSON-Demo APIJSON 各种语言、各种框架 的 使用示例项目、上手文档、测试数据 SQL 文件 等

apijson-orm APIJSON ORM 库,可通过 Maven, Gradle 等远程依赖

apijson-framework APIJSON 服务端框架,可通过 Maven, Gradle 等远程依赖

apijson-column APIJSON 的字段插件,支持 字段名映射 和 !key 反选字段

APIAuto 敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释

UnitAuto 机器学习单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性和可用性

apijson-doc APIJSON 官方文档,提供排版清晰、搜索方便的文档内容展示,包括设计规范、图文教程等

APIJSONdocs APIJSON 英文文档,提供排版清晰的文档内容展示,包括详细介绍、设计规范、使用方式等

apijson.org APIJSON 官方网站,提供 APIJSON 的 功能简介、登记用户、作者与贡献者、相关链接 等

APIJSON.NET C# 版 APIJSON ,支持 MySQL, PostgreSQL, SQL Server, Oracle, SQLite

apijson-go Go 版 APIJSON ,支持单表查询、数组查询、多表一对一关联查询、多表一对多关联查询 等

apijson-hyperf PHP 版 APIJSON,基于 Hyperf 支持 MySQL

APIJSON-php PHP 版 APIJSON,基于 ThinkPHP,支持 MySQL, PostgreSQL, SQL Server, Oracle 等

apijson-php PHP 版 APIJSON,基于 ThinkPHP,支持 MySQL, PostgreSQL, SQL Server, Oracle 等

apijson-node Node.ts 版 APIJSON,提供 nestjs 和 typeorm 的 Demo,由字节跳动工程师开发

uliweb-apijson Python 版 APIJSON,支持 MySQL, PostgreSQL, SQL Server, Oracle, SQLite 等

APIJSONParser 第三方 APIJSON 解析器,将 JSON 动态解析成 SQL

FfApiJson 用 JSON 格式直接生成 SQL,借鉴 APIJSON 支持多数据源

APIJSON-ToDo-Demo 一个简单的 todo 示例项目,精简数据,简化上手流程,带自定义鉴权逻辑

apijson-learn APIJSON 学习笔记和源码解析

apijson-practice BAT 技术专家开源的 APIJSON 参数校验注解 Library 及相关 Demo

apijson-db2 APIJSON 接入 IBM 数据库 DB2 的 Demo

APIJSONDemo APIJSON 接入 ClickHouse 的 Demo

APIJSONDemo_ClickHouse APIJSON + SpringBoot 连接 ClickHouse 使用的 Demo

apijson-sample APIJSON 简单使用 Demo 及教程

apijson-examples APIJSON 的前端、业务后端、管理后端 Demo

light4j 整合 APIJSON 和微服务框架 light-4j 的 Demo,同时接入了 Redis

SpringServer1.2-APIJSON 智慧党建服务器端,提供 上传 和 下载 文件的接口

apijson_template apijson java 模版,使用 gradle 管理依赖和构建应用

api-json-demo 基于 APIJSON,实现低代码写 CURD 代码,代替传统 ORM 框架,适配 Oracle 事务

ApiJsonByJFinal 整合 APIJSON 和 JFinal 的 Demo

apijson-builder 一个方便为 APIJSON 构建 RESTful 请求的 JavaScript 库

AbsGrade 列表级联算法,支持微信朋友圈单层评论、QQ空间双层评论、百度网盘多层(无限层)文件夹等

APIJSON-Android-RxJava 仿微信朋友圈动态实战项目,ZBLibrary(UI) + APIJSON(HTTP) + RxJava(Data)

Android-ZBLibrary Android MVP 快速开发框架,Demo 全面,注释详细,使用简单,代码严谨

感谢热心的作者们的贡献,点 Star 支持下他们吧。

腾讯犀牛鸟开源人才培养计划

https://github.com/Tencent/APIJSON/issues/229

qiujunlin 2.接入 presto/hive/clickhouse/db2 任意一个

APIJSON 接入 clickhouse 使用demo
https://github.com/qiujunlin/APIJSONDemo

zhangshukun 2.接入 presto/hive/clickhouse/db2 任意一个

APIJSON-Demo接入db2
https://github.com/andream7/apijson-db2

hanxu 1.完善入门介绍视频

重构 APIJSON 文档
https://hanxu2018.github.io/APIJSON-DOC/
文档源码
https://github.com/HANXU2018/APIJSON-DOC
配套评论区 apijson-doc-Comment
https://github.com/HANXU2018/apijson-doc-Comment

chenyanlan 2.接入 presto/hive/clickhouse/db2 任意一个

APIJSON + SpringBoot连接ClickHouse使用的Demo
https://github.com/chenyanlann/APIJSONDemo_ClickHouse

zhaoqiming 1.完善入门介绍视频

APIJSON 后端教程(1):简介 https://www.bilibili.com/video/BV1vL411W7yd

APIJSON 后端教程(2):数据库 https://www.bilibili.com/video/BV1eB4y1N77s

APIJSON 后端教程(3):Demo https://www.bilibili.com/video/BV1FX4y1c7ug

APIJSON 后端教程(4):Boot https://www.bilibili.com/video/BV18h411z7FK

APIJSON 后端教程(5):Final https://www.bilibili.com/video/BV1GM4y1N7XJ

APIJSON 后端教程(6):uliweb_apijson https://www.bilibili.com/video/BV1yb4y1S79v/

APIJSON 后端教程(7):问题答疑 https://www.bilibili.com/video/BV1dQ4y1h7Df

APIJSON配套文档: https://github.com/kenlig/apijsondocs

huwen 2.接入 presto/hive/clickhouse/db2 任意一个

APIJSON-Demo 接入presto https://github.com/hclown9804/APIJSONDemo_presto

zhanghaoling 1.完善入门介绍视频

APIJSON结合已有项目,简化开发流程 https://github.com/haolingzhang1/APIJson--demo

说明文档 https://github.com/haolingzhang1/APIJson--demo/tree/main/APIJson集成项目说明

(1)官方demo https://github.com/haolingzhang1/APIJson--demo/blob/main/APIJson集成项目说明/APIJson集成现有项目(1)-%20官方demo.pdf

(2)单表配置 https://github.com/haolingzhang1/APIJson--demo/blob/main/APIJson集成项目说明/APIJson集成现有项目(2)-%20单表配置.pdf

zhoukaile 1.完善入门介绍视频

视频链接:https://www.bilibili.com/video/BV1Uh411z7kZ/

文档链接:https://gitee.com/funkiz/apijson_camp

lintao 1.完善入门介绍视频

APIJSON 上手教程:https://www.bilibili.com/video/BV1Pq4y1n7rJ

持续更新

https://github.com/Tencent/APIJSON/commits/master

工蜂主页

https://git.code.tencent.com/Tencent_Open_Source/APIJSON

码云主页

https://gitee.com/Tencent/APIJSON

Comments
  • 有没有兴趣

    有没有兴趣

    https://github.com/Shyam-Chen/Backend-Starter-Kit 做一个类似的基于APIJSON的Backend-Starter-Kit

    ## Directory Structure
    
    

    . ├── flow-typed ├── src │ ├── document │ │ └── index.js ... │ ├── graphql │ │ └── index.js ... │ ├── apijson │ │ └── index.js ... │ ├── relational │ │ └── index.js ... │ ├── rest │ │ └── index.js ... │ ├── api.js │ ├── config.js │ └── pm2.js ├── test │ ├── graphql │ │ └── xxx.spec.js ... │ └── rest │ └── xxx.spec.js ... │ ├── apijson │ └── xxx.spec.js ... ├── .babelrc ├── .editorconfig ├── .eslintrc ├── .gitattributes ├── .gitignore ├── Dockerfile.dev ├── Dockerfile.prod ├── LICENSE ├── Procfile ├── README.md ├── circle.yml ├── docker-compose.yml ├── package.json └── yarn.lock

    
    
    opened by wanghaisheng 17
  • 多表关联

    多表关联

    环境信息

    • 系统:
    • JDK:
    • 数据库:
    • APIJSON:

    查询: "[]": { "TaxInfo": { "@column": "tax" }, "query": 2, "page": 0, "count": 10 }, "total@": "/[]/total"

    返回:

    "[]": [ { "ExCompanyTaxInfo": { "tax": 0 } }, { "ExCompanyTaxInfo": { "tax": 0 } }]

    换成关联查询 "[]": { "ExXsrInfoViews": { "@group": "userId", "@column": "sum(lrlTotal):lrlTotal;sum(cjTotal):cjTotal;sum(cjhtTotal):cjhtTotal;sum(zTotal):zTotal;sum(sfeTotal):sfeTotal;time" }, "ExXsDealInfos": { "@group": "company_id", "sign_org_full_id@": "/ExXsrInfoViews/xsr_org_full_id", "@column": "company_id" }, "ExCompanyTaxInfo": { "company_id@": "/ExXsDealInfos/company_id", "@group": "company_id,year", "@column": "tax" }, "query": 2, "page": 0, "count": 10 }, "total@": "/[]/total"

    返回 "[]": [ { "ExXsrInfoViews": { "userId": 69 , "userName": "哈哈" , "xsr_org_dept_id": 61 , "xsr_org_full_id": "1/67" , "lrlTotal": 70 , "cjTotal": 0 , "cjhtTotal": 0 , "zTotal": 0 , "sfeTotal": 0 , "time": "2020-09-14" } }]

    就没有tax字段, 希望返回tax字段,

    关联表的顺序是否影响返回结果?

    Question 使用问题 Document 文档 
    opened by shanhan0 11
  • put请求可以直接修改数据库json字段吗

    put请求可以直接修改数据库json字段吗

    环境信息

    • APIJSON: 4.8.0

    问题描述

    { "ReviewApply": { "id": "1470678208578899968", //申请表id "document_list": [ "test_v1.1.docx" ] }, "tag": "updateReviewApply" } 不使用+ -号,无法直接替换document_list字段

    Bug 漏洞 
    opened by WaizLee 10
  • APIJSONDemo-Druid 无法从DemoDataSourceConfig获取数据库连接

    APIJSONDemo-Druid 无法从DemoDataSourceConfig获取数据库连接

    环境信息

    • 系统: Windows 10
    • JDK: 1.8.0_17
    • 数据库: MySQL 5.7.14
    • APIJSON: 2.9.1

    问题描述

    1. 直接获取APIJSONDemo-Druid 工程代码
    2. 修改application.yml中数据库信息
    3. 项目启动报错,无法获取数据源
    4. 在DemoSQLConfig文件中添加getDBUri/getDBAccount/getDBPassword方法,配置数据库信息【按注释应该不需要配置】
    5. 项目启动成功

    错误信息 2021-08-22 14:39:27.467 INFO 7028 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited 2021-08-22 02:39:27.470: AbstractSQLExecutor.INFO: select connection = null 2021-08-22 02:39:27.470: DemoSQLExecutor.DEBUG: ds.getConnection() = com.mysql.cj.jdbc.ConnectionImpl@37864b77 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at apijson.orm.AbstractSQLExecutor.getConnection(AbstractSQLExecutor.java:740) at apijson.demo.DemoSQLExecutor.getConnection(DemoSQLExecutor.java:57) at apijson.orm.AbstractSQLExecutor.getStatement(AbstractSQLExecutor.java:705) at apijson.orm.AbstractSQLExecutor.executeQuery(AbstractSQLExecutor.java:838) at apijson.orm.AbstractSQLExecutor.execute(AbstractSQLExecutor.java:233) at apijson.orm.AbstractParser.executeSQL(AbstractParser.java:1614) at apijson.orm.AbstractObjectParser.onSQLExecute(AbstractObjectParser.java:845) at apijson.orm.AbstractObjectParser.executeSQL(AbstractObjectParser.java:713) at apijson.orm.AbstractObjectParser.executeSQL(AbstractObjectParser.java:44) at apijson.orm.AbstractParser.onObjectParse(AbstractParser.java:903) at apijson.orm.AbstractObjectParser.onChildParse(AbstractObjectParser.java:517) at apijson.orm.AbstractObjectParser.parse(AbstractObjectParser.java:256) at apijson.orm.AbstractObjectParser.parse(AbstractObjectParser.java:44) at apijson.orm.AbstractParser.onObjectParse(AbstractParser.java:839) at apijson.orm.AbstractParser.onArrayParse(AbstractParser.java:1029) at apijson.orm.AbstractObjectParser.onChildParse(AbstractObjectParser.java:497) at apijson.orm.AbstractObjectParser.parse(AbstractObjectParser.java:256) at apijson.orm.AbstractObjectParser.parse(AbstractObjectParser.java:44) at apijson.orm.AbstractParser.onObjectParse(AbstractParser.java:839) at apijson.orm.AbstractParser.parseResponse(AbstractParser.java:398) at apijson.framework.APIJSONParser.parseResponse(APIJSONParser.java:115) at apijson.framework.APIJSONVerifier.initAccess(APIJSONVerifier.java:164) at apijson.framework.APIJSONVerifier.initAccess(APIJSONVerifier.java:135) at apijson.framework.APIJSONApplication.init(APIJSONApplication.java:78) at apijson.framework.APIJSONApplication.init(APIJSONApplication.java:50) at apijson.demo.DemoApplication.main(DemoApplication.java:69) Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) at com.mysql.cj.NativeSession.connect(NativeSession.java:144) at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:956) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) ... 31 more Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:607) at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ... 34 more com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    Bug 漏洞 
    opened by SLD-Allen 10
  • 多表关联模糊查询时,查询条件顺序错乱bug

    多表关联模糊查询时,查询条件顺序错乱bug

    环境信息

    系统: Windows 10 JDK: 1.8.0_17 数据库: postgresql-12 APIJSON: 5.2.0 APIJSON-framework: 5.2.0 项目:https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONDemo-Druid

    问题描述

    在使用临时表进行多表关联查询,执行如下sql时,查询条件的顺序会颠倒,导致查询报错。

    {
        "[]": {
            "Comment": {  
                "name$": "%a%",
                "content$": "%a%",
                "@combine": "name$,content$", 
                "@from@": {  
                    "from": "Comment",
                    "join": "&/User/id@",
                    "Comment": {},
                    "User": {
                        "id@": "/Comment/userId",
    		    "sex": 1, // 这个条件会和全局条件相调换
                        "@column": "name,sex"  
                    }
                }
            }
        },
        "@explain": true
    }
    

    执行时sql参数顺序乱了,sex=1 变成了 sex=%a% image

    explain返回的sql是正确的 image

    Bug 漏洞 help wanted 
    opened by transtone 9
  • 远程函数对request的修改不生效

    远程函数对request的修改不生效

    Demo项目里自带一个removeKey函数,其描述是“从对象里移除 key” image

    在使用中发现,其移除未生效: image 从返回的sql语句看,name字段没被移除。

    于是我debug了一下,发现removeKey函数确实移除了name字段。 image image

    以上情况令人迷惑。removeKey函数不是这么用得吗?远程调用函数的“字段拼接、结构变换”怎么实现呢? image

    Bug 漏洞 help wanted 
    opened by aldag 8
  • 看到作者在开源中国的帖子,奈何无法回复,特在此开个issue

    看到作者在开源中国的帖子,奈何无法回复,特在此开个issue

    作者想法是非常前卫的,这篇文章是在查 graphql 的资料时看看到的,眼前一亮。 基于几点问题目前还不敢投入产品使用

    1. 是SQL的生成,对于大型项目来说,SQL优化是一个重点,用生成的不好把控(所以很多喜欢MyBatis而不喜欢Hibernate)。
    2. 这个虽然不是基于传统的API,但是却要基于更底层的数据库文档,数据结构前端也需要参与,当然,这是沟通问题。
    3. 对于分布式数据库来说, 有时数据是从不同的服务器取的,这个如果采用这个思路,需要怎么解决跨数据库问题?

    另,看到作者回复的:

    前端的验证是为了减少后端验证,提到响应速度。 比如密码字符、长度、强度如果每次都要后端验证,响应速度慢导致前端体验差。 所以前端验证通过后再交给后端,后端只要做最后一次验证就行了,前面的验证都能无延时响应。 TommyLemon

    有一些不同的意见 对后端来说,原则上是不不能相信任何一个来调用接口的,因为不知道是爬虫调用还是客户端调用,都是可以模拟的。所以原则上后端都要验证一次。

    Question 使用问题 
    opened by cnlinjie 8
  • 跨库查询列表语法

    跨库查询列表语法

    用的postgresql,写在代码中的默认 schema 是 apijson , 此时要查询另外一个 schema dict 中的 user_list 表数据,应该怎么查呢?

    {
        "[]": {	
    	"user_list": {        
    		"@column": "id,user_name",
                    "@schema": "dict",
    	},
            "count": 3,
        },
    }
    

    这样写会报错: 数组 []:{} 中每个 key:{} 都必须是表 TableKey:{} 或 数组 arrayKey[]:{}

    ===============

    经测试,发现有这样的现象:

    1. 修改Access表的内容(name, alias)之后,必须重启程序,否则不生效。
    2. 表的名称不能有下划线,如果有下划线,必须用 alias 。

    满足上面两个条件之后,则可以正常查询。 对于1,用了数据库表还必须重启程序才能生效的做法十分不理解。 对于2,没看到faq里有提到,表名不能包含下划线。

    opened by transtone 7
  • [bug] 远程函数调用拿不到请求体中数据

    [bug] 远程函数调用拿不到请求体中数据

    环境信息

    • 系统: Windows 10
    • JDK: 13
    • 数据库: MySQL 5.7
    • APIJSON: 4.7.0

    问题描述

    使用 APIJSONBoot 示例项目,在 POST Moment 时,pictureList 输入错误的 URL 列表,请求依然成功。但是根据 Request 表中相关行,pictureList 应该会被远程函数 verifyURLList 进行验证。在 verifyURLList 函数下断点,发现调用时 current 为一个空 JSONObject,即请求体没有被正确传入。

    错误信息

    请求与响应 image

    断点截图 image

    原始请求体

    {
     "Moment":{
          "content":"今天天气不错,到处都是提拉米苏雪",
          "userId":1627466921423,
          "pictureList": ["111:/222"]
     },
      "tag":"Moment"
    }
    
    Bug 漏洞 
    opened by jerrylususu 7
  • 线上用了用了快一年得服务,现在突然提示不允许 UNKNOWN 用户的 HEAD 请求!

    线上用了用了快一年得服务,现在突然提示不允许 UNKNOWN 用户的 HEAD 请求!

    去年起的APIJSON服务,今天线上突然提示不允许 UNKNOWN 用户的 HEAD 请求!查看access表啥得都是有配置得,当时表权限配置得就是不需要登录就能,现在APIJSON相关得东西忘得差不多了,根本无从下手,拉代码本地起服务unitauto-jar2.6.3也从maven仓库中移除,变成2.7.2 image image image

    Question 使用问题 Config 配置 
    opened by 12345ZMTHL 6
  • APIJSONBoot Mysql无法自定义的数据库配置

    APIJSONBoot Mysql无法自定义的数据库配置

    环境信息

    • 系统: Windows 10
    • JDK: 1.8.0_17
    • 数据库: MySQL 8.0.25
    • APIJSON: 2.9.1

    问题描述

    @JSONField(serialize = true)  // 不在日志打印 账号/密码 等敏感信息,用了 UnitAuto 则一定要加
    @Override
    public String getDBAccount() {
    	if (isMySQL()) {
    		Log.i(TAG,"-------------------获取账号_________________________");
    		return "Astephen";
    	}
    	return null;
    }
    

    错误信息

    !!!! 查询权限配置异常 !!! Access denied for user 'root'@'localhost' (using password: YES)

    opened by ChinaAstephen 6
  • 查询,如何用表字段表达式来查询

    查询,如何用表字段表达式来查询

    Description

    例如:查询任务表task,查询条件为execute_time > task_time来进行查询(目的是查询执行时间超期的任务),具体sql为select * from task where execute_time > task_time,其中 execute_time、task_time均为表字段。目前apijson查询的时候,如何设置这个查询条件?

    opened by zhouyoutian 1
  • apijson json服务编排

    apijson json服务编排

    Description

    @TommyLemon 功能描述: 一个服务编排的伪码流程设计 将伪码转换为 apijson json、前置、后置函数、javascript、redis、elasticSearch等 并且能够mork每一步,执行中间流程,还能查询每个阶段执行的sql语句,及结果.

    json格式:

    {
        "@transaction": true, 
        "id@-()": "getCurrentUserId()", // 前置函数
        "@post": [
            "xxx"
        ], 
        "xxx": {
         "@method": "xxx",
          "@version": "", // 版本,控制校验
          "@datasource": "" // 数据源相关配置
         // 分表规则等,后面再说
       }
    "@explain": true
    }
    

    1、独立定义一个url method, 通过解析不同method执行不同流程 和已有method区分开,避免歧义 2、最外层新增传参 "transaction": true 来指定开启事务 3、控制每条语句的数据源 4、完善 “@Explain" 如果没有执行计划,则返回sql语句. 能够在 reponse返回值中, 看到json中执行的每条sql,方便排错 5、@version支持 定义不同场景的 新增、修改、删除等执行规则. 请通过version版本区分 6、前置函数

    1. 要能拿到其他数据源
    2. 能拿到json执行过程中的数据
    3. 拿到当前数据源(和外部json一个事物执行)
    4. 从数据库/或其他数据源 查询获取对照关系 组装数据, 调用对应数据源的api方法执行即可
    5. 前置函数,能调用其他函数 把一些计算, 执行,计算 等 放到一个函数进行整合 还没细化 7、支持mork 通过伪码,分解为不同 阶段 的json语句执行

    测试点: 1、测试 一个json多条语句,后置函数啥时候执行 2、操作其他数据源, 事物是json执行完才会提交, 需要保证一致性 3、redis、elasticSearch、javascript、lua等功能测试

    opened by cloudAndMonkey 210
  • [Tencent][Job Interview] TEG interviewer asked APIJSON when interviewing a candidate

    [Tencent][Job Interview] TEG interviewer asked APIJSON when interviewing a candidate

    Description

    https://www.nowcoder.com/discuss/865751?type=2&order=3&pos=24&page=1&ncTraceId=&channel=-1&source_id=discuss_tag_nctrack FF4794A656B9905358D4AAA7C91DF7AF

    Job Interview 面试 
    opened by TommyLemon 0
Releases(5.4.0)
  • 5.4.0(Nov 11, 2022)

    功能

    新增支持分布式 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 作者 等; image

    为什么选择 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 image

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

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

    image Source code(tar.gz)
    Source code(zip)
    APIJSON-5.4.0.jar(205.31 KB)
  • 5.3.0(Oct 17, 2022)

    功能

    新增支持国产达梦数据库 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,非常感谢大家的支持~ image image image image

    Source code(tar.gz)
    Source code(zip)
    APIJSON-5.3.0.jar(201.63 KB)
  • 5.2.0(Aug 8, 2022)

    功能

    新增支持物联网时序数据库 TDengine,对应 Demo APIJSONBoot-MultiDataSource2677A7863B725488AE4FD8B7DC4FEEFB 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发表了优质文章开发了可用的生态项目, 可以在群里发出贡献链接并附带说明,管理员将设置关注你一段时间,优先答疑解惑。 其它群一般解答顺序:贡献者 > 帮助他人的群友 > 带企业名昵称 > 带岗位名昵称 > 其他群友。

    Source code(tar.gz)
    Source code(zip)
    APIJSON-5.2.0.jar(197.71 KB)
  • 5.1.5(Jul 11, 2022)

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

    新增对 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% |

    Source code(tar.gz)
    Source code(zip)
    APIJSON-5.1.5.jar(195.17 KB)
  • 5.1.0(May 3, 2022)

    功能

    请求参数校验: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>
    
    Source code(tar.gz)
    Source code(zip)
    apijson-orm-5.1.0.jar(355.70 KB)
  • 5.0.0(Mar 27, 2022)

    功能

    条件组合新增支持任意逻辑表达式 @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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-5.0.0.jar(353.90 KB)
  • 4.9.1(Feb 6, 2022)

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

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

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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.9.1.jar(323.69 KB)
  • 4.8.3(Jan 4, 2022)

    功能特性

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

    解决 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执行器

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

    其它

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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.8.3.jar(319.62 KB)
  • 4.8.0(Oct 25, 2021)

    新增支持 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% |

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.8.0.jar(311.88 KB)
  • 4.7.2(Jul 31, 2021)

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

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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.7.2.jar(161.62 KB)
  • 4.7.1(Jul 30, 2021)

  • 4.7.0(Jun 14, 2021)

    新增数据源关键词 @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 ;

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.7.0.jar(292.84 KB)
  • 4.6.7(Apr 6, 2021)

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

    文档:

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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.6.7.jar(287.50 KB)
  • 4.6.6(Apr 5, 2021)

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

    Source code(tar.gz)
    Source code(zip)
  • 4.6.5(Mar 27, 2021)

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

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

    Source code(tar.gz)
    Source code(zip)
    APIJSON-4.6.5.jar(161.80 KB)
  • 4.6.1(Mar 20, 2021)

  • 4.6.0(Jan 31, 2021)

    解决 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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.6.0.jar(283.97 KB)
  • 4.5.2(Jan 24, 2021)

    APIJSONORM

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

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

    文档:

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

    Source code(tar.gz)
    Source code(zip)
    apijson-orm-4.5.2.jar(283.42 KB)
  • 4.5.1(Jan 16, 2021)

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

    Source code(tar.gz)
    Source code(zip)
  • 4.5.0(Jan 13, 2021)

    优化代码,感谢 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

    Source code(tar.gz)
    Source code(zip)
  • 4.4.8(Dec 28, 2020)

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

    Source code(tar.gz)
    Source code(zip)
  • 4.4.6(Dec 26, 2020)

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

    Source code(tar.gz)
    Source code(zip)
  • 4.4.5(Dec 26, 2020)

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

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

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

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

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

    Source code(tar.gz)
    Source code(zip)
  • 4.4.0(Dec 13, 2020)

    原始 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~ 替代; 优化报错提示; 优化代码; 升级项目版本号; 更新文档;

    Source code(tar.gz)
    Source code(zip)
  • 4.3.1(Dec 1, 2020)

    解决 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

    Source code(tar.gz)
    Source code(zip)
  • 4.3.0(Nov 28, 2020)

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

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

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

    Source code(tar.gz)
    Source code(zip)
  • 4.2.5(Nov 21, 2020)

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

    Source code(tar.gz)
    Source code(zip)
  • 4.2.4(Nov 14, 2020)

  • 4.2.3(Sep 25, 2020)

    保持版本同步 https://github.com/APIJSON/apijson-orm https://github.com/APIJSON/apijson-framework https://github.com/APIJSON/APIJSON-Demo

    Source code(tar.gz)
    Source code(zip)
Convert Java to JSON. Convert JSON to Java. Pretty print JSON. Java JSON serializer.

json-io Perfect Java serialization to and from JSON format (available on Maven Central). To include in your project: <dependency> <groupId>com.cedar

John DeRegnaucourt 303 Dec 30, 2022
JSON Library for Java with a focus on providing a clean DSL

JSON Library for Java with a focus on providing a clean DSL

Vaishnav Anil 0 Jul 11, 2022
An Engine to run batch request with JSON based REST APIs

JsonBatch An Engine to run batch request with JSON based REST APIs Some usecase for this library: Provide a batch API to your REST API set. Quickly ro

Rey Pham 11 Jan 3, 2022
JSON to JSON transformation library written in Java.

Jolt JSON to JSON transformation library written in Java where the "specification" for the transform is itself a JSON document. Useful For Transformin

Bazaarvoice 1.3k Dec 30, 2022
Generate Java types from JSON or JSON Schema and annotates those types for data-binding with Jackson, Gson, etc

jsonschema2pojo jsonschema2pojo generates Java types from JSON Schema (or example JSON) and can annotate those types for data-binding with Jackson 2.x

Joe Littlejohn 5.9k Jan 5, 2023
Essential-json - JSON without fuss

Essential JSON Essential JSON Rationale Description Usage Inclusion in your project Parsing JSON Rendering JSON Building JSON Converting to JSON Refer

Claude Brisson 1 Nov 9, 2021
A simple java JSON deserializer that can convert a JSON into a java object in an easy way

JSavON A simple java JSON deserializer that can convert a JSON into a java object in an easy way. This library also provide a strong object convertion

null 0 Mar 18, 2022
A 250 lines single-source-file hackable JSON deserializer for the JVM. Reinventing the JSON wheel.

JSON Wheel Have you ever written scripts in Java 11+ and needed to operate on some JSON string? Have you ever needed to extract just that one deeply-n

Roman Böhm 14 Jan 4, 2023
A Java annotation processor used for automatically generating better builder codes.

BetterBuilder BetterBuilder is a Java annotation processor used for automatically generating better builder codes(builder design pattern), which can m

LEO D PEN 9 Apr 6, 2021
A Java serialization/deserialization library to convert Java Objects into JSON and back

Gson Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to a

Google 21.7k Jan 8, 2023
Screaming fast JSON parsing and serialization library for Android.

#LoganSquare The fastest JSON parsing and serializing library available for Android. Based on Jackson's streaming API, LoganSquare is able to consiste

BlueLine Labs 3.2k Dec 18, 2022
A modern JSON library for Kotlin and Java.

Moshi Moshi is a modern JSON library for Android and Java. It makes it easy to parse JSON into Java objects: String json = ...; Moshi moshi = new Mos

Square 8.7k Dec 31, 2022
A universal types-preserving Java serialization library that can convert arbitrary Java Objects into JSON and back

A universal types-preserving Java serialization library that can convert arbitrary Java Objects into JSON and back, with a transparent support of any kind of self-references and with a full Java 9 compatibility.

Andrey Mogilev 9 Dec 30, 2021
High performance JVM JSON library

DSL-JSON library Fastest JVM (Java/Android/Scala/Kotlin) JSON library with advanced compile-time databinding support. Compatible with DSL Platform. Ja

New Generation Software Ltd 835 Jan 2, 2023
Sawmill is a JSON transformation Java library

Update: June 25, 2020 The 2.0 release of Sawmill introduces a breaking change to the GeoIpProcessor to comply with the updated license of the MaxMind

Logz.io 100 Jan 1, 2023
Genson a fast & modular Java <> Json library

Genson Genson is a complete json <-> java conversion library, providing full databinding, streaming and much more. Gensons main strengths? Easy to use

null 212 Jan 3, 2023
Lean JSON Library for Java, with a compact, elegant API.

mJson is an extremely lightweight Java JSON library with a very concise API. The source code is a single Java file. The license is Apache 2.0. Because

Borislav Iordanov 77 Dec 25, 2022
Elide is a Java library that lets you stand up a GraphQL/JSON-API web service with minimal effort.

Elide Opinionated APIs for web & mobile applications. Read this in other languages: 中文. Table of Contents Background Documentation Install Usage Secur

Yahoo 921 Jan 3, 2023
JSON query and transformation language

JSLT JSLT is a complete query and transformation language for JSON. The language design is inspired by jq, XPath, and XQuery. JSLT can be used as: a q

Schibsted Media Group 510 Dec 30, 2022