背景

  • 在互联网业务开发中,其实有很多时候HTTP接口的逻辑就是sql执行,典型场景比如报表系统,报表的api逻辑就只是sql执行而已,但是我们开发起来要写很多代码
  • 以java springboot项目为例,要写controller、service、mapper、entity、domain、dto,其实写这些代码都是重复性的工作,有没有办法可以只写sql就自动生成http协议的API呢?今天推荐一个开源项目就是做这个事的

开源地址: https://gitee.com/freakchicken/db-api

使用介绍

  • 只需要填写sql,和接口对应的地址和参数,选择DB地址,就可以生成接口

  • 同时还支持接口的分组管理

  • 支持接口的权限控制,只需要创建token,并给token授权可以访问哪些API

    • 还可以在页面上直接进行API访问测试
  • 有人会说,我的项目不是报表系统,API内容不只是sql执行,还要用代码对数据做一些其他转换,比如字段加密脱敏,那怎么办?

    不要急,DBAPI支持数据转换插件,通用的逻辑可以写成插件,只需要在API上配置插件信息就可以,以后API每次被访问的时候就会执行插件中的加密转换。

    具体可以查看插件开发文档

  • 又有人说了,我的项目代码哪有这么简单,每个接口里的逻辑都不一样,那DBAPI有什么用?

    仍然有用,使用 dbApi-spring-boot-starter框架可以把DBAPI集成进你自己的springboot项目,你的复杂API继续写你的代码(controller、service、mapper、dto、entity)。对于sql执行类的简单API,你就可以只用在xml中写sql和数据源地址就够了,大大降低代码量。

进阶功能

缓存

  • 对于报表业务而言,sql查询结果进行缓存也是一个常用的功能,DBAPI通过缓存插件来支持
  • 你可以自己编写缓存插件,将数据写入mangoDB/es/redis等等,非常灵活。
  • 你可以为每个API单独指定缓存插件,比如有的API查询结果我想缓存到redis,有的API查询结果我想缓存到es,有的想缓存一小时,有的想永久缓存,都可以通过指定不同的缓存插件来实现
    具体可以查看插件开发文档

动态sql

  • DBAPI支持类似mybatis的动态sql语法,同时可以在页面上方便的调试sql,包括调试动态sql

建立企业级数据接口中心的思考

  • 对一个程序员而言,DBAPI只是一个低代码开发工具,而对于一个企业而言,DBAPI能做更大的事——建立企业级的数据接口中心

  • 比如一个企业,有成千上万个数据查询的接口,一个接口内的sql几千甚至上万行,业务非常复杂,其中有的sql经手了五六个人的改造(因为人员离职、换岗)。这些接口的管理就会产生一些复杂的问题。

    1.新入职的员工接手了一个报表开发,有个数据查询的sql假设几千行,自己开发可能要好几天,但事实上已经有前人开发过了,可以复用,那去哪里查询这个接口呢?去代码里一行行找吗?如果代码没有注释怎么找?

    2.原先的报表使用某个报表工具(比如帆软)开发,现在想换个工具,或者想自己重新写前端页面开发,那之前在帆软里写好的sql就要一个个复制过来,重新写到后端接口代码里,还要改造sql,去除帆软里一些特有的语法,多麻烦。

    3.原先有的数据查询接口开放给了A部门的某个软件系统,后来A部门被拆分,要对该软件系统取消授权,并进行新的授权,如何在不改动代码的情况下进行?

    4.新的部门现在要新开发软件系统B、软件系统C,BC都要调用一些数据查询接口,而这些sql非常复杂,只有业务部门的人会写,而且开发周期很长,对于这样的sql查询接口是否可以放在一个可查询的地方,供其他软件系统专门调用?

  • 基于以上问题,作者认为企业是非常有必要建立自己统一的数据接口中心(注意不是数据中心)。推荐把数据查询sql封装成接口统一管理,每个接口的功能是什么?参数是什么?都可以方便的搜索到。如果哪个业务系统想调用,只需要申请token,并对token授权访问相应的接口。同时还可以一键导出接口文档给申请方。这种统一管理的思想会极大的降低企业内部的重复工作,并且保证数据使用的准确性。

  • 当然这一切都是针对企业内部的数据业务极其复杂的情况下。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