|
| 1 | + |
| 2 | +<h1 align="center" style="text-align:center;"> |
| 3 | + APIJSON 规划及路线图 |
| 4 | +</h1> |
| 5 | + |
| 6 | + |
| 7 | +### 完善功能 |
| 8 | +* 新增支持 Case |
| 9 | +实现远程函数也不方便的 SQL 内字段转换 CASE WHEN THEN ,<br /> |
| 10 | +暂时还没有想好如何设计。如果是 SQL 原来的写法,则有点繁琐。<br /> |
| 11 | + |
| 12 | +* 新增支持 @having& |
| 13 | +来实现内部条件 AND 连接,原来的 @having 由 AND 连接变为 OR 连接,保持 横或纵与 的统一规则。<br /> |
| 14 | +@having! 必须性不大,可通过反转内部条件来实现,但如果实现简单、且不影响原来的功能,则可以顺便加上。<br /> |
| 15 | + |
| 16 | +* 新增支持 @column! |
| 17 | +这个只在 APIJSONFramework 支持,需要配置每个接口版本、每张表所拥有的全部字段,然后排除掉 @column! 的。<br /> |
| 18 | +需要注意的是,可能前端传参里既有 @column 又有 @column! ,碰到这种情况:<br /> |
| 19 | +如果没有重合字段就忽略 @column! ,只让 @column 生效;<br /> |
| 20 | +如果有有重合字段,则抛异常,转为错误码和错误信息返回。<br /> |
| 21 | + |
| 22 | + |
| 23 | +* 新增支持分布式 |
| 24 | + "@url": "http://apijson.cn:8080/get" |
| 25 | +```js |
| 26 | +{ |
| 27 | + "User": { |
| 28 | + "@url": "http://apijson.cn:8080/get" //转发给其它服务器执行 |
| 29 | + }, |
| 30 | + "[]": { |
| 31 | + "Comment": { |
| 32 | + "userId@": "User/id" |
| 33 | + } |
| 34 | + }, |
| 35 | + "@explain": true |
| 36 | +} |
| 37 | +``` |
| 38 | +考虑到引用赋值的依赖关系要保持先后顺序,必须同步阻塞处理。<br /> |
| 39 | +或许可以加一个 ~ 前缀表示异步?例如 "@url": "\~http://apijson.cn:8080/get",由调用方保证没有被下方对象依赖。<br /> |
| 40 | + |
| 41 | + |
| 42 | +* 新增支持 Union |
| 43 | +虽然可以通过 INNER JOIN + 条件 OR 连接来替代它的功能,但没法达到它能用索引的性能。<br /> |
| 44 | +支持 UNION 很有必要,但 UNION ALL 几乎没有需求,如果实现简单、且不影响原来的功能,则可以顺便加上。 |
| 45 | + |
| 46 | +"@union": Integer // 0 - 不使用,1 - UNION,2 - UNION ALL |
| 47 | +```js |
| 48 | +{ |
| 49 | + "[]": { |
| 50 | + "User": { |
| 51 | + "name~": "a", |
| 52 | + "tag~": "a", |
| 53 | + "@combine": "name~,tag~", |
| 54 | + "@union": 1 //将 @combine 中的 N 个 OR 连接字段用 UNION 替换,原本一条 SQL 需要拆分成 N 条 SQL 来 UNION |
| 55 | + } |
| 56 | + }, |
| 57 | + "@explain": true |
| 58 | +} |
| 59 | +``` |
| 60 | +生成的 SQL |
| 61 | +```sql |
| 62 | +SELECT * FROM `sys`.`apijson_user` WHERE ( (`name` REGEXP BINARY 'a') OR (`tag` REGEXP BINARY 'a') ) LIMIT 10 OFFSET 0 |
| 63 | +``` |
| 64 | +需要变为 |
| 65 | +```sql |
| 66 | +SELECT * FROM `sys`.`apijson_user` WHERE ( (`name` REGEXP BINARY 'a') ) |
| 67 | +UNION |
| 68 | +SELECT * FROM `sys`.`apijson_user` WHERE ( (`tag` REGEXP BINARY 'a') ) |
| 69 | +LIMIT 10 OFFSET 0 |
| 70 | +``` |
| 71 | + |
| 72 | + |
| 73 | +* 新增支持 With |
| 74 | +可以减少子查询执行次数,提高性能。 |
| 75 | +```js |
| 76 | +{ //看看关注的人最近有什么动态(分享、评论) |
| 77 | + "sql@": { |
| 78 | + "with": true, //生成 WITH(SELECT id ...) AS `sql` |
| 79 | + "from": "User", |
| 80 | + "User": { |
| 81 | + "@column": "id", |
| 82 | + "@role": "CONTACT" |
| 83 | + } |
| 84 | + }, |
| 85 | + "Moment[]": { |
| 86 | + "Moment": { |
| 87 | + "userId{}@": "sql", |
| 88 | + "@order": "date-" |
| 89 | + } |
| 90 | + }, |
| 91 | + "Comment[]": { |
| 92 | + "Comment": { |
| 93 | + "userId{}@": "sql", |
| 94 | + "@order": "date-" |
| 95 | + } |
| 96 | + }, |
| 97 | + "@explain": true |
| 98 | +} |
| 99 | +``` |
| 100 | +生成的 SQL |
| 101 | +```sql |
| 102 | +SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0 |
| 103 | +``` |
| 104 | +和 |
| 105 | +```sql |
| 106 | +SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0 |
| 107 | +``` |
| 108 | + |
| 109 | +需要变为 |
| 110 | +```sql |
| 111 | +WITH (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) AS `sql` |
| 112 | +SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN `sql` ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0 |
| 113 | +``` |
| 114 | +和 |
| 115 | +```sql |
| 116 | +WITH (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) AS `sql` |
| 117 | +SELECT * FROM `sys`.`Comment` WHERE ( (`userId` IN `sql` ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0 |
| 118 | +``` |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | +### 保障安全 |
| 123 | +* 防越权操作 |
| 124 | +目前有 RBAC 自动化权限管理。 |
| 125 | + |
| 126 | +* 防 SQL 注入 |
| 127 | +目前有 预编译 + 白名单 校验机制。 |
| 128 | + |
| 129 | +* 防恶意复杂请求 |
| 130 | +目前有限流机制,getMaxQueryCount, getMaxUpdateCount, getMaxObjectCount, getMaxSQLCount 等。 |
| 131 | + |
| 132 | + |
| 133 | + |
| 134 | +### 优化性能 |
| 135 | +* 解析 JSON |
| 136 | +优化 AbstractParser 和 AbstractObjectParser 解析 JSON 性能。 |
| 137 | + |
| 138 | +* 封装 JSON |
| 139 | +优化 AbstractSQLExecutor 封装 JSON 性能。 |
| 140 | + |
| 141 | +* 拼接 SQL |
| 142 | +优化 AbstractSQLConfig 拼接 SQL 性能。<br /> |
| 143 | +#完善功能 中 Union 和 With 也是优化 SQL 性能的方式。 |
| 144 | + |
| 145 | +* 读写缓存 |
| 146 | +在 AbstractParser 使用了 HashMap<String, JSONObject> queryResultMap 存已解析的对象、总数等数据。<br /> |
| 147 | +在 AbstractSQLExecutor 使用了 HashMap<String, JSONObject> cacheMap 存已通过 SQL 查出的结果集。<br /> |
| 148 | + |
| 149 | +* ... //欢迎补充 |
| 150 | + |
| 151 | + |
| 152 | + |
| 153 | +### 增强稳定 |
| 154 | + |
| 155 | +* 减少 Bug |
| 156 | +#### 1.APIAuto 上统计的 bug |
| 157 | +http://apijson.org:8000/auto/ |
| 158 | + |
| 159 | +#### 2.其它发现的 Bug |
| 160 | +https://github.com/APIJSON/APIJSON/issues?q=is%3Aissue+is%3Aopen+label%3Abug |
| 161 | + |
| 162 | +* 完善测试 |
| 163 | +1.在 APIAuto-机器学习自动化接口管理平台 上传更多、更全面、更细致的测试用例、动态参数等 |
| 164 | + |
| 165 | +2.接入 UnitAuto-机器学习自动化单元测试平台,每次启动都自动测试所有可测方法并输出报告 |
| 166 | + |
| 167 | + |
| 168 | + |
| 169 | +### 完善文档 |
| 170 | +* 中文文档 |
| 171 | + |
| 172 | +#### 1.设计规范 |
| 173 | + |
| 174 | +#### 2.配置与部署 |
| 175 | + |
| 176 | +#### ... //欢迎补充 |
| 177 | + |
| 178 | +* English Document |
| 179 | +Translation for Chinese document. |
| 180 | + |
| 181 | + |
| 182 | + |
| 183 | +### 丰富周边 |
| 184 | +* Go, Kotlin, Ruby 等其它语言 ORM 库 |
| 185 | + |
| 186 | + |
| 187 | +* Demo |
| 188 | +JavaScript 前端,TypeScript 前端,微信等小程序,<br /> |
| 189 | +Android 客户端,iOS 客户端,C# 游戏客户端等。<br /> |
| 190 | + |
| 191 | +* 扩展 |
| 192 | + |
| 193 | +#### 1.基于或整合 APIJSONORM 或 APIJSONFramework 来实现的库/框架 |
| 194 | + |
| 195 | +#### 2.扩展 APIJSONORM 或 APIJSONFramework 功能的插件 |
| 196 | +可以通过扩展对象关键词 @key,数组关键词 key,远程函数,重写部分方法等来实现。<br /> |
| 197 | + |
| 198 | +#### 3.前端/客户端 封装/解析 APIJSON 的库/框架 |
| 199 | +因为 APIJSON 基于 JSON,大部分情况下都可以直接用 fastjson 等 JSON 封装/解析库或其它工具等,<br /> |
| 200 | +只是 APIJSON 有部分功能需要在 key 里放 [], @ 等特殊符号,返回 [] 在某些情况下不方便解析,<br /> |
| 201 | +目前可使用 "format": true 让后端格式化后返回,但也会对服务器性能有一些损耗,<br /> |
| 202 | +如果 前端/客户端 有对应的格式化工具等(例如 APIJSONORM 可供 Android 使用 format),选择就会更多一些。<br /> |
| 203 | + |
| 204 | + |
| 205 | + |
| 206 | +### 推广使用 |
| 207 | +* 为 APIJSON 编写/发表 博客/文章/资讯 等 |
| 208 | + |
| 209 | +* 登记正在使用 APIJSON 的公司或项目 |
| 210 | + |
| 211 | +* 在社交技术群、论坛等聊天或评论时提及 APIJSON |
| 212 | + |
| 213 | +* ... //欢迎补充 |
| 214 | + |
| 215 | + |
0 commit comments