Git Product home page Git Product logo

Comments (82)

liliang8858 avatar liliang8858 commented on April 28, 2024 22

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 14

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个就开发。

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

from apijson.

hegphegp avatar hegphegp commented on April 28, 2024 9

比较重要的一个问题

  • 查询条件是前端页面动态拼装的,如果别人有意识地攻击接口,随意组装成十表联查的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>

不破不立

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 5

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

from apijson.

liliang8858 avatar liliang8858 commented on April 28, 2024 4

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

from apijson.

xiehuiSheldon avatar xiehuiSheldon commented on April 28, 2024 3

希望实现SQL中的 distinct 关键字的功能。

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 3

建议新增对 Elasticsearch 的支持。Elasticsearch 应用广泛,且同样是基于 JSON 的语法,比较方便转换 APIJSON 格式的查询 JSON 为 Elasticsearch 的查询 JSON。

from apijson.

xiaofeihe avatar xiaofeihe commented on April 28, 2024 3

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

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 3

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 3

建议提供接口支持替换 JSON 序列化&反序列化库
#209

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 3

与零代码前端整合 #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的整合,实现增删改查前后端自动化零代码开发。

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

from apijson.

Onesimu avatar Onesimu commented on April 28, 2024 2

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 2

建议加一些性能分析关键词 cache, explain 等

{
    "[]": {
        "page": 0,
        "count": 50,
        "join": "@/User/id@",
        "cache": false, //设置 SQL_NO_CACHE,解决调试时缓存影响执行时间
        "explain": true, //返回执行计划,而不是数据? 那就 query: 3 / query: "explain" 替代 ?
        "Moment": {
            "content$": "%a%"
        },
        "User": {
            "id@": "/Moment/userId",
            "@column": "id,name,head"
        }
    }
}

更新:已实现 @Explain: true/false 和 @cache: "ALL"/"ROM"/"RAM",例如

{
    "@explain": true,
    "@cache": "RAM", //0-"ALL", 1-"ROM", 2-"RAM"
    "User": {
        "@column": "id,name"
    },
    "[]": {
        "Comment": {
            "userId@": "User/id"
        }
    }
}

image

https://github.com/TommyLemon/APIJSON/releases/tag/3.5.7

from apijson.

rxxy avatar rxxy commented on April 28, 2024 2

使用过程中看到控制台打印的日志都是红色的,建议加一个日志插件,使用日志插件打印日志,也能直接定位打印位置,也更灵活

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 2

建议新增 WITH AS 语法,提高某些情况下的 SQL 的性能和可读性。
鉴于子查询已实现,可基于子查询语法基础上新增 "with": true , 例如:

{
    "sql@": {
        "with": true,  //表示这个子查询使用 WITH AS
        "from": "User",
        "User": {
            "sex": 1
        }
    }
}

自动生成

WITH sql AS (SELECT * FROM User WHERE sex=1)

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 2

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 隐式类型转换支持不友好的数据库
        }
    }
}

from apijson.

angelfreedomv avatar angelfreedomv commented on April 28, 2024 1

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

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

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

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

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

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"
        }
    }

from apijson.

wanghaisheng avatar wanghaisheng commented on April 28, 2024 1

apijson 目前的文档分为几大类
1.概要性的说明 用以说明apijson spec以及apijsonauto等提供的特性 与rest graphql的区别之处 对于前端开发 后端开发的好处 以及其潜在的应用场景(可以以行业为编排,比如说社交场景朋友圈动态或其他 这里可以与第二点呼应)
2.配置安装上手的入门 getstarted
针对不同的服务端实现,从基础环境(操作系统、编程环境、数据库环境)、apijson服务端的部署和发布、配置文件的修改/代码的修改说明;
客户端调用的说明(结合postman或不同编程语言调用代码,结合一中所提到的应用场景(比如说现在有的社交朋友圈的场景)说明apijson spec具体的使用,辅以与传统rest方式调用请求的对比)
3.apijson服务端实现(针对不同的编程语言实现,包括每种实现使用的框架、各模块的说明比如说APIJSONParser,每种实现与apijson功能点的对应关系,哪些实现了哪些没实现,哪些支持哪些不支持,甚至具体的api文档)
4.apijsonauto工具的介绍、使用,在2的基础上,说明该工具在具体场景中的应用(数据库层面、服务端层面、客户端调用层面)

