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

图形化拖拽生成json执行语句 #471

Open
cloudAndMonkey opened this issue Nov 18, 2022 · 11 comments
Open

图形化拖拽生成json执行语句 #471

cloudAndMonkey opened this issue Nov 18, 2022 · 11 comments
Labels
Ecosystem 周边生态 完善生态(Go语言版、更多Demo、周边工具等)

Comments

@cloudAndMonkey
Copy link
Contributor

image
@TommyLemon 请问这个功能实现了吗?

@cloudAndMonkey
Copy link
Contributor Author

cloudAndMonkey commented Nov 18, 2022

请问 apijson5.3 支持 delete 通过条件删除了吗?
delete from xxx where id in (select xxx_id from dd where ...);
delete from xxx where conditions

我用5.4测了一下还是不行呀
image

@TommyLemon
Copy link
Collaborator

TommyLemon commented Nov 18, 2022

image @TommyLemon 请问这个功能实现了吗?

其它 BG 有同事做了,但暂时应该不会开源。

APIAuto 新增支持:
1.点击各种超链接智能生成 APIJSON 请求的 URL + JSON

#37 (comment)

2.自动推荐智能补全参数(APIJSON)
#37 (comment)

已经比以上在表格 UI 上点点选选的方案要方便高效很多了。

@TommyLemon
Copy link
Collaborator

TommyLemon commented Nov 18, 2022

请问 apijson5.3 支持 delete 通过条件删除了吗? delete from xxx where id in (select xxx_id from dd where ...); delete from xxx where conditions

我用5.4测了一下还是不行呀 image

支持传这个子查询条件,但还是必须再传 id/id{} ,可以改下源码
AbstractVerifier 新增一个
public static boolean IS_UPDATE_MUST_HAVE_ID_CONDITION = true; // 为 PUT, DELETE 强制要求必须有 id/id{} 条件
子类把值设置为 false,然后对应
AbstractVerifier.verifyId 对应校验的地方,传参 atLeastOne: true 改为 IS_FORCE_ID_CONDITION_4_WRITE
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L676
image

@TommyLemon
Copy link
Collaborator

改了后麻烦提交 PR 贡献下代码哦,开源要大家一起参与贡献才会更美好~
image

https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%80%E5%AE%9A%E8%A6%81%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81

@cloudAndMonkey
Copy link
Contributor Author

cloudAndMonkey commented Nov 18, 2022

image @TommyLemon 请问这个功能实现了吗?

其它 BG 有同事做了,但暂时应该不会开源。

APIAuto 新增支持: 1.点击各种超链接智能生成 APIJSON 请求的 URL + JSON

#37 (comment)

2.自动推荐智能补全参数(APIJSON) #37 (comment)

已经比以上在表格 UI 上点点选选的方案要方便高效很多了。

我这边的场景是:
通过选择表单字段或者在线表结构 去生成 单表、多表json语句模版.减少前端学习成本
APIAuto 空了让前端的小伙伴研究一下, 我刚才点击一个表字段,然后生成了json语句, 看看能不能复用

@TommyLemon
Copy link
Collaborator

TommyLemon commented Nov 18, 2022

增删改查都支持,能根据权限角色配置、参数校验规则来生成,还能点 [' / "] 按钮切换生成简单接口模式,多点点试试

@cloudAndMonkey
Copy link
Contributor Author

增删改查都支持,能根据权限角色配置、参数校验规则来生成,还能点 [' / "] 按钮切换生成简单接口模式,多点点试试

嗯, 需要的场景不一样

@cloudAndMonkey
Copy link
Contributor Author

cloudAndMonkey commented Nov 23, 2022

@TommyLemon
修改支持非id条件删除,上次讨论你给的解决方案如下:
支持传这个子查询条件,但还是必须再传 id/id{} ,可以改下源码 AbstractVerifier 新增一个 public static boolean IS_UPDATE_MUST_HAVE_ID_CONDITION = true; // 为 PUT, DELETE 强制要求必须有 id/id{} 条件 子类把值设置为 false,然后对应 AbstractVerifier.verifyId 对应校验的地方,传参 atLeastOne: true 改为 IS_FORCE_ID_CONDITION_4_WRITE

我思考了一下 ,按照上面的解决方案, 存在控制粗力度的问题.
调用 verifyId 是在 new OnParseCallback() {} 内部, 只能调用 静态方法, 静态方法没法在子类里面重载, 所以就只能作为全局开关.
image

如果想要细粒度的控制某一张表, 可以通过 request structure must条件来控制即可
image

@cloudAndMonkey
Copy link
Contributor Author

cloudAndMonkey commented Nov 23, 2022

@TommyLemon
非id删除, ref 删除 支持 with-as 我都搞定了
image
image

但是有一种情况,你看看需不需要处理:
{
"sql@": {
"@method": "GET",
"with": true,
"from": "User",
"User": {
"@column": "username",
"username": "test1"
}
},
"User": {
"@method": "DELETE",
"username{}@": "sql"
},
"explan": true
}
删除操作 主表 和 子查询 是同一张表
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

image

@TommyLemon
Copy link
Collaborator

赞,也可以根据 MySQL 版本来做不同处理
isMySQL() && getDBVersionNums()[0] >= 8

@TommyLemon
Copy link
Collaborator

TommyLemon commented Nov 23, 2022

@TommyLemon 修改支持非id条件删除,上次讨论你给的解决方案如下: 支持传这个子查询条件,但还是必须再传 id/id{} ,可以改下源码 AbstractVerifier 新增一个 public static boolean IS_UPDATE_MUST_HAVE_ID_CONDITION = true; // 为 PUT, DELETE 强制要求必须有 id/id{} 条件 子类把值设置为 false,然后对应 AbstractVerifier.verifyId 对应校验的地方,传参 atLeastOne: true 改为 IS_FORCE_ID_CONDITION_4_WRITE

我思考了一下 ,按照上面的解决方案, 存在控制粗力度的问题. 调用 verifyId 是在 new OnParseCallback() {} 内部, 只能调用 静态方法, 静态方法没法在子类里面重载, 所以就只能作为全局开关. image

如果想要细粒度的控制某一张表, 可以通过 request structure must条件来控制即可 image

是这样,静态变量做全局处理,特殊接口用 Operation.MUST id/id{} 做自定义处理。
之所以默认必传,是因为安全意识不够、编码粗心大意的人太多了,所以要有一个底线保障,尽可能避免安全隐患。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Ecosystem 周边生态 完善生态(Go语言版、更多Demo、周边工具等)
Projects
None yet
Development

No branches or pull requests

2 participants