Skip to content

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

Open

Description

@cloudAndMonkey

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

Activity

  1. cloudAndMonkey commented on Nov 18, 2022

    @cloudAndMonkey
    ContributorAuthor

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

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

  2. TommyLemon commented on Nov 18, 2022

    @TommyLemon
    Member

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

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

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

    #37 (comment)

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

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

  3. TommyLemon commented on Nov 18, 2022

    @TommyLemon
    Member

    请问 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

  4. TommyLemon commented on Nov 18, 2022

    @TommyLemon
    Member
  5. cloudAndMonkey commented on Nov 18, 2022

    @cloudAndMonkey
    ContributorAuthor

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

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

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

    #37 (comment)

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

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

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

  6. TommyLemon commented on Nov 18, 2022

    @TommyLemon
    Member

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

  7. cloudAndMonkey commented on Nov 22, 2022

    @cloudAndMonkey
    ContributorAuthor

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

    嗯, 需要的场景不一样

  8. cloudAndMonkey commented on Nov 23, 2022

    @cloudAndMonkey
    ContributorAuthor

    @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

  9. cloudAndMonkey commented on Nov 23, 2022

    @cloudAndMonkey
    ContributorAuthor

    @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

  10. TommyLemon commented on Nov 23, 2022

    @TommyLemon
    Member

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

  11. TommyLemon commented on Nov 23, 2022

    @TommyLemon
    Member

    @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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Ecosystem 周边生态完善生态(Go语言版、更多Demo、周边工具等)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions