基于springboot的配置化接口开发工具包的设计及使用

        此工具包用于辅助后端开发人员快速提供接口及接口文档。

        项目地址: capi-server: 基于springboot的配置化接口开发工具 

        以maven模块的方式集成springboot项目中,提供一套配置化的接口开发方式,不影响原有的接口开发方式,也不影响原有接口的使用。前端人员使用时与使用正常开发的接口无差别。    

        此工具包内涵接口配置页面,用于配置接口。内涵在线接口文档,基于swagger改造而来,可在线调试接口。

        以在线配置的方式定义接口,设置接口访问url,请求参数,返回参数及要操作的数据表。支持在线设置子查询,关联查询,各种组合的查询条件,参数必填验证,返回结果字段控制,分页,排序,id初始化,操作人设置,操作时间设置,默认值设置,时间格式自定义等等。若配置项无法满足复杂的业务逻辑,支持前置处理bean和后置处理bean配置,开发人员只需实现数据的处理逻辑即可。

        对于一般的增删查改接口,可以在不停机的情况下只需几分钟就完成接口的开发,并能直接调试,且包含完整的接口文档。

        对于包含复杂逻辑的接口,可以在几分钟之内完成接口配置,生成接口文档供前端使用,然后在实现数据的处理逻辑。

1 设计原理

       大多数的后端接口,都需要操作表数据,操作表的sql,通常会放在xml配置文件里,也有的放在代码中。这个其实可以放在数据库里,加载在缓存中,使用的时候取出来。

       Springboot的接口定义支持如下的方式

        /{project}/capipost/{module}/{urlName}

       

        /{project}/capiget/{module}/{urlName}

    用这种方式定义一个通用的大接口。通过 {project}.{module}.{urlName}组合为key可以找到已提前配置好的sql,但光有sql不够,还得有操作类型(查询,新增,修改或删除),请求参数信息和结果参数信息,同时为了控制查询条件及返回字段,sql需要能根据配置动态组装。

     这里设计了接口定义表,接口请求参数表,接口结果参数表,三张表来存储这些信息。

    接口调用时,根据操作类型调用不同的服务方法,根据配置对请求参数进行预处理,然后组装sql语句,执行,然后根据配置对结果处理后返回。

    为了方便配置,提供配置页面,配置页面可下拉联想出数据库中存在的表和表字段

    为了能快速配置,提供默认的初始化配置功能,可以初始化标准的增删查改接口。

    为了方便与前端对接和调试,对swagger进行改造,将根据配置信息来生成接口文档。

    为了支持完成复杂的业务逻辑,定义了前置处理接口和后置处理接口,根据业务逻辑是放在执行sql前还是执行后,来实现对应的bean,在配置中指定bean名称,即可完成调用。

    对于需要连续操作多个表的情况,支持在配置中指定其他的配置key,可以一个请求连续执行多套配置。

   

2 应用方式

目前仅支持pg库,其他类型数据库需要稍作改动

前面分享的项目地址中,项目分两个模块 starter 和 capi, starter只是一个简单的springboot的启动器,挂载capi模块启动。capi为核心功能模块,可集成到其他的springboot项目中。

若需要使用,初始化sql脚本,然后将capi模块集成到自己的springboot项目中,注意需要统一 dao文件的扫描路径,也需要开放接口文档的访问路径,参照 starter中 WebMvcConfig 配置类即可。

3 使用说明

正常集成启动后,会有两个页面可以访问

       配置接口访问:http://localhost:8080/capiConfig.html

       接口文档访问:  http://localhost:8080/capiDoc.html

接口文档的使用方式与swagger文档的使用方法无差别,下面重点说明接口配置的使用:

3.1 初始化基本配置

访问 http://localhost:8080/capiConfig.html 会进入如下界面

点击初始化后,需要等待一段时间,会初始化出基本接口

 访问接口文档:http://localhost:8080/capiDoc.html 可以查看到初始化的接口

 此时,如果没有其他要求,这套接口已经可以提供给前端人员使用了。不过一般都会有其他的设置,比如组合的查询条件,时间格式,序列的生成,新增修改保存时的操作人操作时间设置等。此时,可对接口,接口参数,结果参数进行编辑调整。

3.2 接口编辑

      

配置项说明:

项目:根据schema 生成,不允许修改

模块(表): 表名称的驼峰写法,当未配置基础sql时,会将此值转换为表名进行操作

模块名称:表的注释,在接口文档中用于分菜单展示

服务: 服务方法名,生成的访问url的最后一段

服务名:用于接口文档中看到的接口名称

请求类型:目前仅支持 post

服务类型:列表查询(query),会查询所有数据;

                 分页查询(queryPage),默认支持page,rows参数,进行分页返回

                详情查询(queryInfo),详情查询,返回查询结果的第一条

                新增(insert),新增

                修改(update),修改

                保存(save),会判断指定字段是否有值,有着修改,无则新增,需要在扩展json中指定字段,例 {“updateid”:”id”} ,表示根据id存在就执行更新。

        自定义(custom),需要直接在基础sql中配置要执行的完整sql语句,sql中支持mybaits的标签,调用时会自动设置值执行。
基础sql:  配置执行的sql,仅需配置 from 和 where 之间的部分
               如要查询 select t.area_name from area t where t.id =1 仅需配置 area t
               即可,其他段会根据参数组装。如果有表连接查询,写成 (table t1 join table                t2 on t1.id=t2.id)t 注意,查询类型的配置,最后需要指定表别名,且值固定是t
               为空时,会根据模块(表)配置的值生成表名,进行操作
               值写为 “null”, 表示不需要执行sql。
               值为json格式时,调用接口直接返回配置的json。
