一种RESTful架构下的通用查询DSL方法技术

技术编号:33120828 阅读:9 留言:0更新日期:2022-04-17 00:19
本发明专利技术提供了一种RESTful架构下的通用查询DSL方法,其特征在于:定义一套查询DSL,基于该DSL定义抽象出一层DSL解释引擎,并根据数据库选型,将DSL翻译成该数据库对应的SQL语句,然后交给数据库执行。其中本发明专利技术的有益效果是:轻松的解决了多数据库的适配实现,避免不同数据库厂商的巨大差异带来的开发成本;此外,业务开发人员不需要编写业务查询逻辑的实现,提高了生产力;同时,减少了人为开发的错误几率。几率。几率。

【技术实现步骤摘要】
一种RESTful架构下的通用查询DSL方法


[0001]本专利技术涉及DSL查询领域,特别涉及RESTful架构下的通用查询DSL解决方 法。

技术介绍

[0002]REST全称是Representational State Transfer,表征性状态转移。首次在 2000年Roy Thomas Fielding的博士论文中出现。一个符合REST的约束条件和原 则的架构,则被称之为RESTful架构。REST中提到了资源,通过HTTP动词实现状 态转移,比如POST创建资源、DELETE删除资源、PUT/PATCH更新资源、GET查询获 取资源等。实际业务场景中,创建、删除、更新场景相对较少,最多操作的当属 基于各种组合条件通过GET查询过滤资源。但REST并没有约定通过怎么样的统一 的GET参数执行数据查询过滤,这就出现了一系列问题:
[0003]问题一:查询接口无法统一。一个企业内部、或者不同的企业之间,由不同 的团队完成系统的开发,出现五花八门的参数,难以有效沟通。比如:系统1用 page/size做分页查询参数,page指定第几页,size指定每页的资源项的条目数, 限定返回的条数;系统2用offset/limit做分页,offset表示偏移量,limit限定 返回的条数;若要查询第3页数据(每页10条),那么系统1的参数
[0004]为:page=3&size=10,系统2的参数为:offset=20&size=10
[0005]问题二:查询的参数语义动作没有明确,不同的系统定制解析,导致业务系 统需要针对参数硬编码解析,由此,API的定义需要和业务端提前约定。比如: 仅仅从age=18很难明确确定业务系统是查询精确等于、大于、还是小于18的数据。
[0006]问题三:一般业务系统都会设计到数据库实现,由于上述2个问题引出,需 要对不同的数据库做业务查询实现,而查询条件是组合变化的,因此需要不少人 力在做多数据库翻译实现方面。
[0007]目前市面上存在各种开发语言的DSL,比如Hibernate的HQL。但是这些DSL是 面向数据库的,或者特定开发语言的。本专利技术的优势是基于轻量级的通用HTTP协 议之上的一个查询DSL,其实用性极强,开发语言无关,操作系统无关,硬件设 备无关。
[0008]其次,目前市面上的DSL,如ES(ElasticSearch)DSL解决的是非关系数据 库,即,NoSQL领域的文档检索细分解决方案;不能满足关系数据库,不同业务 表之间的复杂业务场景下的交叉关联查询。本专利技术,着重解决的基于业务系统的 以及关系数据库实现的查询抽象支持。

技术实现思路

[0009]为了解决上述技术问题,本专利技术中披露了一种RESTful架构下的通用查询DSL 方法,本专利技术的技术方案是这样实施的:
[0010]一种RESTful架构下的通用查询DSL方法,定义一套查询DSL,基于该DSL 定义抽象出一层DSL解析引擎,并根据数据库选型,将DSL翻译成该数据库对应 的SQL语句,然后交给数据库执行。
[0011]优选地,DSL定义包括分页表示、排序表示、检索条件和多实体关联查询的 DSL表示法。
[0012]优选地,所述检索条件包括查询条件参数、字段名称和匹配模式。
[0013]优选地,所述DSL解析引擎包括DSL MySQL解析引擎、DSL Oracle解析引擎 和DSL PGSQL解析引擎。
[0014]优选地,所述DSL解析引擎解析流程如下,
[0015]S1,客户端发出查询请求;
[0016]S2,DSL解析引擎判断请求的数据库类型并调出与该类型对应的解析引擎;
[0017]S3,解析引擎对该请求的参数进行分类并逐级处理;
[0018]S4,参数处理完毕;
[0019]S5,解析生成SQL语句并交给数据库执行。
[0020]优选地,所述S3包括S3.1,判断是否为q