虽大多数可能内容都有一些,就我来看,组织上是非常混乱的,可以调整的更好,更易于上手和传播

@TommyLemon
kangpick==完美

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

@xiehuiSheldon 感谢建议,已支持去重关键词 DISTINCT
image

{
    "[]": {
        "Comment": {
            "@column": "DISTINCT momentId;count(DISTINCT userId)",
            "@group": "momentId"
        }
    },
    "@explain": true
}

http://apijson.cn/api/?type=JSON&json={%22[]%22:{%22Comment%22:{%22@column%22:%22DISTINCT%20momentId;count(DISTINCT%20userId)%22,%22@group%22:%22momentId%22}},%22@explain%22:true}

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

加入事务控制
https://github.com/APIJSON/APIJSON/issues/105

更新:
已加上
5810ecf

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

目前只有 User.id = Comment.userId 这种等价的 JOIN ON 关联方式,并且只有这个才能加到 ON 上。
希望支持复杂 JOIN ON ,并且支持把 WHERE 条件加到 ON 上(提前减少关联数据量,优化性能)

{
    "[]": {
        "join": {
            "&/User/id~@": {  //Comment INNER JOIN User ON User.id ~ Comment.userId, 其它 $, {}, <> 等同理
                "@combine": "&sex,&name~" //表示 这两个条件加到 ON 上 ON ... AND (sex=1 AND name ~ 'a') 
            }
        },
        "Comment": {
            "content$": "o"
        },
        "User": {
            "id~@": "/Comment/userId",
            "sex":1,
            "name~":"a"
        }
    },
    "@explain": true
}

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

202000302 更新:已实现

@zhoulingfengofcd 感谢建议
希望主项目新增时,可以支持采用数据库自增id,而不是业务代码生成
https://github.com/APIJSON/APIJSON/issues/120

这个需求大家反复提及,会优先实现(预计下个版本)

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

建议新增对 Hive 的支持。Hive 应用广泛,且 HiveQL 与 SQL 非常接近,初步评估对 AbstractSQLConfig, AbstractSQLExectuor 小改即可支持
#158 (comment)

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

@TommyLemon 首先向大佬致敬,apijson协议设计得非常优雅,让我爱不释手。
迫不及待想要将这个协议集成到我们的项目中去,但是我们又不需要apijson库中自带的“圈子”,登录校验(authentication)、权限校验(authorization)等功能,虽然是可以通过设置开关、重写父类方法的方式去关闭掉,但是作为用户心理上会觉得这个库和上面提的这些业务耦合得太深,阅读apijson库的源码多处可以看到上述业务代码在工具库中与apijson协议代码相互耦合在一起,导致我有非常大的心理压力在公司全面推广。

因此希望大佬可以将apijson库中自带的“圈子”,登录校验(authentication)、权限校验(authorization)等功能进行代码级别的解耦,由您定义认证鉴权接口,并提供更全面的上下文信息,让用户自行提供认证、鉴权实现。让jsonapi用户可以轻松实现如下图层次分明架构:
image

APIJSONORM 里本身就定义了 Verifier, Parser, SQLConfig, SQLExecutor 等 interface 来解耦,AbstractVerifier implement Verifier 做了具体的实现,除了可以重写方法来自定义校验,也可以自己基于 Verifier 去实现一套自己的校验方式。
APIJSON 不是 "jsonapi",这是两个很不一样的项目。

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024 1

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

打钩的大部分都已实现,少部分为加入实现计划
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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@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支持下吧^_^

from apijson.

angelfreedomv avatar angelfreedomv commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

from apijson.

wq201 avatar wq201 commented on April 28, 2024

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

from apijson.

Onesimu avatar Onesimu commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

setNoVerifyRole(true);

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

from apijson.

Onesimu avatar Onesimu commented on April 28, 2024

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@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

from apijson.

