Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

建议收集箱 / Suggestions #37

Open
TommyLemon opened this issue Jun 19, 2018 · 82 comments
Open

建议收集箱 / Suggestions #37

TommyLemon opened this issue Jun 19, 2018 · 82 comments
Assignees
Labels
Enhancement 增强 增强功能、提高性能等

Comments

@TommyLemon
Copy link
Collaborator

TommyLemon commented Jun 19, 2018

有什么功能建议可以在这里回复,点赞数高的回复将会被加入开发计划

@TommyLemon TommyLemon added the Enhancement 增强 增强功能、提高性能等 label Jun 19, 2018
@liliang8858
Copy link

建议:
如果作为前端或APP开发人员,无疑是要增加他们进行拼接条件的工作量
可以开发一个辅助工具,自动生成url工具
image

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Aug 6, 2018

@liliang8858 太赞了,非常感谢。加个QQ详聊吧

@liliang8858
Copy link

建议: hot 数据预加载到 redis 解除DB层压力

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Aug 6, 2018

@liliang8858
APIJSON建议请求JSON由后端给出哦,在APIJSONAuto上测试通过后 点右侧倒数第2个按钮 上传(共享),前端就能看到了
演示
http://apijson.org/auto
源码
https://github.com/TommyLemon/APIJSONAuto
如果是前端让用APIJSON的话,让TA自己TA写他也应该会愿意的,
最多是你把表外键关系给TA(最好是表字段注释里说明,例如 userId 注释:等于User表的id )就行了。

Redis缓存这个建议很好,不过由于业务的不确定性,我打算只在库里面缓存一些配置,其它的业务表数据由开发者自行决定更好

@angelfreedomv
Copy link

angelfreedomv commented Aug 16, 2018

APIJSON JavaScript什么时候出支持react native的版本?谢谢,还有PHP的也需要。

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Aug 16, 2018

@angelfreedomv 感谢建议。
APIJSON其实是不需要前端做特别的支持的,
封装请求JSON和解析结果JSON完全可以用以前的一套(原生、第三方库等都行)。
不过React Native的Demo倒是可以加上。

PHP我不会哦,希望有热心的开发者做出来,
目前APIJSON后端除了Java版
https://github.com/TommyLemon/APIJSON/tree/master/APIJSON-Java-Server

C#版也已经可以用了,
https://github.com/liaozb/APIJSON.NET

Python版也完成了基础设施搭建(作者zeromake的回复)
#38

给热心的作者们点Star支持下吧^_^

@angelfreedomv
Copy link

@TommyLemon 谢谢作者,我的建议是建立一个qq群或者telegram群,接受反馈,不断完善项目。

@TommyLemon
Copy link
Collaborator Author

@angelfreedomv
欢迎加群,一起交流探讨、学习进步
607020115

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Sep 14, 2018

20200308 更新,已完成。
查询User数组和对应的User总数:

{
    "[]": {
        "query": 2,
        "User": {}
    },
    "total@": "/[]/total",
    "info@": "/[]/info"
}

返回的数据中,总数及分页详情结构为:

"total":139, //总数
"info":{ //分页详情
    "total":139, //总数
    "count":5, //每页数量
    "page":0, //当前页码
    "max":27, //最大页码
    "more":true, //是否还有更多
    "first":true, //是否为首页
    "last": false //是否为尾页
}

具体见 功能符 > 数组关键词的 query,total 和 info
https://github.com/APIJSON/APIJSON/blob/master/Document.md#3.2


建议完善分页信息。

目前 总页数、是否有下一页 等分页信息可通过 total,count,page 得出,
总页数 int totalPage = Math.ceil(total / count)
是否有下一页 boolean hasNextPage = total > count*page
是否为第一页 boolean isFirstPage = page <= 0
是否为最后一页 boolean isLastPage = total <= count*page

见 通用文档 的 数组关键词 ③
https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2

但是后端只需要牺牲非常小(可以忽略不计)的性能,就可以计算好这些信息返回给前端,例如
查询User数组和对应的User总数:
原来是

"[]": {
   "query": 2,
   "User": {}
},
"total@": "/[]/total"

返回

"[]": [...],
"total": 100

变为

"[]":{
   "query":2,
   "User":{}
},
"pagination@":"/[]/pagination"

返回

"[]": [...],
"pagination": {
    "total": 100,
    "hasNextPage": true,
    "isFirstPage": false,
    "isLastPage": false
}

点赞(右上角+表情)数超过10个就开发。

还有什么需要的信息大家可以补充下。

