掌桥专利:专业的专利平台
掌桥专利
首页

一种JSON API动态SQL生成方法和系统

文献发布时间:2023-06-19 12:22:51


一种JSON API动态SQL生成方法和系统

技术领域

本发明涉及软件开发技术领域,特别是涉及一种JSON API动态SQL生成方法和系统。

背景技术

随着互联网技术的发展,JSON已经逐步取代XML作为一种高效的数据交换格式。当前很多Web应用程序前端会获取到HTML表单的数据,并封装成JSON格式,通过AJAX方式与后台API进行交互,并完成一系列数据逻辑处理,并持久化到数据库中。

目前一个软件系统中通常都会涉及多个业务模块,不同的业务模块一般来说,数据会存储到不同的数据库表中,除了一些个性化的业务逻辑预处理外,在数据的增、删、改和查这几个SQL操作来说,模式是一致的,但就是表名和字段名不同,数据不同而已,但是传统的软件开发模式来说,存在如下缺点:

(1)数据的增、删、改和查,代码部分存在大量的重复劳动,不同的模块都要编写一个新的后台API进行处理,开发效率低。

(2)如果某个模块需求变化,增加、减少或者变更一些业务字段,需要修改对应的后台API中的SQL部分。

(3)涉及兼容多个不同类型的数据库时,如兼容MySQL和PostGreSQL,如果不借助ORM工具,则需要分别维护多种数据库类型的SQL分支代码。

发明内容

为了克服现有技术的不足,本发明提供一种JSON API动态SQL生成方法和系统,以实现任意模块的前端业务数据,后台统一用一个通用的JSON API进行处理,大幅减少后台SQL代码编写量,提高软件开发效率,降低软件开发成本,同时,由于后台JSON API可以根据JSON数据和配置项(如当前数据库类型、字段权限和字段检验条件等),动态生成SQL,并可在执行SQL前,进行字段权限检验和数据合法性检验。

为解决上述技术问题,本发明提供如下技术方案:一种JSON API动态SQL生成方法和系统,具体包括以下步骤:

(1)前端JSON数据格式约定,后台JSONAPI会根据JSON数据格式约定对JSON数据进行解析,JSON数据格式约定如下:

(2)前端JS库封装一个生成JSON数据的方法,在前端触发数据持久化操作时,如新增、更新、查询和删除时,会自动按照JSON约定生成数据。并通过AJAX POST方式发送到后台;

(3)后台统一的API入口,首先对JSON数据进行解析,并验证token是否合法,并关联查询出当前用户ID、部门ID和角色ID等;

(4)鉴权如果不通过,则返回并给出提示信息。鉴权通过后,则解析api方法全路径,如果为空,则说明没有个性化逻辑处理,只是对数据进行常规操作;

(5)利用解析出的表名、字段类型,字段名和字段值,以及数据操作,结合当前数据库类型,生成对应的SQL语句。

作为本发明的一种优选技术方案,所述(1)中的JSON数据包括模块ID(moduleId)、数据操作(action),枚举值为新增(C)、更新(U)、查(R)和删除(D),门票(token)后台逻辑处理的方法名(api),可以为空,则代表用通用JSONAPI进行处理。

作为本发明的一种优选技术方案,所述(1)中的业务数据(data)为数组,可以包含多条记录,业务数据的JSON字段名组成为字段类型编码_字段名描述,如i_age中的i代表int类型,i_age为字段名。

作为本发明的一种优选技术方案,所述(1)中的s_name的s代表string类型,s_name为字段名;d_addtime的d代表datetime类型,d_addtime为字段名;m_price的m代表money类型,m_price为字段名。

作为本发明的一种优选技术方案,所述(3)中的可以根据角色ID查询出用户的模块权限和字段权限,比如是否有权限进行删除操作等。

作为本发明的一种优选技术方案,所述(4)首先根据moduleId查询出表名,并对data进行解析,遍历出字段类型,字段名和字段值。

作为本发明的一种优选技术方案,所述(5)中的数据操作包括数据新增、数据更新、数据查询和数据删除操作。

作为本发明的一种优选技术方案,所述(5)中的SQL语句为了防止SQL注入,采用预编译方式并检测SQL高危特殊字符。

与现有技术相比,本发明能达到的有益效果是:

(1)JSON数据约定,实际上是一种接口协议,通过契约可以降低前后端人员的沟通成本,同时可以降低后期的代码维护成本。前端模块数据的新增、更新、查询和删除操作,无需等待后端发布新API。

(2)基于JSON数据约定,前端可以统一构建一个JSON生成函数,任何一个页面都可以通过此函数进行JSON数据准备,而不同每个模块单独进行JSON格式准备,提高前端的开发效率。

(3)后台JSONAPI可实现任何模块的前端业务数据常规操作,通过标准的JSONAPI可动态解析数据,并根据JSON数据和配置项,动态生成符合当前环境的SQL,大大提高后端程序开发效率。