YamiOdymel avatar YamiOdymel commented on April 28, 2024

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

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

post {
    comment {
    }
}

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

比较重要的一个问题

  • 查询条件是前端页面动态拼装的,如果别人有意识地攻击接口,随意组装成十表联查的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 依赖

再次感谢你的建议。

from apijson.

wanghaisheng avatar wanghaisheng commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

from apijson.

wanghaisheng avatar wanghaisheng commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

另外 kangpick 是啥意思?

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@hegphegp 非常感谢,已经在原来的基础上又实现了
getMaxSQLCount, getMaxObjectCount, getMaxArrayCount, getMaxQueryDepth
4 个限制请求的方法,都有已经调好的默认值,可以重写这些方法自定义哦。
Parser.java
https://github.com/TommyLemon/APIJSON/blob/2d01a5a2cf6cec551771d8c156c799fa2fb9d184/APIJSON-Java-Server/APIJSONORM/src/main/java/zuo/biao/apijson/server/Parser.java

AbstractParser.java
https://github.com/TommyLemon/APIJSON/blob/2d01a5a2cf6cec551771d8c156c799fa2fb9d184/APIJSON-Java-Server/APIJSONORM/src/main/java/zuo/biao/apijson/server/AbstractParser.java

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@wanghaisheng 不好意思啊,这么久没回。
对的,分了好几类,基本都有,只是确实还不是很清晰,
暂时也没时间去补充,还在完善功能呢,
要加 存储过程 啥的,文档后面再说哈。

from apijson.

wanghaisheng avatar wanghaisheng commented on April 28, 2024

@TommyLemon 我觉得你理解岔了 我是说你提供一些信息,我/社区可以帮助把不足的不够详细的都补充起来。但一些思路性的原理性的我是补不出来的 能力不够

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@wanghaisheng 这样啊,非常感谢,请问需要提供哪些信息呢?

from apijson.

wanghaisheng avatar wanghaisheng commented on April 28, 2024

@TommyLemon 你现在这个项目里其实包含了两部分 一部分是spec的 一部分是java实现的
spec的部分 文档说明我觉得都问题不大 要调整都是细节
另外就是java实现这部分,按照我之前的想法,可以结合已有的其他语言实现所提供的环境配置、配置文件修改这些地方进行完善。我不太能理得清楚配置文件这块,因为其他语言的都比较简明易懂。
" 针对不同的服务端实现,从基础环境(操作系统、编程环境、数据库环境)、apijson服务端的部署和发布、配置文件的修改/代码的修改说明;"

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@wanghaisheng 是的,主项目包含 设计规范(Specification) 和 Java实现(APIJSONORM),还有
APIJSONBoot(基于 SpringBoot),APIJSONFinal(基于 JFinal),Android, iOS, JavaScript 等各种 Demo 及相关文档。

目前 Java 版的配置有
1.@MethodAccess 权限注解 + Verifier 权限注册 Java 代码配置,这个以后会去掉,改成数据库配置动态加载,群友贡献了一个,在群文件里,叫“重载”;
2.数据和结构校验的配置,写在 Request.sql 表里面,校验规则及用法具体见 Wiki-实现原理
3.角色访问权限文档配置,写在 Access.sql 表里面;
4.远程函数文档配置,写在 Function.sql 表里面;

具体和 APIJSONAuto 文档怎么对应的见 这个 Issue 以及内部关联的 另一个 Issue

具体使用除了原有的 配置和部署文档,还有群友贡献的 详细的图文说明文档

其它的后面再说吧,希望有热心的用户发 Pull Request 贡献下。

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

关于请求限制,可以自动把所有 预发布环境 的请求 Hash 或 MD5 后再保存下来,
线上环境就只允许这些请求,其它全都不允许通过,直接返回错误,
这样既保证了功能正常开发和使用,又保证不会接收到任何出乎意外的请求导致各种攻击等。