@TommyLemon
Copy link
Collaborator Author

@angelfreedomv
APIJSON PHP 版已经有了🎉
创作不易,给热心作者点 ⭐Star 支持下吧^_^
https://github.com/orchie/apijson

@wq201
Copy link

wq201 commented Dec 5, 2018

老大 啥时候把APIJSON和ZBlibrary整合一下,原Android端的一直没跟上ZBlibrary的进度啊。APIJSON-Android这样的前后一体的实在是太实用了,上手就等于项目完成一半了。希望老大抽空更新一下呗!!!

@Onesimu
Copy link

Onesimu commented Dec 12, 2018

全局关闭所有权限验证怎么设置 急需测试 未找到配置的地方 望指点

@TommyLemon
Copy link
Collaborator Author

@wq201 最近更新了一小部分
https://github.com/TommyLemon/APIJSON/releases/tag/3.1.7

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Dec 12, 2018

@Onesimu
DemoParser 3个构造方法里面最后(super方法后)加

setNoVerifyRole(true);

顺便说下,这里只用来提交建议,提交问题请 New Issue
https://github.com/TommyLemon/APIJSON/issues/new/choose

@Onesimu
Copy link

Onesimu commented Dec 13, 2018

谢谢, 确实很强大. 其实配置的问题也算一个小小的建议, 对于数据库连接 开启验证 开启日志这些最基本的配置最好能够放在配置文件里, 就像spring boot那样. 这样更符合生产环境的使用方式.
另外, 不知道有没有关于在生产环境使用的例子或最佳实践. 现在做的一个项目用的spring data rest, 但是写灵活一些的查询比较繁琐, 所以考虑把APIJSON集成进来. 但是还有一些问题要考虑

  1. 后端要通过用户权限控制数据的可见性, 能不能有一个查询或返回时对数据进行过滤的机制
  2. 有一些自定义的业务要在后端实现, 能不能像spring data rest一样, 暴露一些事件如onBeforeSave onAfterSave等等
  3. 生产环境的日志配置, 现有的日志输出可能需要整理一下

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Jan 7, 2019

@Onesimu 感谢建议。
1.可以通过自动化权限管理来控制,细分到 每种角色、每种操作、每张表、每条记录
#12

2.自定义业务建议优先使用 远程函数 来实现,其次是 重写相关方法
https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2

3.可以在 Log.java里的 DEBUG 统一配置是否开启输入 APIJSONORM 的日志
https://github.com/TommyLemon/APIJSON/blob/master/APIJSON-Java-Server/APIJSONORM/src/main/java/zuo/biao/apijson/Log.java

@YamiOdymel
Copy link

想請問一下,在 GraphQL 中,每個 Object(例如:User、Comment)都各自有一個來源的 Resolver。

這個 Resolver 裡面可以透過 TCP/gRPC/JSON-RPC 去和對應的資源微服務進行互動。

post {
    comment {
    }
}

像上述 GraphQL 範例:Post 可以在 Resolver 中呼叫 Post 微服務、Comment 則呼叫 Comment 微服務以請求資源,以此類推。

APIJSON 看起來像是沒有 Resolver(以我從網路上收集到的認知),那麼要如何在這部份切分相關資源以符合微服務的相關呼叫措施呢?

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Jan 25, 2019

@YamiOdymel APIJSON 可以用
1.远程函数

{
    "Moment": {
        "id": 301,
        "isPraised()": "isContain(praiseUserIdList,userId)" //远程函数
    }
}

在后端实现远程函数,做你想要的呼叫 Post 微服务等。

2.重写 ObjectParser.onParse(String key, Object value)
判断 table 和 key,符合你需求 table+key 的就调用对应的服务

提醒一下,这是建议收集的地方,有问题单独发 issue 哦

@TommyLemon TommyLemon pinned this issue Jan 25, 2019
@TommyLemon TommyLemon self-assigned this Mar 2, 2019
@Onesimu
Copy link

Onesimu commented Mar 13, 2019

建议支持websocket, 便于实现数据实时同步和双向消息通知. 数据结构最好和具体传输方式解耦. 这样即使要用在socket传输或者将来的HTTP2/3 等各种场合都能适应. 建议作者评估一下, 做成通用数据接口, 或者给出思路和demo, 让社区去贡献具体传输方式实现.

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Mar 15, 2019

@Onesimu 感谢建议,这样是可以的。
APIJSON 的核心就是 解析 JSON -> 转为 SQL -> 封装 JSON 的 ORM 库 APIJSONORM,
网络协议用 HTTP, TCP, UDP, Websocket 等都可以,只要支持传输 JSON 格式的文本就行了。

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Mar 16, 2019