排序/分组规则: 配置 order by 和 group by 语句,会自动拼接在sql最后面
前置处理器: 配置实现了前置处理接口的服务bean名称。2.5 有详细说明
后置处理器:配置实现了后置处理接口的服务bean名称。2.6有详细说明
记录日志和权限控制: 功能暂未实现

3.3 请求参数编辑

       点击请求参数,会弹出接口请求参数的列表。

   可进行批量的删除,启用,禁用,行上的新增表示基于原有的copy一份新的

       点击批量新增参数时,可批量选择参数进行新增:

  添加参数后,对参数进行编辑:

 字段说明:

        参数: 表示参数名称,调用接口时,需要按此值传参

        参数名: 用于接口文档中的参数描述。

       参数类型: 参数的类型。需要注意的是,Date类型时,需要在 格式化配置中,配置时间格式, 例如: yyyy-MM-dd 。 object和list,表示参数分别时对象形式和集合形式,这种配置会单独在 2.3 中说明。

        是否必填: 选择是,调用接口时会对此参数进行必填校验

        查询类型:等于,大于小于等等,其中 in类型时,需要参数传入的是list。自定义时,会自动将查询列中配置的语句作为一个完成的查询条件。

        查询链接符: 为空时,默认为and ,可以配置为 and,or, and_or_1 ,or_and_1等等,其中 and_or_1这种配置,表示会与其他的有相同连接符配置的参数,组成组合查询,相互之间是 or关系,对外是and关系。

        查询列:  指定要查询的表字段名称。

                        为空时,默认将参数驼峰转下划线写法,进行查询

        默认值类型:会根据类型设置参数的默认值。调用接口时未传此参数值,会自动按规则赋值。支持自定义、当前时间、当前登录id、当前机构id、序列等等设置。选择自定义时,会将 默认值配置的值设置给该参数。选择接口时,会调用配置的接口,2.3中有详细说明。选择序列时,需要在 默认值中配置序列名。

        默认值: 配置默认值

        格式化:主要用于date类型的数据,将传入的参数按此格式转为date对象

        校验规则: 待实现。

3.4 结果参数配置

点击行上的结果参数,弹出结果参数列表,只有查询类型的接口才会有结果参数。

 

可进行批量的删除,启用,禁用,行上的新增表示基于原有的copy一份新的

       点击批量新增参数时,可批量选择参数进行新增:

   添加参数后,对参数进行编辑:

 

字段说明:

           参数:返回的字段名,在执行查询sql中,会自动将此值拼接在sql语句中

                       例 : select status_cd “statusCd” .

           参数名: 用于接口文档展示。

           参数类型 : 为date时,需要配置渲染类型和渲染值,用于格式化时间格式。配置object和list时,需要渲染类型配置为接口,具体参考 2.4.

           是否展示:  原定于定义前端是否展示此字段,暂无用。如需要不返回此字段,禁用或删除此参数配置即可。

          渲染类型: 选date时,渲染值得配置时间格式,例 yyyy-MM-dd

                        选子查询时,渲染值得配置子查询语句,别名自动为参数名

                        选接口时, 2.4中有详细说明

3.5 请求参数中配置嵌套配置

     在请求参数中可配置已配置的接口。用于涉及对多个表进行新增修改时,可包装为一个接口。

选择参数类型为 object 或者list , 默认值类型为接口,默认值为接口名。

接口名需要是在接口配置中已配置的接口,按”项目.模块.服务”指定配置。

 例如:“public.area.insert(id=areaId)”

   public 为项目名,area为模块名,insert是服务名。(id=areaId),表示调用此参数中配置的接口时,将参数areaId的值传给此接口的id参数。

       参数中配置的接口,会先执行。

      

3.6结果参数中配置嵌套配置

       在参数接口中可配置接口。用于涉及在一对多的详情查询时,能用一个接口返回。

选择参数类型为 object 或 list,渲染类型为接口,渲染值为 接口名。

接口需要是在接口配置中已配置的接口,按”项目.模块.服务”指定配置。

 例如:“public.area.query(id=areaId)”

   public 为项目名,area为模块名,query是服务名。(id=areaId),表示调用此参数中配置的接口时,将参数areaId的值传给此接口的id参数。

       结果参数中配置的接口,会在接口执行完之后执行,并将查询结果拼接在返回结果中。

3.7 前置处理bean

       在接口配置中可配置前置处理bean,用于在需要代码处理的情况,可以配置代码段进行处理。

要实现的接口:

      

      

3.8 后置处理bean

在接口配置中可配置后置处理bean,用于在需要代码处理接口的情况,可以配置代码段处理。

要实现的接口:

      

4 操作日志与权限控制

       若需记录操作日志,只要在通用接口那进行拦截即可。

       若需进行权限控制,需要查询接口配置信息,根据配置信息的接口访问路径来设置接口权限

5 性能及安全性

       配置信息会提前加载到缓存中,执行性能与正常接口基本无差别。

       安全方面主要是sql注入问题,无此方面问题。

6 后续功能扩展

       集成前端页面,设计可配置性的不同风格的页面,能根据配置信息进行不同数据的展示,达到在不停机的情况下就能提供页面操作功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值