至于实现, 预发布环境下 保存到数据库,线上环境读数据再对比,需要一个环境的标识,后端控制,
类似现有的 boolean Log.DEBUG,发布到线上环境前修改下值就行。

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@wanghaisheng
关于 "3.apijson服务端实现 之间的共同点和差异",部分库已经有说明了
APIJSON Python 版 uliweb-apijson (基本说明 + @combine@expr + 自动化权限、数据、结构校验 的方式等)
https://github.com/zhangchunlin/uliweb-apijson/blob/master/uliweb_apijson/apijson/README.md

APIJSONParser (基本说明 + JOIN 的写法 + 黑白名单 + 表权限、字段权限 等)
https://github.com/Zerounary/APIJSONParser

APIJSON C# 版 APIJSON.NET (基本说明 + 额外提供的另一种 远程函数 写法等)
https://github.com/liaozb/APIJSON.NET/tree/master/APIJSON.NET

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@wanghaisheng
image

有个热心的 APIJSON 用户贡献了 apijson-doc 项目,并且部署到 GitHub 服务器了 🎉
https://vincentcheng.github.io/apijson-doc/zh/

点 ⭐ Star 支持下他吧 ^_^
https://github.com/vincentCheng/apijson-doc

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@rxxy 感谢建议

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@angelfreedomv
另一个 PHP 版 APIJSON,看起来功能比原来那个多不少,可以试试,点 Star 支持下吧^_^
https://github.com/qq547057827/apijson-php

另一个 APIJSON Node 版本也出来了,
支持单表、关联、数组、分页查询等,有比较完善的文档,
我测试过,除了项目提供的表有 utf8 编码问题导入不了 (用我自己的表测试可以),其它都可用。
作者是微医的,已经写了不少测试用例,在他公司内部用起来了。

点 Star 鼓励作者继续完善吧 ^_^
https://github.com/kevinaskin/apijson-node

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@hegphegp 感谢建议,APIJSONORM 的 postgresql-42.2.4.jar 已替换为 42.2.5 的 Maven 依赖
APIJSON@58d99bb
已通过 APIAuto 接口管理平台的自动化测试

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

@hegphegp 感谢建议,APIJSON ORM 已支持 Maven, Gradle 等远程依赖方式,具体见
https://github.com/APIJSON/apijson-orm

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

感谢建议:增加递归查询(recursive)
https://github.com/APIJSON/APIJSON/issues/128

from apijson.

happyyangyuan avatar happyyangyuan commented on April 28, 2024

@TommyLemon 首先向大佬致敬,apijson协议设计得非常优雅,让我爱不释手。
迫不及待想要将这个协议集成到我们的项目中去,但是我们又不需要apijson库中自带的“圈子”,登录校验(authentication)、权限校验(authorization)等功能,虽然是可以通过设置开关、重写父类方法的方式去关闭掉,但是作为用户心理上会觉得这个库和上面提的这些业务耦合得太深,阅读apijson库的源码多处可以看到上述业务代码在工具库中与apijson协议代码相互耦合在一起,导致我有非常大的心理压力在公司全面推广。

因此希望大佬可以将apijson库中自带的“圈子”,登录校验(authentication)、权限校验(authorization)等功能进行代码级别的解耦,由您定义认证鉴权接口,并提供更全面的上下文信息,让用户自行提供认证、鉴权实现。让jsonapi用户可以轻松实现如下图层次分明架构:
image

from apijson.

happyyangyuan avatar happyyangyuan commented on April 28, 2024

@TommyLemon 首先向大佬致敬,apijson协议设计得非常优雅,让我爱不释手。
迫不及待想要将这个协议集成到我们的项目中去,但是我们又不需要apijson库中自带的“圈子”,登录校验(authentication)、权限校验(authorization)等功能,虽然是可以通过设置开关、重写父类方法的方式去关闭掉,但是作为用户心理上会觉得这个库和上面提的这些业务耦合得太深,阅读apijson库的源码多处可以看到上述业务代码在工具库中与apijson协议代码相互耦合在一起,导致我有非常大的心理压力在公司全面推广。
因此希望大佬可以将apijson库中自带的“圈子”,登录校验(authentication)、权限校验(authorization)等功能进行代码级别的解耦,由您定义认证鉴权接口,并提供更全面的上下文信息,让用户自行提供认证、鉴权实现。让jsonapi用户可以轻松实现如下图层次分明架构:
image