20190401 更新:已完成
https://github.com/TommyLemon/APIJSON/releases/tag/3.5.0

增强 LEFT JOIN / RIGHT JOIN
原来

    "join": "</Comment/userId@"

这种 LEFT JOIN

LEFT JOIN (SELECT content FROM Comment) AS Comment ON Comment.userId = User.id

外层的 SELECT Comment.content ,即返回副表 Comment 的字段 必须 与 内层的一致,
但某些需求需要不一致,可以增强下 join 键值对,提供第二种写法:

    "join": {
        "</Comment/userId@": {  //指定子查询外层的各种属性
            "@column": "momentId,content",
            "@order": "date-",
            "@group": "momentId",
            "@having": "momentId>100"
        }
    }

@hegphegp
Copy link

hegphegp commented Mar 19, 2019

比较重要的一个问题

  • 查询条件是前端页面动态拼装的,如果别人有意识地攻击接口,随意组装成十表联查的SQL语句,或者是拼装几个大表的笛卡尔积的SQL语句,数据库会吃不消

好的地方

  • 这个项目可以让后端从curd的业务解放出来
  • 缩减前后端对接的时间,提高效率

待完善的地方

  • 看这个项目的多数都是Java开发的,其实介绍文档可以完全忽略eclipse导入Java项目过程。文档要写得精简,重点突出
  • apijson的java项目,JavaScript项目,Android项目,单独划分出去,作为单独的项目
  • 项目目录结构和项目命名大小写规范一点,无关重要的文件可以删掉,Oracle,MySQL,postgresql的初始化脚本各提供一份就可以了,不需要单独建文件夹去存放
  • 项目应该全部改成maven形式,无须在libs引入postgres的jar包或者引入apijson-libarary的jar包,应该改成maven引入
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.5</version>
</dependency>

不破不立

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Mar 26, 2019

比较重要的一个问题

  • 查询条件是前端页面动态拼装的,如果别人有意识地攻击接口,随意组装成十表联查的SQL语句,或者是拼装几个大表的笛卡尔积的SQL语句,数据库会吃不消

好的地方

  • 这个项目可以让后端从curd的业务解放出来
  • 缩减前后端对接的时间,提高效率

待完善的地方

  • 看这个项目的多数都是Java开发的,其实介绍文档可以完全忽略eclipse导入Java项目过程。文档要写得精简,重点突出
  • apijson的java项目,JavaScript项目,Android项目,单独划分出去,作为单独的项目
  • 项目目录结构和项目命名大小写规范一点,无关重要的文件可以删掉,Oracle,MySQL,postgresql的初始化脚本各提供一份就可以了,不需要单独建文件夹去存放
  • 项目应该全部改成maven形式,无须在libs引入postgres的jar包或者引入apijson-libarary的jar包,应该改成maven引入
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.5</version>
</dependency>

不破不立

@hegphegp 感谢建议。
针对第一段的问题,APIJSON 目前做了 maxQueryCount,maxQueryPage 等查询数量限制,能导致笛卡尔积的 CROSS JOIN 也默认禁用了,不过确实还需要加强对连表的限制,提供 maxJoinCount,maxTableCount,maxArrayCount,maxDepth 等。
【更新】已提供 maxObjectCount, maxArrayCount, maxQueryDepth,其中 maxObjectCount 可限制 JOIN 数量。

好的地方

说得挺到位的,不过还有节约流量等别的好处哦
https://github.com/TommyLemon/APIJSON/wiki

待完善的地方

1.小白太多了,连导入工程、导入表等基础操作都希望有视频教程,我也很无奈,现有的教程还是保留吧。

2.之前划分出去过,但从下载量和提问来看,不少用户都没找到,反正也不大,都放一块吧,TensorFlow 也这么干的。
【更新】已把 ORM 外的源码及文档抽取到单独的项目 apijson-framework, APIJSON-Demo

3.这个会作为以后的优化点。

4.这个会作为一个优化重点,不过我对提交 Maven 仓库没啥经验,需要学习下,如果有热心的用户愿意帮忙就更好了。
【更新】APIJSON, apijson-framework 都以支持 Maven, Gradle 依赖

再次感谢你的建议。

@wanghaisheng
Copy link

