diff --git a/README.md b/README.md index 09301ddc..43aed2da 100644 --- a/README.md +++ b/README.md @@ -1,914 +1,721 @@ -# 功能点 - -### 一个json(事务)同时支持新增、修改、删除、查询、别名 - -https://github.com/Tencent/APIJSON/issues/468 +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 已加入 腾源会开源摘星计划(WeOpen Star),该计划提供奖励以鼓励你加入我们的社区](https://github.com/weopenprojects/WeOpen-Star/issues/79) + +

+ APIJSON +

+ +

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

+ +

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

+

+ +   +   + + + + + + + + +

+

+ + + +   +   +   + +

+

+ +   +   +

+

+ +   +   +

+

+ +   +   + +

+ +

+ +--- + +导航目录: 项目简介 [上手使用](#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B) [社区生态](#%E6%8A%80%E6%9C%AF%E4%BA%A4%E6%B5%81)      完整详细的导航目录 [点这里查看](/Navigation.md)
+ + +APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。
+为各种增删改查提供了完全自动化的万能通用接口,零代码实时满足千变万化的各种新增和变更需求。
+能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
+适合中小型前后端分离的项目,尤其是 初创项目、内部项目、低代码/零代码、小程序、BaaS、Serverless 等。
+ +通过万能通用接口,前端可以定制任何数据、任何结构。
+大部分 HTTP 请求后端再也不用写接口了,更不用写文档了。
+前端再也不用和后端沟通接口或文档问题了。再也不会被文档各种错误坑了。
+后端再也不用为了兼容旧接口写新版接口和文档了。再也不会被前端随时随地没完没了地烦了。 + +### 特点功能 + +#### 对于后端 +* 提供万能通用接口,大部分 HTTP API 不用再写 +* 零代码增删改查、各种跨库连表、JOIN 嵌套子查询等 +* 自动生成文档,不用再编写和维护,且自动静态检查 +* 自动校验权限、自动管理版本、自动防 SQL 注入 +* 开放 HTTP API 无需划分版本,始终保持兼容 + +#### 对于前端 +* 不用再向后端催接口、求文档 +* 数据和结构完全定制,要啥有啥 +* 看请求知结果,所求即所得 +* 可一次获取任何数据、任何结构 +* 能去除多余数据,节省流量提高速度 + +
+ +### APIJSON 接口展示 +#### Postman 展示 APIJSON +![](https://static.oschina.net/uploads/img/201711/12230359_f7fQ.jpg) +
+ +#### APIAuto 展示 APIJSON +**使用 APIAuto-机器学习接口工具 来管理和测试 HTTP API 可大幅 减少传参错误、提升联调效率**
+(注意网页工具界面是 APIAuto,里面的 URL+JSON 才是 APIJSON 的 HTTP API):
+
+

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

+ +![](https://oscimg.oschina.net/oscnet/up-bbbec4fc5edc472be127c02a4f3cd8f4ec2.JPEG) +![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_query_associate.gif) + +
+

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

+ +![](https://oscimg.oschina.net/oscnet/up-637193bbd89b41c3264827786319e842aee.JPEG) + +
+

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

+ +![](https://oscimg.oschina.net/oscnet/up-7dcb4ae71bd3892a909e4ffa37ba7c1d92a.JPEG) + +
+

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

-#### 使用说明 - -json支持多种方式定义method +![](https://oscimg.oschina.net/oscnet/up-c1ba774f8e7fcc5adcdb05cad5bd414d766.JPEG) -第一种: +
+

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

- "@post","@put","@delete","@head","@get","@gets","@head","@heads" +![](https://oscimg.oschina.net/oscnet/up-e21240ef3770326ee6015e052226d0da184.JPEG) +![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_query_summary.gif) -"@post": ["Moment","Comment[]"] , 值为数组格式, 每个value = key -需要保证每个key唯一, 唯一判断标准: +

-key = Moment - -key= Moment[] - -会判断为相同key. 请通过别名区分, 别名格式: Sys_user_role:sur xxx表名:别名 - -``` -{ - "@post": ["Moment","Comment:cArray[]","User:u"], // 分发到 POST 请求对应的解析处理 - "Moment": { - // TODO 其它字段 - }, - "Comment:cArray[]": [ - { - // TODO 其它字段 - } - ], - "@get": ["User"], // 分发到 GET 请求对应的解析处理 - "User:u": { - // TODO 其它字段 - }, - "Privacy": { // 按 URL 对应的默认方法处理 - // TODO 其它字段 - } -} +### APIJSON App 演示 +使用 APIJSON + ZBLibrary 开发的 Android 客户端 Demo (以下 Gif 图看起来比较卡,实际上运行很流畅): +
+![](https://oscimg.oschina.net/oscnet/up-a3f167e593080e8a3fc09c3d5fc09330c98.gif) +![](https://oscimg.oschina.net/oscnet/up-141abcb5dabc01c890d70c461bd1fdc751f.gif) +![](https://oscimg.oschina.net/oscnet/up-58aecc2701c2c4ea33e53f246e427773b09.gif) -对于没有显式声明操作方法的,直接用 URL(/get, /post 等) 对应的默认操作方法 +
-``` +### APIJSON 分享演讲 +#### APIJSON-零代码接口与文档 ORM 库(国际开源谷 Gitee Meetup) -第二种: +https://www.bilibili.com/video/BV1Tv411t74v -对象内定义"@method": "GET", value大写 +![image](http://apijson.cn/images/comparison/APIJSON_vs_PreviousWays.jpg) -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "角色1" - } - }, - "Sys_user_role:sur[]": { - "@method": "GET", - "Sys_user_role": { - "role_id{}@": "sql" - } - }, - "Sys_role_permission:srp[]": { - "@method": "GET", - "Sys_role_permission": { - "role_id{}@": "sql" - } - }, - "@explain": true -} -``` -#### 解析顺序 +#### APIJSON 和 APIAuto-零代码开发和测试(QECon 全球软件质量&效能大会) -1) 对象内 "@method" -2) "@post","@put","@delete" -3) 对于没有显式声明操作方法的,直接用 URL(/get, /post 等) 对应的默认操作方法 +https://www.bilibili.com/video/BV1yv411p7Y4 -#### tag自动生成规则 +wecom-temp-377bbd0daf5aed716baf7ebcb003d94c -/** - * { "xxx:aa":{ "@tag": "" }} - * 生成规则: - * 1、@tag存在,tag=@tag - * 2、@tag不存在 - * 1)、存在别名 - * key=对象: tag=key去除别名 - * key=数组: tag=key去除别名 + [] - * 2)、不存在别名 - * tag=key - * tag=key + [] - */ +
-![image](https://user-images.githubusercontent.com/12228225/204079184-06dd08a7-95a3-4a46-8e05-f062fa406847.png) +### 为什么选择 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](https://user-images.githubusercontent.com/5738175/167264836-9c5d8f8a-99e1-4e1e-9864-e8f906b8e704.png) -1. 一个json包含不同操作方法, url method 使用 /post, /put -2. value为JSONArray, 建议通过"@post" 方式配置, 如果没有配置,执行 3 +### 用户反馈 +**腾讯 IEG 数据产品开发组负责人 xinlin:** +“腾讯的 APIJSON 开源方案,它可以做到零代码生成接口和文档,并且整个生成过程是自动化。当企业有元数据的时候,马上就可以获得接口” -#### Request表 配置说明 +**腾讯科技 后台开发高级工程师 雷大锤:** +“可以抽出时间来看apijson了,这个可以为T10做准备,也是业界很火的东西,可以提升个人影响力!” -这只是我的配置仅供参考, 后续 测试会用到: +**腾讯 bodian520:** +“在调试GET、POST、PUT接口时遇到了一些问题,把个人的摸索经验分享一下,希望作者能梳理下文档,方便我们更好的接入” + +**华为 minshiwu:** +“demo工程,默认使用apijson-framework,可以做到无任何配置即可体验apijson的各种能力。” + +**字节跳动 qiujunlin:** +“初次见到这个项目,觉得太惊艳了,眼前一亮。给我的感受是,项目大大简化了开发流程,开发效率提升了很多倍。” + +**百度智慧城市研发 lpeng:** +“很兴奋的发现APIJSON很适合我们的一个开发场景,作为我们协议定义的一部分” + +**中兴 duyijiang:** +“感谢腾讯大大提供的框架,很好用” + +https://github.com/Tencent/APIJSON/issues/132#issuecomment-1106669540 + +
+ +### 常见问题 +#### 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 中表名、字段名、关键词及对应的值都是大小写敏感、逗号敏感、分号敏感、空格敏感、换行敏感,
+大部分情况都不允许空格和换行,表名以大写字母开头,不要想当然,请严格按照 [设计规范](https://github.com/Tencent/APIJSON/blob/master/Document.md#3) 来调用 API !** +[#181](https://github.com/Tencent/APIJSON/issues/181) +
+
+
+
+ +导航目录: [项目简介](#--apijson) 上手使用 [社区生态](#%E6%8A%80%E6%9C%AF%E4%BA%A4%E6%B5%81)      完整详细的导航目录 [点这里查看](/Navigation.md)
+ +### 快速上手 + +#### 1.后端上手 +可以跳过这个步骤,直接用APIJSON服务器IP地址 apijson.cn:8080 来测试接口。
+见  [APIJSON后端上手 - Java](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server)
+ +#### 2.前端上手 +可以跳过这个步骤,直接使用 [APIAuto-机器学习HTTP接口工具](https://github.com/TommyLemon/APIAuto) 或 下载客户端App。
+见  [Android](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Android)  或  [iOS](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-iOS)  或  [JavaScript](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-JavaScript)
+ + +### 下载客户端 App + +仿微信朋友圈动态实战项目
+[APIJSONApp.apk](http://files.cnblogs.com/files/tommylemon/APIJSONApp.apk) + +测试及自动生成代码工具
+[APIJSONTest.apk](http://files.cnblogs.com/files/tommylemon/APIJSONTest.apk) + +### 开源许可 +使用 [Apache License 2.0](/LICENSE),对 公司、团队、个人 等 商用、非商用 都自由免费且非常友好,请放心使用和登记 + +### 使用登记 +如果您在使用 APIJSON,请让我们知道,您的使用对我们非常重要(新的按登记顺序排列、专群优先答疑解惑):
+https://github.com/Tencent/APIJSON/issues/187 +
+ + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + * [腾讯科技有限公司](https://www.tencent.com) + * [腾讯音乐娱乐集团](https://www.tencentmusic.com) + * [深圳市传音通讯有限公司](https://www.transsion.com) + * [社宝信息科技(上海)有限公司](https://shebaochina.com) + * [华能贵诚信托有限公司](https://www.hngtrust.com) + * [投投科技](https://www.toutou.com.cn) + * [圆通速递](https://www.yto.net.cn) + * [乐拼科技](https://www.lepinyongche.com) + * [珠海采筑电子商务有限公司](https://www.aupup.com) + * [上海信息出奇科技有限公司](https://www.masscms.com) + * [爱投斯智能技术(深圳)有限公司](http://www.aiotos.net) + +### 贡献者们 +主项目 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
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +还有为 APIJSON 扫描代码贡献 Issue 的 [奇安信代码卫士](https://github.com/QiAnXinCodeSafe) 和 [源伞科技](https://www.sourcebrella.com) +
+ + +
+
+ +感谢大家的贡献。 + +### 统计分析 +国内腾讯、华为、阿里巴巴、美团、字节跳动、百度、京东、网易、快手等 和 国外 Google, Microsoft, Amazon, Paypal, IBM, Shopee 等
+数百名知名大厂员工点了 Star,也有腾讯、华为、字节跳动、Microsoft、Zoom 等不少知名大厂员工提了 PR/Issue,非常感谢大家的支持~
+[![Stargazers over time](https://starchart.cc/Tencent/APIJSON.svg)](https://starchart.cc/Tencent/APIJSON) +image +image +image + + + +### 规划及路线图 +新增功能、强化安全、提高性能、增强稳定、完善文档、丰富周边、推广使用
+https://github.com/Tencent/APIJSON/blob/master/Roadmap.md + +理论上所有支持 SQL 与 JDBC/ODBC 的软件,都可以用本项目对接 CRUD,待测试:
+[Elasticsearch](https://www.elastic.co/cn/what-is/elasticsearch-sql), [OceanBase](https://www.oceanbase.com/docs/oceanbase/V2.2.50/ss-sr-select_daur3l), [Spark](https://spark.apache.org/docs/3.3.0/sql-ref-syntax-qry-select.html)(可用 Hive 对接), [Phoenix](http://phoenix.apache.org/language/index.html#select)(延伸支持 HBase) + +### 我要赞赏 +创作不易,坚持更难,右上角点 ⭐Star 来支持/收藏下吧,谢谢 ^_^
+ +
+
+
+ +导航目录: [项目简介](#--apijson) [上手使用](#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B) 社区生态      完整详细的导航目录 [点这里查看](/Navigation.md)
+ +### 技术交流 +如果有什么问题或建议可以 [填问卷](https://wj.qq.com/s2/10971431/2a09) 或 [提 Issue](https://github.com/Tencent/APIJSON/issues/36),交流技术,分享经验。
+如果你解决了某些 bug,或者新增了一些功能,欢迎 [贡献代码](https://github.com/Tencent/APIJSON/pulls),感激不尽~
+https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md + +**开发者也是人,也需要工作、休息、恋爱、陪伴家人、走亲会友等,也有心情不好和身体病痛,**
+**往往没有额外的时间精力顾及一些小问题,请理解和支持,开源要大家参与贡献才会更美好~**
+**少数个人的热情终有被耗尽的一天,只有大家共同建设和繁荣社区,才能让开源可持续发展!**
-``` -单条新增: -POST User_address {"MUST":"addr","UPDATE": {"@role": "OWNER,ADMIN","childFunTest-()": "childFunTest(addr)"}, "REFUSE": "id"} -批量新增: -POST User_address[] {"User_address[]": [{"MUST":"addr","REFUSE": "id"}], "UPDATE": {"@role": "OWNER,ADMIN","childFunTest-()": "childFunTest(addr)"}} -单条修改: -PUT User_address {"User_address":{ "MUST":"id","REFUSE": "userId", "UPDATE": {"@role": "OWNER,ADMIN","childFunTest-()": "childFunTest(addr)"}} } -批量修改: -PUT User_address[] {"User_address[]": [{"MUST": "id","REFUSE": "userId"}], "UPDATE": {"@role": "OWNER,ADMIN"}} -删除: -DELETE User_address {"User_address":{ "MUST":"id{}","REFUSE": "!", "INSERT": {"@role": "OWNER,ADMIN"}} } +**QQ 技术群**: 请在常见问题 Issue 中查找
-``` -![image](https://user-images.githubusercontent.com/12228225/204079438-8f352496-4b73-4b72-88c0-914894335074.png) +**开发者时间精力有限,原则上优先解决 登记用户 和 贡献者 的问题,**
+**不解决 文档/视频/常见问题 已明确说明、描述简陋 或 态度无礼 的问题!**
+**如果你已经多次得到帮助,却仍然只索取不贡献,那就别指望大家再帮你!**
+**私聊作者请教技术问题 或者 频繁在互助群 @ 作者 可能会被拉黑/禁言/踢群,请尊重和理解,谢谢!**
+如果你 [提 PR 登记了自己使用 APIJSON 的公司](https://github.com/Tencent/APIJSON/issues/187),可以加 **企业用户支持专群**,作者亲自且优先答疑,
+作者只有解答完了这个专群里的全部问题,才看情况解答 Issue 里的问题(对 Issue 不保证解答、更不保证及时);
+其它群为互助群,由于大多数问题 在文档/Issue 已有答案却反复提 或者 缺少必要信息要来来回回沟通问清细节 已浪费太多时间,
+甚至有白嫖还把自己当大爷的自私自利伸手党输出情绪,作者不再解答互助群问题,由群友互助解答,建议未登记企业的用户 [填问卷](https://wj.qq.com/s2/10971431/2a09) 或 [提 Issue](https://github.com/Tencent/APIJSON/issues/36)。
+如果你为 APIJSON 做出了以下任何一个贡献:
+[提交了 PR 且被合并](https://github.com/Tencent/APIJSON/pull/92)、[提交了优质 Issue](https://github.com/Tencent/APIJSON/issues/189)、[发表了优质文章](https://blog.csdn.net/qq_41829492/article/details/88670940)、[开发了可用的生态项目](https://github.com/zhangchunlin/uliweb-apijson),
+可以在群里发出贡献链接并附带说明,管理员将设置关注你一段时间,优先答疑解惑。
+互助群一般解答顺序:贡献者 > 帮助他人的群友 > 带企业名昵称 > 带岗位名昵称 > 其他群友。 + -### 别名 +### 相关推荐 +[APIJSON, 让接口和文档见鬼去吧!](https://my.oschina.net/tommylemon/blog/805459) -格式: +[腾讯业务百万数据 6s 响应,APIJSON 性能优化背后的故事](https://my.oschina.net/tommylemon/blog/5375645) -Sys_user_role:sur xxx表名:别名 +[仿QQ空间和微信朋友圈,高解耦高复用高灵活](https://my.oschina.net/tommylemon/blog/885787) -Comment:cArray[] +[后端开挂:3行代码写出8个接口!](https://my.oschina.net/tommylemon/blog/1574430) -#### 实现思路 +[后端自动化版本管理,再也不用改URL了!](https://my.oschina.net/tommylemon/blog/1576587) -当时参考了作者的示例: 注册流程. 看到绕过校验, 可以将多条json语句组装在一起, 批量执行. 于是就想如何实现一个json支持不同操作方法,并支持事物. +[3步创建APIJSON后端新表及配置](https://my.oschina.net/tommylemon/blog/889074) -通过分析源码, 熟悉了校验流程、json解析执行流程、json解析生成sql语句流程、一些兼容、校验规则等 +[APIJSON对接分布式HTAP数据库TiDB](https://asktug.com/t/htap-tidb/395) -经过和作者讨论, 很感谢作者提供了相关解决方案和思路. 逐步理解了apijson的设计原理和框架结构. +[APIJSON教程(一):上手apijson项目,学习apijson语法,并实现持久层配置](https://zhuanlan.zhihu.com/p/375681893) -一个json(事务)同时支持新增、修改、删除、查询、别名, 实现思路如下: +[apijson简单demo](https://blog.csdn.net/dmw412724/article/details/113558115) -1、校验模块 +[apijson简单使用](https://www.cnblogs.com/greyzeng/p/14311995.html) -将json解析成对象、临时变量、子查询、别名、tag等 +[APIJSON简单部署和使用](https://blog.csdn.net/m450744192/article/details/108462611) -并将method 添加到 json对象属性中. +[学习自动化接口APIJSON](https://www.jianshu.com/p/981a2a630c7b) -``` -"Sys_role": { - "@method": "PUT", - "id": "6aedce0d-2a29-4fbe-aeed-0ba935ca6b41", - "id{}@": "sql", - "role_code": "code-subrange-4", - "role_name": "角色-subrange-4" - } -``` +[APIJSON 接口调试实践](https://github.com/Tencent/APIJSON/issues/189) + +[关于APIJSON远程函数](https://mp.weixin.qq.com/s?__biz=Mzg3NTc1NDUyNA==&mid=2247483950&idx=1&sn=b11e70bdf083c55d72238e107449ae2e&chksm=cf3de75df84a6e4b3a4acd0846531b0bd12bc90379523fbaf6b4f900fc3cdc1b1ce3eff97fd9&scene=178&cur_album_id=2548737392338354178#rd) + +[APIJSON新增方法实例](https://cloud.tencent.com/developer/article/2098890) + +[APIJSON-APIJSON的那些事儿](https://cloud.tencent.com/developer/article/2098888) -2、对象解析 +[APIJSON-零代码接口和文档 JSON 协议 与 ORM 库](https://cloud.tencent.com/developer/article/2077042) -用对象属性@method , 替换 Parser 的 method +[APIJSON使用例子总结](https://blog.csdn.net/weixin_41077841/article/details/110518007) -3、事物支持 +[APIJSON 自动化接口和文档的快速开发神器 (一)](https://blog.csdn.net/qq_41829492/article/details/88670940) -### 后续优化建议 +[APIJSON在mac电脑环境下配置去连接SQL Server](https://juejin.im/post/5e16d21ef265da3e2e4f4956) -1、独立定义一个url method, 通过解析不同method执行不同流程 +[APIJSON复杂业务深入实践(类似12306订票系统)](https://blog.csdn.net/aa330233789/article/details/105309571) -和已有method区分开,避免歧义 +[全国行政区划数据抓取与处理](https://www.xlongwei.com/detail/21032616) -2、最外层新增传参 "transaction": true 来指定开启事务 -目前是url put、post来控制开启事物, 以及提交的时候 在 AbstractParser onCommit 判断 transactionIsolation (4 : 开启事物, 0: 非事物请求) +[新手搭建 APIJSON 项目指北](https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md) -![image](https://user-images.githubusercontent.com/12228225/204079532-26d9cd4b-d2d7-4c73-9f78-f425bbbcf623.png) +[使用APIJSON写低代码Crud接口](https://blog.csdn.net/weixin_42375862/article/details/121654264) + +[apijson在同一个接口调用中 使用远程函数写入更新时间和创建时间](https://blog.csdn.net/qietingfengsong/article/details/124097229) -详细实现请参见: https://github.com/Tencent/APIJSON/issues/468 +[APIJSON(一:综述)](https://blog.csdn.net/qq_50861917/article/details/120556168) -3、完善 "[@Explain](https://github.com/Explain)" +[APIJSON 代码分析(三:demo主体代码)](https://blog.csdn.net/qq_50861917/article/details/120751630) -如果没有执行计划,则返回sql语句. 能够在 reponse返回值中, 看到json中执行的每条sql,方便排错 +[APIJSON 代码分析(二)AbstractParser类(解析器)](https://blog.csdn.net/weixin_45767055/article/details/120815927) -![image](https://user-images.githubusercontent.com/12228225/204079543-be464f67-a80f-4a33-87ea-d1870908e642.png) +[APIJSON 代码分析(四:AbstractObjectParser源码阅读)](https://blog.csdn.net/qq_50861917/article/details/120896381) -4、@version支持 +[APIJSON 代码分析 AbstractSQLConfig 第二篇](https://blog.csdn.net/csascscascd/article/details/120684889) -定义不同场景的 新增、修改、删除等执行规则. 请通过version版本区分 +[APIJSON 代码分析(六)APIJSON—Verifier检查类](https://blog.csdn.net/weixin_45767055/article/details/121321731) -Request表是通过tag、method、version来保证唯一. +[APIJSON 代码分析(四)AbstractSQLExecutor—SQL执行器](https://blog.csdn.net/weixin_45767055/article/details/121069887) -![image](https://user-images.githubusercontent.com/12228225/204079562-00449c38-42b1-4d9c-b562-2d56c77e6218.png) + +### 生态项目 +[APIJSON-Demo](https://github.com/APIJSON/APIJSON-Demo) APIJSON 各种语言、各种框架 的 使用示例项目、上手文档、测试数据 SQL 文件 等 -5、前置函数 +[apijson-orm](https://github.com/APIJSON/apijson-orm) APIJSON ORM 库,可通过 Maven, Gradle 等远程依赖 -前置函数能够将json语句, 加入到 当前事物中. +[apijson-framework](https://github.com/APIJSON/apijson-framework) APIJSON 服务端框架,通过数据库表配置角色权限、参数校验等,简化使用 -例如: 像数组一样,解析成每一条语句去执行. +[apijson-router](https://github.com/APIJSON/apijson-router) APIJSON 的路由插件,可控地对公网暴露类 RESTful 简单接口,内部转成 APIJSON 格式请求来执行。 + +[apijson-column](https://github.com/APIJSON/apijson-column) APIJSON 的字段插件,支持 字段名映射 和 !key 反选字段 -### mysql8 with-as表达式 +[APIAuto](https://github.com/TommyLemon/APIAuto) 敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释 -#### 前提条件 +[UnitAuto](https://github.com/TommyLemon/UnitAuto) 机器学习单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性和可用性 -1、mysql版本: 8+ +[SQLAuto](https://github.com/TommyLemon/SQLAuto) 智能零代码自动化测试 SQL 语句执行结果的数据库工具 -2、mysql-connector-java: 8.0.31 +[apijson-doc](https://github.com/vincentCheng/apijson-doc) APIJSON 官方文档,提供排版清晰、搜索方便的文档内容展示,包括设计规范、图文教程等 -版本支持 with-as即可 +[APIJSONdocs](https://github.com/ruoranw/APIJSONdocs) APIJSON 英文文档,提供排版清晰的文档内容展示,包括详细介绍、设计规范、使用方式等 -3、druid: 1.2.15 +[apijson.org](https://github.com/APIJSON/apijson.org) APIJSON 官方网站,提供 APIJSON 的 功能简介、登记用户、作者与贡献者、相关链接 等 -版本支持 with-as即可 +[APIJSON.NET](https://github.com/liaozb/APIJSON.NET) C# 版 APIJSON ,支持 MySQL, PostgreSQL, SQL Server, Oracle, SQLite -4、去掉 durid wall配置 +[apijson-go](https://github.com/glennliao/apijson-go) Go 版 APIJSON , 基于Go(>=1.18) + GoFrame2, 支持查询、单表增删改、权限管理等 + +[apijson-go](https://gitee.com/tiangao/apijson-go) Go 版 APIJSON ,支持单表查询、数组查询、多表一对一关联查询、多表一对多关联查询 等 -delete子查询, druid wall 拦截器报错 sql injection violation +[apijson-hyperf](https://github.com/kvnZero/hyperf-APIJSON.git) PHP 版 APIJSON,基于 Hyperf 支持 MySQL -![image](https://user-images.githubusercontent.com/12228225/204079572-19a4f50c-3bf3-4f9e-9677-6aa191276fef.png) +[APIJSON-php](https://github.com/xianglong111/APIJSON-php) PHP 版 APIJSON,基于 ThinkPHP,支持 MySQL, PostgreSQL, SQL Server, Oracle 等 -#### 测试案例 +[apijson-php](https://github.com/qq547057827/apijson-php) PHP 版 APIJSON,基于 ThinkPHP,支持 MySQL, PostgreSQL, SQL Server, Oracle 等 -#### 查询单个range ref引用 +[apijson-node](https://github.com/kevinaskin/apijson-node) 字节跳动工程师开源的 Node.ts 版 APIJSON,提供 nestjs 和 typeorm 的 Demo 及后台管理 -``` -// 测试 mysql8 with as表达式 -// 用户表 -// 用户角色表 -// 角色表 -// 示例一 单个range ref引用 -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "角色1" - } - }, - "Sys_user_role:sur[]": { - "@method": "GET", - "Sys_user_role": { - "role_id{}@": "sql" - } - }, - "Sys_role_permission:srp[]": { - "@method": "GET", - "Sys_role_permission": { - "role_id{}@": "sql" - } - }, - "@explain": true -} - -// 第二种写法 -{ - "@get": ["sql@","Sys_user_role:sur[]","Sys_role_permission:srp[]"], - "sql@": { - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "角色1" - } - }, - "Sys_user_role:sur[]": { - "Sys_user_role": { - "role_id{}@": "sql" - } - }, - "Sys_role_permission:srp[]": { - "Sys_role_permission": { - "role_id{}@": "sql" - } - }, - "@explain": true -} -``` - -mysql8执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079581-bf835db2-30ae-4265-bda2-ebf34c0d9e77.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079594-3ebc73a0-836e-4073-9aa4-acb665fe8d52.png) - - -#### 查询多个range ref引用 - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "角色1" - } - }, - "sql_user@": { - "@method": "GET", - "with": true, - "from": "Sys_user", - "Sys_user": { - "@column": "id", - "id": "f0894db2-6940-4d89-a5b2-4405d0ad0c8f" - } - }, - "Sys_user_role:sur[]": { - "@method": "GET", - "Sys_user_role": { - "role_id{}@": "sql", - "user_id{}@": "sql_user" - } - }, - "Sys_role_permission:srp[]": { - "@method": "GET", - "Sys_role_permission": { - "role_id{}@": "sql" - } - }, - "@explain": true -} -``` - -mysql8执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079603-2ba224a3-3174-491a-a71b-7656c97d0146.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079611-155f6a33-ad56-4d03-8e5d-6f44c3649051.png) - -#### delete子查询 - -```j s -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role_permission", - "Sys_role_permission": { - "@column": "id", - "role_id{}": ["e7129d5f-b07e-4996-9965-9528e370a393"] - } - }, - "Sys_role_permission": { - "@method": "DELETE", - "id{}@": "sql" - }, - "explan": true -} - -``` - -![image](https://user-images.githubusercontent.com/12228225/204079615-25185be5-a296-488f-9a13-98fb2b99a9d5.png) - -mysql8执行sql语句: - -``` -WITH `sql` AS (SELECT `id` FROM `housekeeping`.`Sys_role_permission` WHERE ( (`role_id` IN ('68877ee9-4cf4-4f32-86e6-16c505ca3b21')) ) ) DELETE FROM `housekeeping`.`Sys_role_permission` WHERE ( (`id` IN ( SELECT * FROM `sql`) ) ) - -Plain Text -``` - -mysql5.7执行结果: - -``` -DELETE FROM `housekeeping`.`Sys_role_permission` WHERE ( (`id` IN ( SELECT * FROM (SELECT `id` FROM `housekeeping`.`Sys_role_permission` WHERE ( (`role_id` IN ('20d337bb-9886-455f-8dce-f1cadab0ec4f')) ) ) AS `sql`) ) ) - - - -Plain Text -``` - -#### update子查询 - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role_permission", - "Sys_role_permission": { - "@column": "role_id", - "id{}": ["6aedce0d-2a29-4fbe-aeed-0ba935ca6b41"] - } - }, - "Sys_role": { - "@method": "PUT", - "id": "6aedce0d-2a29-4fbe-aeed-0ba935ca6b41", - "id{}@": "sql", - "role_code": "code-subrange-4", - "role_name": "角色-subrange-4" - }, - "@explain": true -} - -第二种写法 -{ - "@get": ["sql@"], - "sql@": { - "with": true, - "from": "Sys_role_permission", - "Sys_role_permission": { - "@column": "role_id", - "id{}": ["c95ef2d6-bf14-42b0-bb87-038cee8c78f1"] - } - }, - "@put": ["Sys_role"], - "Sys_role": { - "id": "0bb92d96-8ca6-469e-91e8-60308ce5b835", - "id{}@": "sql", - "role_code": "code-subrange-4", - "role_name": "角色-subrange-4" - }, - "@explain": true -} -``` - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079628-8536b4be-8078-42a5-b3f7-460159372a8a.png) - - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079633-df9175bc-703f-4997-95f6-85bbc1134b0b.png) - -#### GETS 单条子查询 - -会执行校验流程 - -``` -http://localhost:8675/lowCodePlatform/forms/api/gets - -{ - "sql@": { - "with": true, - "from": "Sys_user_role", - "Sys_user_role": { - "@column": "role_id", - "user_id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_role[]": { - "Sys_role": { - "id{}@": "sql" - }, - "page": 0, - "count": 10, - "query": 2 - }, - "tag":"Sys_role[]", - "total@": "/Sys_role[]/total", - "@explain": true -} - -第二种写法 -{ - "@gets": ["sql@","Sys_role[]"], - "sql@": { - "with": true, - "from": "Sys_user_role", - "Sys_user_role": { - "@column": "role_id", - "user_id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_role[]": { - "Sys_role": { - "id{}@": "sql" - }, - "page": 0, - "count": 10, - "query": 2 - }, - "tag":"Sys_role[]", - "total@": "/Sys_role[]/total", - "@explain": true -} - -``` - -Access、Request需要配置鉴权信息: - -![image](https://user-images.githubusercontent.com/12228225/204079649-510a047b-2b8e-44d2-a32a-f6ea0e7f6a74.png) - - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079657-6e62872a-2f29-478e-a29b-bcb0a92781a6.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079878-a9885b86-5a44-4ba2-b837-66adc43b07d3.png) - -#### GETS多条子查询 - -会执行校验流程 - -``` -http://localhost:8675/lowCodePlatform/forms/api/gets - -{ - "sql@": { - "@method": "GETS", - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "超级管理员" - } - }, - "sql_user@": { - "@method": "GETS", - "with": true, - "from": "Sys_user", - "Sys_user": { - "@column": "id", - "id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_user_role:sur[]": { - "@method": "GETS", - "Sys_user_role": { - "role_id{}@": "sql", - "user_id{}@": "sql_user" - } - }, - "Sys_role_permission:srp[]": { - "@method": "GETS", - "Sys_role_permission": { - "role_id{}@": "sql" - } - }, - "@explain": true -} - -``` - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079892-bc71eb65-cfbd-4c3c-bda9-4b31902058ba.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079897-521a763f-bb08-44af-92c6-5e4117fe9d33.png) - -#### head 单个子查询 - -普通获取数量, get/head不执行校验流程 - -``` -http://localhost:8675/lowCodePlatform/forms/api/head -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_user_role", - "Sys_user_role": { - "@column": "role_id", - "user_id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_role": { - "@method": "head", - "id{}@": "sql" - }, - "@explain": true -} - -``` - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079903-e397a78a-1849-4678-ac41-0611165a1de1.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079908-1efb5b28-889d-4d9b-b4f9-5092925888c9.png) - -#### head 多个子查询 - -普通获取数量, get/head不执行校验流程 - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "超级管理员" - } - }, - "sql_user@": { - "@method": "GET", - "with": true, - "from": "Sys_user", - "Sys_user": { - "@column": "id", - "id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_user_role": { - "@method": "HEAD", - "role_id{}@": "sql", - "user_id{}@": "sql_user" - }, - "Sys_role_permission": { - "@method": "HEAD", - "role_id{}@": "sql" - }, - "@explain": true -} - -``` - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079919-5fba8f87-56d8-4d7d-b457-4a2505f27d1e.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079932-1e040caf-57fd-45a7-afa5-b26bdce83fba.png) - -#### heads 单个子查询 - -普通获取数量 +[uliweb-apijson](https://github.com/zhangchunlin/uliweb-apijson) Python 版 APIJSON,支持 MySQL, PostgreSQL, SQL Server, Oracle, SQLite 等 -会执行校验流程, Access、Request需要配置鉴权信息: -![image](https://user-images.githubusercontent.com/12228225/204079942-d790a3c0-eb46-4512-bb58-45a16894608a.png) +[APIJSONParser](https://github.com/Zerounary/APIJSONParser) 第三方 APIJSON 解析器,将 JSON 动态解析成 SQL -``` -http://localhost:8675/lowCodePlatform/forms/api/heads +[FfApiJson](https://gitee.com/own_3_0/ff-api-json) 用 JSON 格式直接生成 SQL,借鉴 APIJSON 支持多数据源 -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_user_role", - "Sys_user_role": { - "@column": "role_id", - "user_id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_role": { - "@method": "heads", - "id{}@": "sql" - }, - "@explain": true -} - -``` - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079952-976fa9b6-4a11-40ad-a2c7-6f901b186670.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079959-6bf95b45-5f35-474e-b428-b51bcb5b500d.png) - -#### heads 多个子查询 - -会执行校验流程, Access、Request需要配置鉴权信息: - -![image](https://user-images.githubusercontent.com/12228225/204079967-a48f4f50-6e6b-476b-a281-b072ef8a352d.png) - -普通获取数量 - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role", - "Sys_role": { - "@column": "id", - "role_name": "超级管理员" - } - }, - "sql_user@": { - "@method": "GET", - "with": true, - "from": "Sys_user", - "Sys_user": { - "@column": "id", - "id": "4732209c-5785-4827-b532-5092f154fd94" - } - }, - "Sys_user_role": { - "@method": "HEADS", - "role_id{}@": "sql", - "user_id{}@": "sql_user" - }, - "Sys_role_permission": { - "@method": "HEADS", - "role_id{}@": "sql" - }, - "@explain": true -} - -``` - -mysql8执行sql语句: - -![image](https://user-images.githubusercontent.com/12228225/204079980-c93ef595-0c4b-42a7-a3b3-1e7402d3cb13.png) - -mysql5.7执行结果: - -![image](https://user-images.githubusercontent.com/12228225/204079987-878d5937-3f42-4f59-93dc-b5a840f5548c.png) - -### delete、put 支持子查询 - -https://github.com/Tencent/APIJSON/issues/471 - -静态变量做全局处理,特殊接口用 Operation.MUST id/id{}/id{}@ 做自定义处理。 - -之所以默认必传,是因为安全意识不够、编码粗心大意的人太多了,所以要有一个底线保障,尽可能避免安全隐患。 - -1、全局配置 为 PUT, DELETE 强制要求必须有 id/id{}/id{}@ 条件 - -AbstractVerifier.IS_UPDATE_MUST_HAVE_ID_CONDITION = true; // true: 必须有 - -![image](https://user-images.githubusercontent.com/12228225/204080001-eef4ee65-0ad0-4a41-93ba-9b16cd1c2e0e.png) - -2、细粒度控制 - -![image](https://user-images.githubusercontent.com/12228225/204080012-f7d781e9-0a53-461f-84db-3d6ecb167e20.png) - -#### 使用说明 - -``` -// 条件删除 -{ - "User:del": { - "username": "test3" - }, - "tag": "User", - "explain": true -} - -// 引用id{}@删除 -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_user_role", - "Sys_user_role": { - "@column": "user_id", - "role_id{}": ["023e1880-c0d4-4e7c-ae6c-7703199c2daf"] - } - }, - "Sys_user:aa": { - "@method": "DELETE", - "id{}@": "sql" - }, - "explan": true -} -// 子查询条件删除 -http://localhost:8675/lowCodePlatform/forms/api/delete -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "User", - "User": { - "@column": "username", - "username": "test-3" - } - }, - "User": { - "username{}@": "sql" - }, - "explan": true -} - -第二种写法: -{ - "@get": ["sql@"], - "sql@": { - "with": true, - "from": "User", - "User": { - "@column": "username", - "username": "test4" - } - }, - "User": { - "username{}@": "sql" - }, - "explan": true -} - - -``` - - - -开启id删除, 删除失败: - -``` -{ - "@get": ["sql@"], - "sql@": { - "with": true, - "from": "User", - "User": { - "@column": "username", - "username": "test4" - } - }, - "User": { - "username{}@": "sql" - }, - "explan": true -} -``` - -![image](https://user-images.githubusercontent.com/12228225/204080043-6614457c-a0ed-45b3-a26a-e75126dbb486.png) - -开启id删除、id引用 删除成功 - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_user_role", - "Sys_user_role": { - "@column": "user_id", - "role_id{}": ["0bb92d96-8ca6-469e-91e8-60308ce5b835"] - } - }, - "Sys_user:aa": { - "@method": "DELETE", - "id{}@": "sql" - }, - "explan": true -} -``` -![image](https://user-images.githubusercontent.com/12228225/204080050-e6f04fe6-319e-45b7-b1b2-bf4cda4ab2db.png) - -PUT 子查询 修改 - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role_permission", - "Sys_role_permission": { - "@column": "role_id", - "id{}": ["ba2634f8-0bdc-4b50-9c5e-47786b1536ef"] - } - }, - "Sys_role": { - "@method": "PUT", - "id{}@": "sql", - "role_code": "code-subrange-5", - "role_name": "角色-subrange-5" - }, - "@explain": true -} -``` - -![image](https://user-images.githubusercontent.com/12228225/204080072-8f605595-cd8c-474b-975f-4ac97fb92a26.png) - -#### bug修复 - -删除操作 主表 和 子查询 是同一张表 -mysql8以下 非with-as表达式 会报错: -"msg": "You can't specify target table 'User' for update in FROM clause", - -需要调整sql语句,将子查询包一层(select * from (子查询) as xxx) -DELETE FROM `housekeeping`.`User` -WHERE ( (`username` IN (SELECT * FROM (SELECT `username` FROM `housekeeping`.`User` WHERE ( (`username` = 'test1') )) as a) ) ) - -![image](https://user-images.githubusercontent.com/12228225/204080126-e1f7c82a-2f09-409d-b3f2-fe25badea180.png) - -![image](https://user-images.githubusercontent.com/12228225/204080131-0c15404d-3045-4d01-bd89-d2a1f1fa0360.png) - - -### must、refuses判断、delete、PUT支持 ref - -``` -{ - "sql@": { - "@method": "GET", - "with": true, - "from": "Sys_role_permission", - "Sys_role_permission": { - "@column": "id", - "role_id{}": ["94f79f0b-331b-4cc5-bfc0-ebfc47d00f13"] - } - }, - "Sys_role_permission": { - "@method": "DELETE", - "id{}@": "sql" - }, - "explan": true -} -``` - -![image](https://user-images.githubusercontent.com/12228225/204080150-28972226-37e0-4280-962a-83f7ac12d37c.png) +[APIJSON-ToDo-Demo](https://github.com/jerrylususu/apijson_todo_demo) 一个简单的 todo 示例项目,精简数据,简化上手流程,带自定义鉴权逻辑 + +[apijson-learn](https://github.com/rainboy-learn/apijson-learn) APIJSON 学习笔记和源码解析 + +[apijson-practice](https://github.com/vcoolwind/apijson-practice) BAT 技术专家开源的 APIJSON 参数校验注解 Library 及相关 Demo + +[apijson-db2](https://github.com/andream7/apijson-db2) APIJSON 接入 IBM 数据库 DB2 的 Demo + +[APIJSONDemo](https://github.com/qiujunlin/APIJSONDemo) 字节跳动工程师接入 ClickHouse 的 APIJSON 使用 Demo + +[APIJSONDemo_ClickHouse](https://github.com/chenyanlann/APIJSONDemo_ClickHouse) APIJSON + SpringBoot 连接 ClickHouse 使用的 Demo + +[APIJSONBoot_Hive](https://github.com/chenyanlann/APIJSONBoot_Hive) APIJSON + SpringBoot 连接 Hive 使用的 Demo + +[apijson-sample](https://gitee.com/greyzeng/apijson-sample) APIJSON 简单使用 Demo 及教程 + +[apijson-examples](https://gitee.com/drone/apijson-examples) APIJSON 的前端、业务后端、管理后端 Demo + +[light4j](https://github.com/xlongwei/light4j) 整合 APIJSON 和微服务框架 light-4j 的 Demo,同时接入了 Redis + +[SpringServer1.2-APIJSON](https://github.com/Airforce-1/SpringServer1.2-APIJSON) 智慧党建服务器端,提供 上传 和 下载 文件的接口 + +[apijson_template](https://github.com/abliger/apijson_template) apijson java 模版,使用 gradle 管理依赖和构建应用 + +[api-json-demo](https://gitee.com/hxdwd/api-json-demo) 基于 APIJSON,实现低代码写 CURD 代码,代替传统 ORM 框架,适配 Oracle 事务 + +[ApiJsonByJFinal](https://gitee.com/zhiyuexin/ApiJsonByJFinal) 整合 APIJSON 和 JFinal 的 Demo + +[apijson-builder](https://github.com/pengxianggui/apijson-builder) 一个方便为 APIJSON 构建 RESTful 请求的 JavaScript 库 + +[AbsGrade](https://github.com/APIJSON/AbsGrade) 列表级联算法,支持微信朋友圈单层评论、QQ空间双层评论、百度网盘多层(无限层)文件夹等 + +[APIJSON-Android-RxJava](https://github.com/TommyLemon/APIJSON-Android-RxJava) 仿微信朋友圈动态实战项目,ZBLibrary(UI) + APIJSON(HTTP) + RxJava(Data) + +[Android-ZBLibrary](https://github.com/TommyLemon/Android-ZBLibrary) Android MVP 快速开发框架,Demo 全面,注释详细,使用简单,代码严谨 + +[apijson-dynamic-datasource](https://github.com/wb04307201/apijson-dynamic-datasource) 基于APIJSON,动态切换数据源、同一数据源批量操作事务一致性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