APIJSONORM 里本身就定义了 Verifier, Parser, SQLConfig, SQLExecutor 等 interface 来解耦,AbstractVerifier implement Verifier 做了具体的实现,除了可以重写方法来自定义校验,也可以自己基于 Verifier 去实现一套自己的校验方式。
APIJSON 不是 "jsonapi",这是两个很不一样的项目。

感谢大佬指点,之前没注意到有一个独立的APIJSONORM模块专门提供APIJSON协议的实现。我们研究一下单独集成这个模块。

from apijson.

icoco avatar icoco commented on April 28, 2024

no any unit test code ? how do you check your routine code

from apijson.

zsh19950418 avatar zsh19950418 commented on April 28, 2024

可以使用 or 吗

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

no any unit test code ? how do you check your routine code

apijson-framework integrated UnitAuto for unit testing without coding.

#116

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

可以使用 or 吗

#107

from apijson.

yijie8 avatar yijie8 commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

具体说下是什么样的多数据库?目前 APIJSON 已经支持

"@schema":"sys"            // 集合空间,又叫数据库模式
"@database":"POSTGRESQL"   // 跨数据库,支持 MySQL, PostgreSQL, SQLServer, Oracle, DB2 等同时使用

详细说明见通用文档中的 功能符

from apijson.

Fnckerpoi avatar Fnckerpoi commented on April 28, 2024

在传统的sql场景中如果我们一个数据表的多个字段关联了同一个表希望APIJSON能够解决sql的语法臃肿问题
具体:
A表的 AXX06 和AXX07字段存储了B表的ID,虽然06 、07字段关联同一个B表但是关联的ID是不同的
当我们需要将AXX06和AXX07对应B表的值查出来的时候就会

select 
           BXX02 as AXX06,
           BXX02 as AXX07
from A 
left join A  on AXX06 = B.id
left join A  on AXX07 = B.id

从语句中就发现 我们sql语句进行了两次left join B表,如果我们这样的字段有N个意味着我们要left join N次..........
对于开发人员来说这是很痛苦的,但是这样的情景在特定的系统和业务中数据库就是需要这么去设计

从目前APIJSON的参数语法中来看 该情景似乎APIJSON也没有这样的优化处理
这是当前APIJSON的正确语法对应上述的sql语句

{
    "[]": {
        "join": "</Tbsb/id@,</Tbsb:sign/id@",
        "Order": {
            "@column": "XXX",
            "id": 12
        },
        "Tbsb": {
            "id@": "/Order/XX07",
            "@column": "XXX"
        },
        "Tbsb:sign": { 
            "id@": "/Order/XX07",
            "@column": "XXX"
        }
    }
}

所以当JSONAPI面对 假设A表的 A.XX06和A.XX07字段 都是关联同一个B表。我们的参数语法就要按照上述格式那样。
需要声明两次tbsb表。
那有没有说更近一步的优化。
tbsb表只需要声明一次
只需要在 “id@”: “/Order/XX06” 和“/Order/XX07” 同时并存来减少代码重复

{
    "[]": {
        "join": "</Tbsb/id@",
        "Order": {
            "@column": "XXX",
            "id": 12
        },
        "Tbsb": {
            "id@": "/Order/XX06", “/Order/XX07” #将A表的的06和07字段同时在“id@”中声明。这样不管我A表有多少个字段关联的是B表的ID,我都只需要在语法声明一次Order和Tbsb即可。
            "@column": "XXX"
        }
    }
}

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

from apijson.

wanghaisheng avatar wanghaisheng commented on April 28, 2024

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

增加配置文件,下载安装
目前 官方提供的 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

from apijson.

MichonneHsu avatar MichonneHsu commented on April 28, 2024

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

《PHP不会》

from apijson.

MichonneHsu avatar MichonneHsu commented on April 28, 2024

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

这样啊😂

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

7AB4DBD591FB4A39C435C3A0693AE247

image

image

image

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

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

from apijson.

TommyLemon avatar TommyLemon commented on April 28, 2024

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

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

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

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

from apijson.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.