1.建议结合python、c#版的文档对现有文档进行简化拆解,将apijson规范和apijson-java实现的部分区分开来,比如apijson规范的说明,apijson-java入门、apijson测试网站及工具介绍和使用教程、apijson-c#入门、apijson-java仿朋友圈教程等等

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Apr 1, 2019

@wanghaisheng 感谢建议,目前 APIJSON 主项目(设计规范+Java版实现)的文档是已经简化拆解过的,
至于 C# 版, PHP 版, Python 版, Node(TypeScript) 版 APIJSON,这些都是其它作者维护的,可以给他们发 issue。

@wanghaisheng
Copy link

@TommyLemon 你可以稍微看一下c#和python 写的比java简明易懂多了 当然你可能还是会觉得现在的已经kangpick了

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Apr 1, 2019

@wanghaisheng “写的比java简明易懂多了” 是指文档还是代码呢?
APIJSON-CSharpAPIJSON-Python 都只是提供它和 Java 版不同的地方的文档,
其它都是指向 APIJSON 主工程,所以就省掉了很多 介绍、示例、规范 等文档。

如果说的是代码更简洁,主要原因是它们相对 Java 版来说功能还不够全(JOIN,子查询等),
其次是因为 C#, Python 语言本身就比 Java 更简洁,一般实现同样的功能代码量更少。

另外 kangpick 是啥意思?

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Jun 20, 2021

建议新增对 ClickHouse 的支持。ClickHouse 作为物联网时序数据库,应用广泛,且支持类 SQL 语句,初步评估对 AbstractSQLConfig, AbstractSQLExectuor 小改即可支持

目前已有 ClickHouse 相关的 APIJSON 生态项目,大家点 Star 支持下作者吧 ^_^
https://github.com/qiujunlin/APIJSONDemo
https://github.com/chenyanlann/APIJSONDemo_ClickHouse

@TommyLemon
Copy link
Collaborator Author

多数据库支持,目前是刚需

4.7.0 新增数据源关键词 @Datasource 可由业务完全自定义
https://github.com/Tencent/APIJSON/releases/tag/4.7.0

@wanghaisheng
Copy link

@TommyLemon 我问问 oracle支持视图和中间表吗

@TommyLemon
Copy link
Collaborator Author

@TommyLemon 我问问 oracle支持视图和中间表吗

应该支持,尚未测试。目前对于 MySQL 的视图(View),APIJSON 能很好地支持,并且提供了对应的视图表 ViewTable
https://github.com/APIJSON/APIJSON-Demo/blob/master/MySQL/single/sys_routines.sql

@TommyLemon
Copy link
Collaborator Author

建议新增支持 MySQL 全文检索
#37

实现时考虑兼容 PostgreSQL, SQLServer 等其它数据库

@TommyLemon
Copy link
Collaborator Author

增加配置文件,下载安装
目前 官方提供的 java 版本,都是需要下载源代码 ,下载java开发工具,下载一堆内容,修改 数据连接后,进行编译。 不会java开发的,可能折腾2天不一定能跑起来。

建议: 官方提供一个 java 编译好,能直接运行的安装包。 下载下来直接 运行,如果 数据库 类型,数据库名称,帐户密码等需要 变化,可以在软件执行目录有一个conf 目录。里面有一个默认的config.conf 文件,可以在这里面配置 ,数据库类型,帐户,密码等数据库连接信息,以及服务运行后监听端口等服务配置信息。

这样大部分开发人员 可以直接下载 后,改一下配置就能用起来了。

目前可以用 SpringBoot 或 Druid, HikariCP 等数据库连接池的配置
https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo-Druid/src/main/resources/application.yml

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Sep 29, 2021

2022-3-15 更新:
已实现类型转换 "@cast":"date:DATETIME"
image

建议新增支持代码风格,比起现有的形式更接近开发编码习惯,更易学习和使用,在 HTTP POST JSON 时阅读也更清晰。
#319

现有新建别名和提取字段的风格:
image

{   // isCodeStyle = false
    "User-gender:sex[]": {  // User.gender AS sex
        "User": {
            "@column": "id,sex:gender,name"  // sex AS gender
        }
    }
}

新增支持另一种接近 Java, JavaScript 的语言编码风格
image

{   // isCodeStyle = true,主要是空格 代替冒号 : 取别名,点 . 代替 - 提取字段
    "User.gender sex[]": {  // User.gender AS sex
        "User": {
            "@column": "id,sex gender,name",  // sex AS gender
            "DATETIME date": "2021-09-29 17:57"  // date = cast('2021-09-29 17:57' AS DATETIME)  主要用于  PostgreSQL 等对 
 JDBC 隐式类型转换支持不友好的数据库
        }
    }
}

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Oct 28, 2021