开头,若是,则追加查询条件; 若不是,进行S3.2;
[0021]S3.2,判断是否为page,若是,则进行分页处理;若不是,进行S3.3;
[0022]S3.3,判断是否为size,若是,则进行页宽处理;若不是,进行S3.4;
[0023]S3.4,判断是否为sort,若是,则进行排序处理;若不是,进行S3.5;
[0024]S3.5,处理其他参数。
[0025]优选地,所述MySQL解析引擎解析步骤如下,
[0026]根据URL解析出资源名称,定位到数据库查询需要处理的表;解析URL中包 含通用的分页参数并翻译为对应的数据库的Offset/Limit查询子句;
[0027]解析URL中包含的q

开头的参数,并翻译为数据库的Where条件查询子句;
[0028]根据数据库中表定义的每个列对应的元数据信息,将参数值字符串转换成数 据库列映射的类型,通过数据库厂商提供的查询接口将查询语句以及对应的参数 提交给提交给数据库执行查询;
[0029]MySQL解析引擎提交数据库执行后拿到返回结果,将结果集合映射筛选后返 回给请求的客户端。
[0030]优选地,当客户端发出的请求包括两个或两个以上的查询对象时,DSL解析 引擎的解析过程如下,
[0031]A,应用层根据查询指令将该查询请求分解成多个DSL子句;
[0032]B,多个DSL字句分别交给DSL引擎解析,并提交给数据库执行查询;
[0033]C,根据B步骤得到分解的多次查询结果,在应用层做聚合计算,将数据拼 装剪裁打包等;
[0034]D,将C步骤的结果返回给客户端。
[0035]本专利技术根据数据库选型的不同,可以抽象出一套中间层解析引擎,动态翻译 成指定的SQL查询,从而轻松的解决了多数据库的适配实现,避免不同数据库厂 商的巨大差异带来的开发成本;此外,业务开发人员不需要编写业务查询逻辑的 实现,提高了生产力;同时,减少了人为开发的错误几率。
附图说明
[0036]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例 或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的 附图仅仅是本专利技术的一种实施例,对于本领域普通技术人员来讲,在不付出创造 性劳动的前提下,还可以根据这些附图获得其他的附图。
[0037]其中相同的零部件用相同的附图标记表示。需要说明的是,下面描述中使用 的词语“前”、“后”、“左”、“右”、“上”和“下”指的是附图中的方向,词语“底 面”和“顶面”、“内”和“外”分别指的是朝向或远离特定部件几何中心的方向。
[0038]图1为DSL工作原理图;
[0039]图2为DSL解析流程图。
具体实施方式
[0040]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清 楚、本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种RESTful架构下的通用查询DSL方法,其特征在于:定义一套查询DSL,基于该DSL定义抽象出一层DSL解析引擎,并根据数据库选型,将DSL翻译成该数据库对应的SQL语句,然后交给数据库执行。2.根据权利要求1所述的一种RESTful架构下的通用查询DSL方法,其特征在于:DSL定义包括分页表示、排序表示、检索条件和多实体关联查询的DSL表示法。3.根据权利要求2所述的一种RESTful架构下的通用查询DSL方法,其特征在于:所述检索条件包括查询条件参数、字段名称和匹配模式。4.根据权利要求3所述的一种RESTful架构下的通用查询DSL方法,其特征在于:所述DSL解析引擎包括DSL MySQL解析引擎、DSL Oracle解析引擎和DSL PGSQL解析引擎。5.根据权利要求4所述的一种RESTful架构下的通用查询DSL方法,其特征在于:所述DSL解析引擎解析流程如下,S1,客户端发出查询请求;S2,DSL解析引擎判断请求的数据库类型并调出与该类型对应的解析引擎;S3,解析引擎对该请求的参数进行分类并逐级处理;S4,参数处理完毕;S5,解析生成SQL语句并交给数据库执行。6.根据权利要求5所述的一种RESTful架构下的通用查询DSL方法,其特征在于:所述S3包括S3.1,判断是否为q

开头,若是,则追加查询条件;若不是,进行S3.2;S3.2,判断是否为page,若是,...

【专利技术属性】
技术研发人员:曹月兵
申请(专利权)人:上海羚数智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1