(4)由于前后端都有通用的JSON格式生成和解析功能,当修改数据库字段,添加字段和删除字段后,只需要修改HTML页面即可,而无需修改其他代码。

附图说明

图1为JSON API动态SQL生成方法和系统的实施流程示意图;

图2为本发明中数据库表product结构示意图;

图3为本发明中模块ID和表名映射结构示意图;

图4为本发明中新增模块的表单HTML结构示意图;

图5为前端JSON生成数据示意图;

图6为后台JSONAPI生成的SQL示意图。

具体实施方式

为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施例,进一步阐述本发明,但下述实施例仅仅为本发明的优选实施例,并非全部。基于实施方式中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得其它实施例,都属于本发明的保护范围。下述实施例中的实验方法,如无特殊说明,均为常规方法,下述实施例中所用的材料、试剂等,如无特殊说明,均可从商业途径得到。

本发明提供一种JSON API动态SQL生成方法和系统,具体包括以下步骤:

(1)前端JSON数据格式约定,后台JSONAPI会根据JSON数据格式约定对JSON数据进行解析,JSON数据格式约定如下:

(2)前端JS库封装一个生成JSON数据的方法,在前端触发数据持久化操作时,如新增、更新、查询和删除时,会自动按照JSON约定生成数据。并通过AJAX POST方式发送到后台;

(3)后台统一的API入口,首先对JSON数据进行解析,并验证token是否合法,并关联查询出当前用户ID、部门ID和角色ID等;

(4)鉴权如果不通过,则返回并给出提示信息。鉴权通过后,则解析api方法全路径,如果为空,则说明没有个性化逻辑处理,只是对数据进行常规操作;

(5)利用解析出的表名、字段类型,字段名和字段值,以及数据操作,结合当前数据库类型,生成对应的SQL语句。

在本实施例中,优选的,所述(1)中的JSON数据包括模块ID(moduleId)、数据操作(action),枚举值为新增(C)、更新(U)、查(R)和删除(D),门票(token)后台逻辑处理的方法名(api),可以为空,则代表用通用JSONAPI进行处理。

在本实施例中,优选的,所述(1)中的业务数据(data)为数组,可以包含多条记录,业务数据的JSON字段名组成为字段类型编码_字段名描述,如i_age中的i代表int类型,i_age为字段名。

在本实施例中,优选的,所述(1)中的s_name的s代表string类型,s_name为字段名;d_addtime的d代表datetime类型,d_addtime为字段名;m_price的m代表money类型,m_price为字段名。

在本实施例中,优选的,所述(3)中的可以根据角色ID查询出用户的模块权限和字段权限,比如是否有权限进行删除操作等。

在本实施例中,优选的,所述(4)首先根据moduleId查询出表名,并对data进行解析,遍历出字段类型,字段名和字段值。

在本实施例中,优选的,所述(5)中的数据操作包括数据新增、数据更新、数据查询和数据删除操作。

在本实施例中,优选的,所述(5)中的SQL语句为了防止SQL注入,采用预编译方式并检测SQL高危特殊字符。

实施例:

本发明还提供一种JSON API动态SQL生成的具体实施流程,具体包括以下步骤:

S1:新建一个product表,其中数据字段为s_id、s_name、i_nums、m_price和d_addtime,具体的字段设置如图1所示,这个模块的模块ID为m001,在映射表中进行配置,如图2所示;

S2:根据product表结构,构建模块HTML代码,表单部分HTML代码如图3所示,可以看出UI字段的name和id属性设置和S01中的product表一致,同时,需要在form元素上设置data-moduleId="m0001"来标识当前页面对应的模块信息;

S3:前端用JS封装通用JSON生成函数,通过遍历form中的元素,并结合当前业务单据操作类型构建符合约定的JSON数据,如图4所示,其中的moduleId从S02中的form元素上设置的data-moduleId="m0001"中获取,action根据用户单击的功能按钮来获取,C代表新增按钮,token从cookie中获取,一般需要用户提前登录,data部分则递归form元素下的UI元素,并构建出JSON数据,如图5所示;

S4:获取到S03发送到后端的数据,并开始进行解析,鉴权如果不通过,则返回并给出提示信息,鉴权通过后,首先根据moduleId查询出表名,moduleId为"m0001"可以查询到表名product,然后遍历data部分,动态构建出SQL语句,如图6所示。

在本发明中,除非另有明确的规定和限定,第一特征在第二特征之“上”或之“下”可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征“之上”、“上方”和“上面”包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”包括第一特征在第二特征正下方和斜下方,或仅仅表示第一特征水平高度小于第二特征。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的仅为本发明的优选例,并不用来限制本发明,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

相关技术
  • 一种JSON API动态SQL生成方法和系统
  • 一种基于JSON的动态表单生成方法及系统
技术分类

06120113270567