与零代码前端整合 #329

更新,已有相关生态项目。

基于腾讯 APIJSON 和百度 AMIS 的低代码系统,打开链接为热心的作者右上角点 ⭐️ Star 支持下吧~
后端:https://github.com/csx-bill/quick-boot
前端:https://github.com/csx-bill/quick-admin

具体说下 https://baidu.gitee.io/amis/ amis 是一个低代码前端框架,它使用 JSON 配置来生成页面,可以减少页面开发工作量,极大提升效率。 希望APIJSON能够实现与AMIS的整合,实现增删改查前后端自动化零代码开发。

为什么 极大增加开发效率,增删改查功能通过简单配置即可实现。

@MichonneHsu
Copy link

APIJSON JavaScript什么时候出支持react native的版本?谢谢,还有PHP的也需要。

《PHP不会》

@TommyLemon
Copy link
Collaborator Author

APIJSON JavaScript什么时候出支持react native的版本?谢谢,还有PHP的也需要。

@MichonneHsu hyperf-APIJSON 【新】PHP 版 APIJSON,基于 Hyperf(PHP Swoole) 支持 MySQL,点 ⭐Star 鼓励作者继续完善吧^_^
https://github.com/kvnZero/hyperf-APIJSON

@MichonneHsu
Copy link

APIJSON JavaScript什么时候出支持react native的版本?谢谢,还有PHP的也需要。

@MichonneHsu hyperf-APIJSON 【新】PHP 版 APIJSON,基于 Hyperf(PHP Swoole) 支持 MySQL,点 starStar 鼓励作者继续完善吧^_^ https://github.com/kvnZero/hyperf-APIJSON
好的,大佬,该死的git老是连不上 字打了一半 本来后面要跟着 那就找个人来做呗 这句话的

@TommyLemon
Copy link
Collaborator Author

好的,大佬,该死的git老是连不上 字打了一半 本来后面要跟着 那就找个人来做呗 这句话的

这样啊😂

@TommyLemon TommyLemon pinned this issue Mar 12, 2022
@TommyLemon TommyLemon unpinned this issue Mar 12, 2022
@TommyLemon
Copy link
Collaborator Author

新增对 Presto/Trino 的支持。Presto 作为以 SQL 语言作为接口的分布式实时查询引擎,适用于交互式分析查询海量数据,并且提供了非常友好的接口开发数据源连接器,支持 Redis, Hive, Kafka, Elasticsearch, Thrift, Cassandra, MySQL, PostgreSQL, Oracle, MongoDB...

2022-3-15 更新:
已支持 Hive 及 Hadoop
https://github.com/Tencent/APIJSON/releases/tag/4.9.1

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Oct 27, 2022

关于新增功能、优化性能等的一些想法

打钩的大部分都已实现,少部分为加入实现计划
https://github.com/TommyLemon/StaticResources/tree/master/APIJSON/Idea

IMG_20221027_185342
IMG_20221027_185320
IMG_20221027_185259
IMG_20221027_185228
IMG_20221027_185150
IMG_20221027_185120
IMG_20221027_185100
IMG_20221027_185035
IMG_20221027_185013
IMG_20221027_184943
IMG_20221027_184928
IMG_20221027_184835
IMG_20221027_184815
IMG_20221027_184757
IMG_20221027_184741
IMG_20221027_184731

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Nov 6, 2022

建议: 如果作为前端或APP开发人员,无疑是要增加他们进行拼接条件的工作量 可以开发一个辅助工具,自动生成url工具 image

APIAuto 已支持点击各种超链接智能生成 APIJSON 请求的 URL + JSON
@liliang8858

7AB4DBD591FB4A39C435C3A0693AE247

image

image

image

体验链接
http://apijson.cn/api

开放源码(可以点 Star 支持下~)
https://github.com/TommyLemon/APIAuto

@TommyLemon
Copy link
Collaborator Author

TommyLemon commented Nov 18, 2022

APIAuto 新增支持自动推荐智能补全参数(APIJSON)
https://www.bilibili.com/video/BV1ze4y117Rs
image
image
image

加上上方的点按钮自动生成,已经比以上在表格 UI 上点点选选的方案要方便高效很多了。

体验链接
http://apijson.cn/api

开放源码(点 Star 支持下吧~)
https://github.com/TommyLemon/APIAuto

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement 增强 增强功能、提高性能等
Projects
None yet
Development

No branches or pull requests