CN111414378A - 一种基于GraphQL的类元数据框架 - Google Patents
一种基于GraphQL的类元数据框架 Download PDFInfo
- Publication number
- CN111414378A CN111414378A CN202010184455.9A CN202010184455A CN111414378A CN 111414378 A CN111414378 A CN 111414378A CN 202010184455 A CN202010184455 A CN 202010184455A CN 111414378 A CN111414378 A CN 111414378A
- Authority
- CN
- China
- Prior art keywords
- graphq
- sql
- metadata
- framework
- class metadata
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24556—Aggregation; Duplicate elimination
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明属于Web后端开发技术领域,是一种基于GraphQL的类元数据框架,所述基于GraphQL的类元数据框架使用GraphQL基本语法,结合元数据查询组件,实现从元数据查询语句到实际执行的SQL或第三方接口调用的安全、快速转换。本发明数据获取更加精确,无冗余,对于只需获取id、name的相关接口,只会返回这两个字段相关的数据,不会产生多余的数据,使用框架后引入的依赖较少,无需解决繁杂的依赖冲突问题,与就有代码无缝融合,实现新的业务需求或需求变更,可以在不更改后端代码的前提下,通过编写查询语句实例实现。服务的稳定性更强,实现了聚合多个查询为单个查询的效果,以及达到了与当前元数据框架类似的查询能力。
Description
技术领域
本发明涉及Web后端开发技术领域,具体为一种基于GraphQL的类元数据框架。
背景技术
在企业应用开发中,经常要面对大量的客户需求,以及需求变更。传统的纯后端代码实现的开发方式,面对大量的需求及变更时,需要耗费较大的人力。
元数据开发(MDD)的开发框架,使一部分用户需求从后端代码中分离出来。通过对需求相关的领域实体进行元数据描述,辅之以定制化的查询语句,可以在不编写或少量编写代码的场景下快速实现新需求或对需求变更进行支持。
然而,目前现有的元数据框架抽象层级较高,实现相对独立。引入相关元数据框架,也存在一系列问题:
1、现有的元数据框架需要引入元数据框架相关的一系列基础设施(如自研的ORM框架),较为重量级。与现有开发框架融合时,容易产生依赖冲突;
2、现有的元数据框架引入元数据还要考虑到如何与旧有实现的代码进行融合,处理难度较大。
发明内容
(一)解决的技术问题
针对现有技术的不足,本发明提供了一种基于GraphQL的类元数据框架,解决了现有的元数据框架需要引入元数据框架相关的一系列基础设施(如自研的ORM框架),较为重量级。与现有开发框架融合时,容易产生依赖冲突,以及引入元数据还要考虑到如何与旧有实现的代码进行融合,处理难度较大的问题。
(二)技术方案
为实现上述目的,本发明提供如下技术方案:一种基于GraphQL的类元数据框架,所述基于GraphQL的类元数据框架使用GraphQL基本语法,结合元数据查询组件,实现从元数据查询语句到实际执行的SQL或第三方接口调用的安全、快速转换,所述基于GraphQL的类元数据框架的架构方法包括以下步骤:
S1、开始:客户端发起GraphQL请求;
S2、类元数据查询语句:根据客户端发起的GraphQL请求,基于类元数据组件生成相应的类型集合Schema;
S3、GraphQL类型查询:根据生成的相应类型集合Schema在客户端进行业务请求,系统对该业务请求权限进行判断,当该业务请求符合请求权限时,进入下一流程,当该业务请求超出请求权限时,则该业务请求失效,请求结束;
S4、数据安全性加固校检:对业务请求中每个元素进行访问、检查,实现安全加固;
S5、ORM层使用mybatis:提供两种不同的sql翻译:基于mybatis的sql翻译和原生sql翻译,在显示框架内选择是否对加固校检后的数据选用基于mybatis的sql翻译,当选择基于mybatis的sql翻译时,基于mysql的sql翻译,可以将类元数据查询组件的数据,翻译为两部分:PreparedStatement的sql语句,sql替换参数映射paramMap,反之则选用原生sql翻译,即直接将查询组件实例翻译为可直接执行的sql语句;
S6、结束:执行最终sql语句并返回结果。
作为本发明的一种优选技术方案,所述类元数据组件具体包括Fields、Entity、Conditions、Groupby、Having、Ordreby和Limit组成元素,用于满足绝大多数基于关系数据库的业务系统的使用场景。
作为本发明的一种优选技术方案,所述S4中,安全检查使用的是访问者模式(SecureVisitor),通过对每个元素进行访问、检查,实现安全加固。
作为本发明的一种优选技术方案,所述S5中,需要对查询组件进行遍历,本框架采用访问者模式,对类元数据查询组件进行遍历,并构造sql语句。
作为本发明的一种优选技术方案,所述S5中,Mybatis的使用中,提供了PreparedStatement的访问方式,使用PreparedStatement,可以避免sql注入。
(三)有益效果
与现有技术相比,本发明提供了一种基于GraphQL的类元数据框架,具备以下有益效果:
1、该基于GraphQL的类元数据框架,数据获取更加精确,无冗余,对于只需获取id、name的相关接口,只会返回这两个字段相关的数据,不会产生多余的数据。
2、该基于GraphQL的类元数据框架,使用框架后引入的依赖较少,无需解决繁杂的依赖冲突问题,与就有代码无缝融合。
3、该基于GraphQL的类元数据框架,实现新的业务需求或需求变更,可以在不更改后端代码的前提下,通过编写查询语句实例实现。服务的稳定性更强。
4、该基于GraphQL的类元数据框架,实现了聚合多个查询为单个查询的效果。
5、该基于GraphQL的类元数据框架,达到了与当前元数据框架类似的查询能力。
附图说明
图1为本发明的流程示意图;
图2为本发明中类元数据组件的示意框图;
图3为本发明中基于mybatis的sql翻译和原生sql翻译的sql翻译示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
请参阅图1-3,本发明提供以下技术方案:一种基于GraphQL的类元数据框架,基于GraphQL的类元数据框架使用GraphQL基本语法,结合元数据查询组件,实现从元数据查询语句到实际执行的SQL或第三方接口调用的安全、快速转换,基于GraphQL的类元数据框架的架构方法包括以下步骤:
S1、开始:客户端发起GraphQL请求;
S2、类元数据查询语句:根据客户端发起的GraphQL请求,基于类元数据组件生成相应的类型集合Schema;
S3、GraphQL类型查询:根据生成的相应类型集合Schema在客户端进行业务请求,系统对该业务请求权限进行判断,当该业务请求符合请求权限时,进入下一流程,当该业务请求超出请求权限时,则该业务请求失效,请求结束;
S4、数据安全性加固校检:对业务请求中每个元素进行访问、检查,实现安全加固;
S5、ORM层使用mybatis:提供两种不同的sql翻译:基于mybatis的sql翻译和原生sql翻译,在显示框架内选择是否对加固校检后的数据选用基于mybatis的sql翻译,当选择基于mybatis的sql翻译时,基于mysql的sql翻译,可以将类元数据查询组件的数据,翻译为两部分:PreparedStatement的sql语句,sql替换参数映射paramMap,反之则选用原生sql翻译,即直接将查询组件实例翻译为可直接执行的sql语句;
S6、结束:执行最终sql语句并返回结果。
具体的,类元数据组件具体包括Fields、Entity、Conditions、Groupby、Having、Ordreby和Limit组成元素,用于满足绝大多数基于关系数据库的业务系统的使用场景。
本实施例中,如图2所示,可以看到,类元数据组件中的元素,基本和sql语句当中的语法相近,由于业务代码中经常需要使用关系数据库作为数据存储,因此,该元数据组件的设计可以满足绝大多数基于关系数据库的业务系统的使用场景。
具体的,S4中,安全检查使用的是访问者模式(SecureVisitor),通过对每个元素进行访问、检查,实现安全加固。
具体的,S5中,需要对查询组件进行遍历,本框架采用访问者模式,对类元数据查询组件进行遍历,并构造sql语句。
本实施例中,安全检查使用的依然是访问者模式(SecureVisitor),通过对每个元素进行访问、检查,实现安全加固;
例如,对于组件类型,编写的安全加固代码如下:
与安全加固类似,在做数据权限设计时,也可以通过编写权限访问者,在翻译sql的访问者执行之前修改组件,对组件中的某些查询条件添加数据权限相关的查询组件实例。
具体的,S5中,Mybatis的使用中,提供了PreparedStatement的访问方式,使用PreparedStatement,可以避免sql注入。
本实施例中,如图3所示,框架提供了两种不同的sql翻译:基于mybatis的sql翻译,和原生sql翻译;
其中,Mybatis的使用中,提供了PreparedStatement的访问方式。使用PreparedStatement,可以避免sql注入。因此,基于mysql的sql翻译,可以将类元数据查询组件的数据,翻译为两部分:PreparedStatement的sql语句,sql替换参数映射paramMap。
在mapper中,定义了一个基础sql标签:
<selectid="selectDynamic"parameterType="map"resultType="map">
${sql}
</select>
传入的map参数包含两部分:preparedStatement相关的sql语句,使用${sql}替换。
例如,一个示例的mybatis翻译结果如下:
preparedStatemet:
select sum(distinct t0.`id`)as s from invoice t0 where t0.`name`=#{_p1}order by t0.`id`asc"
paramMap:
{_p1=einvoice}
原生sql翻译,会直接将查询组件实例翻译为可直接执行的sql语句。例如,对于前面的mybatis实例,翻译为原生sql,如下:
Sql:
select sum(distinct t0.`id`)as s from invoice t0 where t0.`name`="einvoice"having t0.`name`="einvoice"order by t0.`id`asc
其他参数映射,会在${sql}中以#{var}进行替换。
由此可见,使用该类元数据方案,可以直接与相应的sql语句进行映射。快速实现新的需求或需求变更。
本发明的工作原理及使用流程:使用时,一方面无需变更技术栈。使用元数据框架,也相应引入了相关的一揽子基础设施框架(如元数据自研的ORM框架等)。使用类元数据框架,仅需引入少量依赖,产生依赖冲突的概率较小;另一方面与现有代码无缝融合,基于GraphQL和SPQR框架,仅需在旧有代码上添加少量注解,快速将旧有代码融入到GraphQL体系当中,适用于面向微服务、部署在云(Cloud)中的应用程序;类元数据框架在保留了元数据基础功能的前提下,还使用了GraphQL的自身的能力:聚合查询、类型系统、静态约束。使用更加便捷。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于GraphQL的类元数据框架,其特征在于:所述基于GraphQL的类元数据框架使用GraphQL基本语法,结合元数据查询组件,实现从元数据查询语句到实际执行的SQL或第三方接口调用的安全、快速转换,所述基于GraphQL的类元数据框架的架构方法包括以下步骤:
S1、开始:客户端发起GraphQL请求;
S2、类元数据查询语句:根据客户端发起的GraphQL请求,基于类元数据组件生成相应的类型集合Schema;
S3、GraphQL类型查询:根据生成的相应类型集合Schema在客户端进行业务请求,系统对该业务请求权限进行判断,当该业务请求符合请求权限时,进入下一流程,当该业务请求超出请求权限时,则该业务请求失效,请求结束;
S4、数据安全性加固校检:对业务请求中每个元素进行访问、检查,实现安全加固;
S5、ORM层使用mybatis:提供两种不同的sql翻译:基于mybatis的sql翻译和原生sql翻译,在显示框架内选择是否对加固校检后的数据选用基于mybatis的sql翻译,当选择基于mybatis的sql翻译时,基于mysql的sql翻译,可以将类元数据查询组件的数据,翻译为两部分:PreparedStatement的sql语句,sql替换参数映射paramMap,反之则选用原生sql翻译,即直接将查询组件实例翻译为可直接执行的sql语句;
S6、结束:执行最终sql语句并返回结果。
2.根据权利要求1所述的一种基于GraphQL的类元数据框架,其特征在于:所述类元数据组件具体包括Fields、Entity、Conditions、Groupby、Having、Ordreby和Limit组成元素,用于满足绝大多数基于关系数据库的业务系统的使用场景。
3.根据权利要求1所述的一种基于GraphQL的类元数据框架,其特征在于:所述S4中,安全检查使用的是访问者模式(SecureVisitor),通过对每个元素进行访问、检查,实现安全加固。
4.根据权利要求1所述的一种基于GraphQL的类元数据框架,其特征在于:所述S5中,需要对查询组件进行遍历,本框架采用访问者模式,对类元数据查询组件进行遍历,并构造sql语句。
5.根据权利要求1所述的一种基于GraphQL的类元数据框架,其特征在于:所述S5中,Mybatis的使用中,提供了PreparedStatement的访问方式,使用PreparedStatement,可以避免sql注入。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010184455.9A CN111414378B (zh) | 2020-03-17 | 2020-03-17 | 一种基于GraphQL的类元数据框架 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010184455.9A CN111414378B (zh) | 2020-03-17 | 2020-03-17 | 一种基于GraphQL的类元数据框架 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111414378A true CN111414378A (zh) | 2020-07-14 |
CN111414378B CN111414378B (zh) | 2023-08-29 |
Family
ID=71491204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010184455.9A Active CN111414378B (zh) | 2020-03-17 | 2020-03-17 | 一种基于GraphQL的类元数据框架 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111414378B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741878A (zh) * | 2021-08-30 | 2021-12-03 | 上海明略人工智能(集团)有限公司 | 基于GraphQL的接口构建方法、系统、电子设备及存储介质 |
CN114996539A (zh) * | 2022-07-29 | 2022-09-02 | 昆仑智汇数据科技(北京)有限公司 | 一种信息处理方法、装置及设备 |
CN117193750A (zh) * | 2023-11-08 | 2023-12-08 | 深圳大数信科技术有限公司 | 一种基于CraphQL的全栈低代码平台实现方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799644A (zh) * | 2012-06-28 | 2012-11-28 | 用友软件股份有限公司 | 基于元数据的数据库动态查询系统和数据库动态查询方法 |
CN106934062A (zh) * | 2017-03-28 | 2017-07-07 | 广东工业大学 | 一种查询elasticsearch的实现方法及系统 |
US20180210966A1 (en) * | 2017-01-20 | 2018-07-26 | Amazon Technologies, Inc. | Query language interoperability in a graph database |
US20190034482A1 (en) * | 2017-07-28 | 2019-01-31 | Risk Management Solutions, Inc. | Metadata-based general request translator for distributed computer systems |
CN109587212A (zh) * | 2018-10-31 | 2019-04-05 | 武汉艺果互动科技股份有限公司 | 一种基于GraphQL的微服务架构设计方法、设备及存储设备 |
US20190340287A1 (en) * | 2018-05-01 | 2019-11-07 | Servicenow, Inc. | Modified representational state transfer (rest) application programming interface (api) including a customized graphql framework |
-
2020
- 2020-03-17 CN CN202010184455.9A patent/CN111414378B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799644A (zh) * | 2012-06-28 | 2012-11-28 | 用友软件股份有限公司 | 基于元数据的数据库动态查询系统和数据库动态查询方法 |
US20180210966A1 (en) * | 2017-01-20 | 2018-07-26 | Amazon Technologies, Inc. | Query language interoperability in a graph database |
CN106934062A (zh) * | 2017-03-28 | 2017-07-07 | 广东工业大学 | 一种查询elasticsearch的实现方法及系统 |
US20190034482A1 (en) * | 2017-07-28 | 2019-01-31 | Risk Management Solutions, Inc. | Metadata-based general request translator for distributed computer systems |
US20190340287A1 (en) * | 2018-05-01 | 2019-11-07 | Servicenow, Inc. | Modified representational state transfer (rest) application programming interface (api) including a customized graphql framework |
CN109587212A (zh) * | 2018-10-31 | 2019-04-05 | 武汉艺果互动科技股份有限公司 | 一种基于GraphQL的微服务架构设计方法、设备及存储设备 |
Non-Patent Citations (1)
Title |
---|
冯佳颖;张小旺;冯志勇;: "基于GPU的RDF类型同构并行算法", 计算机研究与发展, no. 03 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741878A (zh) * | 2021-08-30 | 2021-12-03 | 上海明略人工智能(集团)有限公司 | 基于GraphQL的接口构建方法、系统、电子设备及存储介质 |
CN113741878B (zh) * | 2021-08-30 | 2023-08-25 | 上海明略人工智能(集团)有限公司 | 基于GraphQL的接口构建方法、系统、电子设备及存储介质 |
CN114996539A (zh) * | 2022-07-29 | 2022-09-02 | 昆仑智汇数据科技(北京)有限公司 | 一种信息处理方法、装置及设备 |
CN117193750A (zh) * | 2023-11-08 | 2023-12-08 | 深圳大数信科技术有限公司 | 一种基于CraphQL的全栈低代码平台实现方法 |
CN117193750B (zh) * | 2023-11-08 | 2024-03-15 | 深圳大数信科技术有限公司 | 一种基于CraphQL的全栈低代码平台实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111414378B (zh) | 2023-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11567942B2 (en) | Unified table query processing | |
CN107402988B (zh) | 一种分布式NewSQL数据库系统和半结构化数据查询方法 | |
US11550763B2 (en) | Versioning schemas for hierarchical data structures | |
US10776349B2 (en) | Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language | |
US6240422B1 (en) | Object to relational database mapping infrastructure in a customer care and billing system | |
CN111414378A (zh) | 一种基于GraphQL的类元数据框架 | |
US9740715B2 (en) | Deleting records in a multi-level storage architecture | |
US10649987B2 (en) | Systems, methods, and apparatuses for implementing conditional statement execution within a multi-tenant aware structured query language | |
US10649986B2 (en) | Systems, methods, and apparatuses for implementing a BY ORGID command term within a multi-tenant aware structured query language | |
US8032544B2 (en) | Methods and apparatus for generating dynamic program files based on input queries that facilitate use of persistent query services | |
CN110222236B (zh) | Xml报文模板的生成及更新方法及其系统 | |
US7526503B2 (en) | Interactive schema translation with instance-level mapping | |
US11574070B2 (en) | Application specific schema extensions for a hierarchical data structure | |
Wiese | Advanced data management: for SQL, NoSQL, cloud and distributed databases | |
US8145673B2 (en) | Easily queriable software repositories | |
US9542432B2 (en) | Systems and methods for multitenancy data | |
US7533136B2 (en) | Efficient implementation of multiple work areas in a file system like repository that supports file versioning | |
US20070038596A1 (en) | Restricting access to data based on data source rewriting | |
EP4094168A1 (en) | Parallel and efficient technique for building and maintaining a main memory csr based graph index in a rdbms | |
US10509773B2 (en) | DBFS with flashback archive | |
CN102708203A (zh) | 一种基于xml元数据的数据库动态管理方法 | |
US20200334244A1 (en) | Bidirectional mapping of hierarchical data to database object types | |
CN111078205A (zh) | 一种模块化编程方法、装置、存储介质及电子设备 | |
CN110888878A (zh) | 一种面向业务的主数据管理方法及系统 | |
Brahmia et al. | Versioning of Conventional Schema in the tXSchema Framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |