CN114721711B - 基于GraphQL减免软件研发配置的工具和方法 - Google Patents

基于GraphQL减免软件研发配置的工具和方法 Download PDF

Info

Publication number
CN114721711B
CN114721711B CN202210541050.5A CN202210541050A CN114721711B CN 114721711 B CN114721711 B CN 114721711B CN 202210541050 A CN202210541050 A CN 202210541050A CN 114721711 B CN114721711 B CN 114721711B
Authority
CN
China
Prior art keywords
graphql
datafetcher
schema
spring
generating
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.)
Active
Application number
CN202210541050.5A
Other languages
English (en)
Other versions
CN114721711A (zh
Inventor
杨孟
石必顺
李飞
张超群
张瀚宇
侯斌峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qiqin Technology Beijing Co ltd
Original Assignee
Qiqin Technology Beijing Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Qiqin Technology Beijing Co ltd filed Critical Qiqin Technology Beijing Co ltd
Priority to CN202210541050.5A priority Critical patent/CN114721711B/zh
Publication of CN114721711A publication Critical patent/CN114721711A/zh
Application granted granted Critical
Publication of CN114721711B publication Critical patent/CN114721711B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Library & Information Science (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了基于GraphQL减免软件研发配置的工具和方法,基于Spring框架命令模式回调处理数据,进行初始化;初始化Velocity模板引擎相关环境变量,生成指定形式的模板文件;通过Spring上下文扫描JPA框架数据持久层获取所有持久化对象信息;基于持久化对象信息循环生成对应的schema以及DataFetcher,发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。解决了EntityInfo查询序列化层级问题,并且在产品运行时动态生成相关的Schema以及DataFetcher文件的工具框架,从而帮助开发更快的实现产品需求,满足低代码要求。

Description

基于GraphQL减免软件研发配置的工具和方法
技术领域
本申请属于软件研发领域,具体涉及基于GraphQL减免软件研发配置的工具和方法。
背景技术
众所周知Spring应用需要进行大量的配置,各种XML配置和注解配置让人眼花缭乱,且极容易出错,因此Spring一度被称为“配置地狱”。此处也不再赘述SpringBoot的一些优点,因为本产品或项目以及本工具的研发也是离不开SpringBoot的相关基础。
主要是使用其提供starter简化Maven配置,SpringBoot提供了一系列的“starter”项目对象模型(POMS)来简化Maven配置,此次的GraphQL相关的Starter基础包也是基于SpringBoot进行引入,同时本次研发的工具也同样基于Starter实现。
GraphQL即是一种用于API的查询语言也是一个满足你数据查询的运行时。GraphQL对你的API中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让API更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
在使用GraphQL时,只需要向API发出一个GraphQL请求就能准确获得你想要的数据,不多不少。GraphQL查询总是返回可预测的结果。
GraphQL查询不仅能够获得资源的属性,还能沿着资源间引用进一步查询。典型的RESTAPI请求多个资源时得载入多个URL,而GraphQL可以通过一次请求就获取你应用所需的所有数据。这样一来,即使是比较慢的移动网络连接下,使用GraphQL的应用也能表现得足够迅速。
GraphQLAPI基于类型和字段的方式进行组织,而非入口端点。你可以通过一个单一入口端点得到你所有的数据能力。GraphQL使用类型来保证应用只请求可能的数据,还提供了清晰的辅助性错误信息。应用可以使用类型,而避免编写手动解析代码。
以上是GraphQL的一些特性,以上的特性能够解决我们在产品以及项目研发过程中减少一些定制化的Restful相关的API编写,同时还可以解决实体的序列化层级加载问题。但在使用GraphQL时离不开其繁琐的一些定义文件,就是Schema文件的定义,而且目前实现编写定义文件的方式为,提供工具工程,扫描指定包名下对应的实体生成对应的Schema以及DataFetcher文件,由用户手动拷贝至本人所维护工程才可加载,导致维护过多模板生成类的问题。
Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是Velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术,Velocity还有一些其他用途,比如源代码生成等。
发明内容
本申请提出了基于GraphQL减免软件研发配置的工具和方法,基于Spring框架命令模式回调处理数据,初始化Velocity模板引擎相关环境变量,发布注册事件,生成GraphQL的schema以及DataFetcher。
为实现上述目的,本申请提供了如下方案:
基于GraphQL减免软件研发配置的工具,具体包括以下内容:
包括:初始化模块、模板引擎生成模块、持久化对象信息模块、数据结构生成模块和发布注册模块;
所述初始化模块用于基于Spring框架命令模式回调处理数据,进行Spring框架初始化;
所述模板引擎生成模块用于基于初始化后的所述Spring框架,通过Velocity模板引擎生成指定形式的模板文件;
所述持久化对象信息模块用于基于所述模板文件通过Spring上下文扫描JPA框架数据持久层获取持久化对象信息;
所述数据结构生成模块用于基于持久化对象信息循环生成对应的schema以及DataFetcher;所述schema是用于GraphQL定义数据结构及对象关系;所述DataFetcher是用于GraphQL中具体查询适配对应的接口;
所述发布注册模块用于发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
优选的,所述初始化模块进行所述Spring框架初始化的方法包括:通过Spring框架命令模式回调处理数据,作为对应文件注册的入口方法,生成配置类以及所述模板文件。
优选的,所述模板引擎生成模块生成指定形式的模板文件方法包括:用于初始化Velocity模板引擎相关环境变量,指定动态生成的SDL文件存放所需类加载器,指定读取或输出字符集。
优选的,所述发布注册模块进行发布注册的方法包括:不存在本地自定义的schema以及DataFetcher,则发布注册事件,并监听事件生成GraphQL的schema以及DataFetcher。
优选的,所述持久化对象信息模块进行所述持久化对象处理的方法包括:通过Spring上下文获取所有继承JpaDao接口的实体接口类,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息;
所述JpaDao是 JPA定义实体查询数据库交互层;
所述EntityInfo是自定义实体对象相关信息,包含实体类名,属性及引用对象属性集合。
为了更好的实现上述内容,本申请还提出基于GraphQL减免软件研发配置的方法,具体包括:
基于Spring框架命令模式回调处理数据,进行Spring框架初始化;
基于所述Spring框架初始化,通过Velocity模板引擎生成指定形式的模板文件;
基于所述模板文件通过Spring上下文扫描JPA框架数据持久层获取持久化对象信息;
基于持久化对象信息循环生成对应的schema以及DataFetcher;所述schema是用于GraphQL定义数据结构及对象关系;所述DataFetcher是用于GraphQL中具体查询适配对应的接口;
发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
优选的,进行所述Spring框架初始化的方法包括:
通过Spring框架命令模式回调处理数据,作为对应文件注册的入口方法,用于执行生成配置类以及所述模板文件。
优选的,所述模板引擎进行生成指定形式的模板文件的方法包括:
初始化Velocity模板引擎相关环境变量,指定动态生成的SDL文件存放所需类加载器,指定读取或输出字符集。
优选的,进行所述持久化对象处理的方法包括:
通过Spring上下文获取所有继承JpaDao接口的实体接口类,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息;
所述JpaDao是JPA定义实体查询数据库交互层;
所述EntityInfo是自定义实体对象相关信息,包含实体类名,属性及引用对象属性集合。
优选的,所述发布注册的方法包括:
不存在本地自定义的schema以及DataFetcher,发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
本申请的有益效果为:本申请公开了基于GraphQL减免软件研发配置的工具和方法,有效解决了在产品及项目研发时需要使用GraphQL解决JPA实体层级序列化问题,同时又想简化大量编写Schema,RuntimeWiring.Builder及DataFetcher文件即可实现对应效果,对产品或项目研发人员可以有效节省工时,同时减少代码,本申请具有广阔的推广空间和使用价值。
附图说明
为了更清楚地说明本申请的技术方案,下面对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例工具结构示意图;
图2为本申请实施例方法流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
目前在我们的产品或项目研发中为了减少定制的RestfulAPI的编写以及需要支持按照JPA实体层级序列化层级查询,由此引入GraphQL原生框架来解决,但是源生GraphQL框架需要开发人员写大量的Schema以及DataFetcher文件,给开发人员增加工作量,进而我们就提出一种既解决EntityInfo查询序列化层级问题,同时开发人员在没有特殊扩展需求,仅仅编写实体类以及相关业务代码后,在产品运行时动态生成相关的Schema以及DataFetcher文件的工具框架,从而帮助开发更快的实现产品需求,满足低代码要求。
实施例1
如图1所示,本申请公开了基于GraphQL减免软件研发配置的工具,具体的实现步骤如下所述:
基于GraphQL减免软件研发配置的工具,包括:初始化模块、模板引擎生成模块、持久化对象信息模块、数据结构生成模块和发布注册模块;
初始化模块用于基于Spring框架命令模式回调处理数据,进行Spring框架初始化;模板引擎生成模块用于基于Spring框架初始化,通过Velocity模板引擎生成指定形式的模板文件;持久化对象信息模块用于基于模板文件通过Spring上下文扫描JPA框架数据持久层获取持久化对象信息;数据结构生成模块用于基于持久化对象信息循环生成对应的schema以及DataFetcher;schema是用于GraphQL定义数据结构及对象关系;DataFetcher是用于GraphQL中具体查询适配对应的接口;发布注册模块用于发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。其中,初始化模块用于通过Spring框架命令模式回调处理数据,作为对应文件注册的入口方法,用于执行生成配置类以及模板文件。
其中,模板引擎生成模块用于初始化Velocity模板引擎相关环境变量,指定动态生成的SDL文件存放所需类加载器,指定读取或输出字符集。
其中,发布注册模块还包括:不存在本地自定义的schema以及DataFetcher,发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
其中,通过Spring上下文获取所有继承JpaDao接口的实体接口类,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息;
JpaDao是用于JPA定义实体查询数据库交互层;
EntityInfo是自定义实体对象相关信息,包含实体类名,属性及引用对象属性集合。
本实施例中具体的实现步骤如下所示:
步骤一:自定义Spring框架命令模式中CommandLineRunner实现类RegisterGraphQLRunner并实现该接口run方法,此方法会在Spring Beans 都初始化之后,但在SpringBoot的启动类方法SpringApplication.run() 之前执行,此方法即作为SDL文件注册的入口方法,用来执行下述生成配置类以及模板文件步骤。
步骤二:初始化Velocity模板引擎相关环境变量,首先用户指定动态生成的SDL文件存放所需类加载器,其次指定读取/输出字符集,保证读取和输出字符集一致,然后读取Schema模板文件,此模板文件包含查询命名和实体属性结构定义,其中列表查询默认是实体类名简写+List,详情查询默认为实体类名简写,后期使用GraphQL查询时输入对应实体类名简写即为查询对应实体的接口输入参数。
步骤三 :通过Spring上下文applicationContext获取所有继承JpaDao接口的实体DAO接口类,此接口类上已加上实体类的泛型,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息。
步骤四:获取步骤三中缓存的所有EntityInfo信息,循环生成对应的SDL信息,读取Velocity模板根据EntityInfo信息生成Schema文件,其次根据EntityInfo由模板引擎生成标准的列表以及详情查询所需的RuntimeWiring.Builder和DataFetcher接口。
步骤五:在产品以及项目研发中无自定义查询时,无需开发人员再编写SDL文件,但是研发再过程中可能还需要使用GraphQL原始及其他高阶方法,所以研发可以针对实体再扩展其的Schema,RuntimeWiring.Builder及DataFetcher,此时需要加载本地实体中研发人员自定义SDL信息,载入本地SDL文件及DataFetcher,故本发明会将自定义的文件优先加载待后续进行自动生成时进行合并。
步骤六:整合本地和根据EntityInfo自动生成的SDL信息,准备合并所有数据,将需要重新创建Schema并更新GraphQL整合成自定义函数,发布Spring注册事件。
步骤七:监听注册Spring事件,合并所有数据,重新创建Schema并更新GraphQL,步骤三中所述需要将自定义的RuntimeWiring.Builder和DataFetcher合并自动生成的,合并即是保留研发自定义时新增的,如果自定义包含了自动生成的则已自定义为准。
步骤八:将上述流程封装成为SpringBoot-Starer自动加载类并上传Maven私服,便于具体实施时引入此工具。
在目前MES或WMS产品以及对应实施项目二次扩展的研发中,会遇到大量的实体类,同时每个实体类包含大量业务字段属性,而且实体之间关联关系较多,而面对大量实体都需要提供最基础的列表及详情查询API,此时就出现如下两种常用场景。
针对客户端应用:
不同UI需要使用同一个实体进行查询数据,但是不用的客户端应用对需求的字段又不尽相同,此时如果后端服务已提供一个RESTful API,那么将无法满足,但如果使用同样的GraphQL API,GraphQL 在使用查询语句式,使用声明式的方式获取数据。客户端在一个查询请求中,选择需要的数据和相关的字段实体。客户端根据其 UI 来决定需要的字段。一个 GraphQL 查询会根据 UI 选择数据中的一部分达到完美的匹配。毕竟,GraphQL 提供了极佳的关注点分离方式:客户端知道它需要什么数据,服务端知道数据的结构,以及提供服务拉取数据。
针对多端:
如Web客户端和移动客户端时,此时不同端都需要后端提供针对同一个实体进行查询数据,此时如果后端服务已提供一个RESTful API,那么移动客户端很可能会获取过多或无法完全满足的数据,在不使用类似GraphQL API,但如果使用同样的GraphQL API,移动客户端可以选择和 Web 客户端不同的数据字段。因此移动客户端能减少获取的信息,因为相对于 Web 应用的更大的屏幕,小屏幕上可能显示不了那么多信息。GraphQL 通过最开始按客户端需求选择数据,减少了传输数据的大小。
在GraphQL源生开源框架时,无法避免为实体编写对应的Schema,DataFetcher,而且Schema中需要定义每个实体类的字段属性以及关联实体对应的Schema关联,DataFetcher需要提供改实体常用的列表/详情查询,这样一来就会带来大量的工作量。
目前在本公司自研MES及WMS产品中,为了减少研发人员编写大量SDL文件,同时能继续GraphQL特性,已经引入本发明工具。具体引入方式如下:
1.添加本工具Maven依赖。
2.在产品开发过程中,首先根据产品经理整理的需求,定义出产品标准实体类,并编写此实体类的DAO层接口,此接口需要继承JpaDao。
3.在SpringBoot配置文件配置GraphQL访问地址,然后启动应用程序,启动后本发明会自动扫描此SpringBoot应用程序中定义的实体并生成GraphQL使用时需要的SDL文件,最后按照标准实体名简写对应查询访问接口即可。
4.如表1所示,是对名词的具体解释。
表1
Figure 986059DEST_PATH_IMAGE001
实施例2
如图2所示,本申请公开了基于GraphQL减免软件研发配置的方法,包括以下内容:
基于Spring框架命令模式回调处理数据,进行Spring框架初始化;基于Spring框架初始化,通过Velocity模板引擎生成指定形式的模板文件;基于模板文件通过Spring上下文扫描JPA框架数据持久层获取持久化对象信息;基于持久化对象信息循环生成对应的schema以及DataFetcher;schema是用于GraphQL定义数据结构及对象关系;DataFetcher是用于GraphQL中具体查询适配对应的接口;
发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
其中,通过Spring框架命令模式回调处理数据,作为对应文件注册的入口方法,用于执行生成配置类以及模板文件。
其中,初始化Velocity模板引擎相关环境变量,指定动态生成的SDL文件存放所需类加载器,指定读取或输出字符集。
其中,通过Spring上下文获取所有继承JpaDao接口的实体接口类,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息;
JpaDao是用于JPA定义实体查询数据库交互层;
EntityInfo是自定义实体对象相关信息,包含实体类名,属性及引用对象属性集合。
其中,不存在本地自定义的schema以及DataFetcher,则发布注册事件,并监听事件生成GraphQL的schema以及DataFetcher。
在本实施例中,具体的实现步骤如下所述:
步骤一:自定义Spring框架命令模式中CommandLineRunner实现类RegisterGraphQLRunner并实现该接口run方法,此方法会在Spring Beans 都初始化之后,但在SpringBoot的启动类方法SpringApplication.run() 之前执行,此方法即作为SDL文件注册的入口方法,用来执行下述生成配置类以及模板文件步骤。
步骤二:初始化Velocity模板引擎相关环境变量,首先用户指定动态生成的SDL文件存放所需类加载器,其次指定读取/输出字符集,保证读取和输出字符集一致,然后读取Schema模板文件,此模板文件包含查询命名和实体属性结构定义,其中列表查询默认是实体类名简写+List,详情查询默认为实体类名简写,后期使用GraphQL查询时输入对应实体类名简写即为查询对应实体的接口输入参数。
步骤三 :通过Spring上下文applicationContext获取所有继承JpaDao接口的实体DAO接口类,此接口类上已加上实体类的泛型,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息。
步骤四:获取步骤三中缓存的所有EntityInfo信息,循环生成对应的SDL信息,读取Velocity模板根据EntityInfo信息生成Schema文件,其次根据EntityInfo由模板引擎生成标准的列表以及详情查询所需的RuntimeWiring.Builder和DataFetcher接口。
步骤五:在产品以及项目研发中无自定义查询时,无需开发人员再编写SDL文件,但是研发再过程中可能还需要使用GraphQL原始及其他高阶方法,所以研发可以针对实体再扩展其的Schema,RuntimeWiring.Builder及DataFetcher,此时需要加载本地实体中研发人员自定义SDL信息,载入本地SDL文件及定制DataFetcher,故本发明会将自定义的文件优先加载待后续进行自动生成时进行合并。
步骤六:整合本地和根据EntityInfo自动生成的SDL信息,准备合并所有数据,将需要重新创建Schema并更新GraphQL整合成自定义函数,发布Spring注册事件。
步骤七:监听注册Spring事件,合并所有数据,重新创建Schema并更新GraphQL,步骤三中所述需要将自定义的RuntimeWiring.Builder和DataFetcher合并自动生成的,合并即是保留研发自定义时新增的,如果自定义包含了自动生成的则已自定义为准。
步骤八:将上述流程封装成为SpringBoot-Starer自动加载类并上传Maven私服,便于具体实施时引入此工具。
在目前MES或WMS产品以及对应实施项目二次扩展的研发中,会遇到大量的实体类,同时每个实体类包含大量业务字段属性,而且实体之间关联关系较多,而面对大量实体都需要提供最基础的列表及详情查询API,此时就出现如下两种常用场景。
针对客户端应用:
不同UI需要使用同一个实体进行查询数据,但是不用的客户端应用对需求的字段又不尽相同,此时如果后端服务已提供一个RESTfulAPI,那么将无法满足,但如果使用同样的GraphQLAPI,GraphQL在使用查询语句式,使用声明式的方式获取数据。客户端在一个查询请求中,选择需要的数据和相关的字段实体。客户端根据其 UI 来决定需要的字段。一个GraphQL查询会根据UI选择数据中的一部分达到完美的匹配。毕竟,GraphQL提供了极佳的关注点分离方式:客户端知道它需要什么数据,服务端知道数据的结构,以及提供服务拉取数据。
针对多端:
如Web客户端和移动客户端时,此时不同端都需要后端提供针对同一个实体进行查询数据,此时如果后端服务已提供一个RESTfulAPI,那么移动客户端很可能会获取过多或无法完全满足的数据,在不使用类似GraphQLAPI,但如果使用同样的GraphQLAPI,移动客户端可以选择和Web客户端不同的数据字段。因此移动客户端能减少获取的信息,因为相对于Web应用的更大的屏幕,小屏幕上可能显示不了那么多信息。GraphQL通过最开始按客户端需求选择数据,减少了传输数据的大小。
在GraphQL源生开源框架时,无法避免为实体编写对应的Schema,DataFetcher,而且Schema中需要定义每个实体类的字段属性以及关联实体对应的Schema关联,DataFetcher需要提供改实体常用的列表/详情查询,这样一来就会带来大量的工作量。
目前在本公司自研MES及WMS产品中,为了减少研发人员编写大量SDL文件,同时能继续GraphQL特性,已经引入本发明工具。具体引入方式如下:
添加本工具Maven依赖。
在产品开发过程中,首先根据产品经理整理的需求,定义出产品标准实体类,并编写此实体类的DAO层接口,此接口需要继承JpaDao。
在SpringBoot配置文件配置GraphQL访问地址,然后启动应用程序,启动后本发明会自动扫描此SpringBoot应用程序中定义的实体并生成GraphQL使用时需要的SDL文件,最后按照标准实体名简写对应查询访问接口即可。
以上所述的实施例仅是对本申请优选方式进行的描述,并非对本申请的范围进行限定,在不脱离本申请设计精神的前提下,本领域普通技术人员对本申请的技术方案做出的各种变形和改进,均应落入本申请权利要求书确定的保护范围内。

Claims (10)

1.基于GraphQL减免软件研发配置的工具,其特征在于,
包括:初始化模块、模板引擎生成模块、持久化对象信息模块、数据结构生成模块和发布注册模块;
所述初始化模块用于基于Spring框架命令模式回调处理数据,进行Spring框架初始化;
所述模板引擎生成模块用于基于初始化后的所述Spring框架,通过Velocity模板引擎生成指定形式的模板文件;
所述持久化对象信息模块用于基于所述模板文件通过Spring上下文扫描JPA框架数据持久层获取持久化对象信息;
所述数据结构生成模块用于基于所述持久化对象信息循环生成对应的schema以及DataFetcher;所述schema是用于GraphQL定义数据结构及对象关系;所述DataFetcher是用于GraphQL中具体查询适配对应的接口;
所述发布注册模块用于发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
2.如权利要求1所述基于GraphQL减免软件研发配置的工具,其特征在于,
所述初始化模块进行所述Spring框架初始化的方法包括:通过Spring框架命令模式回调处理数据,作为对应文件注册的入口方法,生成配置类以及所述模板文件。
3.如权利要求1所述基于GraphQL减免软件研发配置的工具,其特征在于,
所述模板引擎生成模块生成所述指定形式的模板文件方法包括:初始化Velocity模板引擎相关环境变量,指定动态生成的SDL文件存放所需类加载器,指定读取或输出字符集。
4.如权利要求1所述基于GraphQL减免软件研发配置的工具,其特征在于,
所述发布注册模块进行发布注册的方法包括:不存在本地自定义的schema以及DataFetcher,则发布注册事件,并监听事件生成GraphQL的schema以及DataFetcher。
5.如权利要求1所述基于GraphQL减免软件研发配置的工具,其特征在于,
所述持久化对象信息模块进行所述持久化对象处理的方法包括:通过Spring上下文获取所有继承JpaDao接口的实体接口类,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息;
所述JpaDao是JPA定义实体查询数据库交互层;
所述EntityInfo是自定义实体对象相关信息,包含实体类名,属性及引用对象属性集合。
6.基于GraphQL减免软件研发配置的方法,其特征在于,
基于Spring框架命令模式回调处理数据,进行Spring框架初始化;
基于所述Spring框架初始化,通过Velocity模板引擎生成指定形式的模板文件;
基于所述模板文件通过Spring上下文扫描JPA框架数据持久层获取持久化对象信息;
基于所述持久化对象信息循环生成对应的schema以及DataFetcher;所述schema是用于GraphQL定义数据结构及对象关系;所述DataFetcher是用于GraphQL中具体查询适配对应的接口;
发布注册事件,监听事件生成GraphQL的schema以及DataFetcher。
7.如权利要求6所述基于GraphQL减免软件研发配置的方法,其特征在于,
进行所述Spring框架初始化的方法包括:
通过Spring框架命令模式回调处理数据,作为对应文件注册的入口方法,用于执行生成配置类以及所述模板文件。
8.如权利要求6所述基于GraphQL减免软件研发配置的方法,其特征在于,
所述模板引擎进行生成所述指定形式的模板文件的方法包括:
初始化Velocity模板引擎相关环境变量,指定动态生成的SDL文件存放所需类加载器,指定读取或输出字符集。
9.如权利要求6所述基于GraphQL减免软件研发配置的方法,其特征在于,
进行所述持久化对象处理的方法包括:
通过Spring上下文获取所有继承JpaDao接口的实体接口类,根据实体生成对应EntityInfo,最后按照接口类编码进行全局缓存EntityInfo信息;
所述JpaDao是JPA定义实体查询数据库交互层;
所述EntityInfo是自定义实体对象相关信息,包含实体类名,属性及引用对象属性集合。
10.如权利要求6所述基于GraphQL减免软件研发配置的方法,其特征在于,
所述发布注册的方法包括:
不存在本地自定义的schema以及DataFetcher,则发布注册事件,并监听事件生成GraphQL的schema以及DataFetcher。
CN202210541050.5A 2022-05-19 2022-05-19 基于GraphQL减免软件研发配置的工具和方法 Active CN114721711B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210541050.5A CN114721711B (zh) 2022-05-19 2022-05-19 基于GraphQL减免软件研发配置的工具和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210541050.5A CN114721711B (zh) 2022-05-19 2022-05-19 基于GraphQL减免软件研发配置的工具和方法

Publications (2)

Publication Number Publication Date
CN114721711A CN114721711A (zh) 2022-07-08
CN114721711B true CN114721711B (zh) 2022-08-09

Family

ID=82232288

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210541050.5A Active CN114721711B (zh) 2022-05-19 2022-05-19 基于GraphQL减免软件研发配置的工具和方法

Country Status (1)

Country Link
CN (1) CN114721711B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302847B (zh) * 2023-05-19 2023-08-04 智慧眼科技股份有限公司 异常信息的动态采集方法、装置、计算机设备及介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110958131A (zh) * 2018-09-27 2020-04-03 丛林网络公司 YANG配置数据模型上支持基于GraphQL的查询
CN111198678A (zh) * 2018-11-19 2020-05-26 贵州白山云科技股份有限公司 一种生成GraphQL前端操作接口的方法及装置
CN112764795A (zh) * 2021-01-21 2021-05-07 奇秦科技(北京)股份有限公司 一种面向服务的跨平台跨终端信息发布系统和方法
CN113220755A (zh) * 2020-12-28 2021-08-06 浙大网新科技股份有限公司 一种基于多源数据灵活生成GraphQL接口的方法
TW202217616A (zh) * 2020-10-16 2022-05-01 南韓商韓領有限公司 用於管理客戶端請求的系統以及方法
CN114490843A (zh) * 2021-12-30 2022-05-13 浪潮云信息技术股份公司 一种将数据快速发布的方法、装置及介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11263186B2 (en) * 2020-02-06 2022-03-01 Servicenow, Inc. System and method for customized graphQL data-handling scripts
US11630678B2 (en) * 2020-06-07 2023-04-18 Asaf Ben Natan Method for componentization of enterprise applications using plugins

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110958131A (zh) * 2018-09-27 2020-04-03 丛林网络公司 YANG配置数据模型上支持基于GraphQL的查询
CN111198678A (zh) * 2018-11-19 2020-05-26 贵州白山云科技股份有限公司 一种生成GraphQL前端操作接口的方法及装置
TW202217616A (zh) * 2020-10-16 2022-05-01 南韓商韓領有限公司 用於管理客戶端請求的系統以及方法
CN113220755A (zh) * 2020-12-28 2021-08-06 浙大网新科技股份有限公司 一种基于多源数据灵活生成GraphQL接口的方法
CN112764795A (zh) * 2021-01-21 2021-05-07 奇秦科技(北京)股份有限公司 一种面向服务的跨平台跨终端信息发布系统和方法
CN114490843A (zh) * 2021-12-30 2022-05-13 浪潮云信息技术股份公司 一种将数据快速发布的方法、装置及介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
《GraphQL Java - Data Fetching》;PKU_荐辕;《https://www.cnblogs.com/pku-liuqiang/p/11502414.html》;20190910;全文 *
《GraphQL Java - Schema》;PKU_荐辕;《https://www.cnblogs.com/pku-liuqiang/p/11498362.html》;20190910;全文 *
《深入理解 Spring 的事件发布监听机制》;habit_learning;《https://www.jianshu.com/p/409c78acf235》;20190627;全文 *

Also Published As

Publication number Publication date
CN114721711A (zh) 2022-07-08

Similar Documents

Publication Publication Date Title
US10324690B2 (en) Automated enterprise software development
US5307499A (en) Interpretive object-oriented facility which can access pre-compiled classes
US7174533B2 (en) Method, system, and program for translating a class schema in a source language to a target language
US6253366B1 (en) Method and system for generating a compact document type definition for data interchange among software tools
US7593994B2 (en) Generating a dynamic web service and dynamic service surrogate for legacy application components
US7278133B2 (en) Index-based parameter access and software for using the same
US20050256834A1 (en) Data controls architecture
US20140122411A1 (en) Single persistence implementation of business objects
US20140172827A1 (en) In-memory, columnar database multidimensional analytical view integration
EP1701261A1 (en) Dynamic service generation for legacy components
US10120886B2 (en) Database integration of originally decoupled components
JP2000504868A (ja) 管理インターワーキング・ユニットおよびかかるユニットの形成方法
CN111104103B (zh) 一种软件编辑微服务的可视化方法及系统
US20030097369A1 (en) Dynamic generic framework for distributed tooling
US10509632B2 (en) Model augmentation in a model-driven application development environment
CN114721711B (zh) 基于GraphQL减免软件研发配置的工具和方法
US20060200800A1 (en) Aggregation of non blocking state machines on enterprise java bean platform
US6785880B1 (en) Tooling framework system and method for code generation
US7657869B2 (en) Integration of external tools into an existing design environment
US11016830B2 (en) Entity-based service operation for object-based persistence
US7861214B2 (en) Computer method and apparatus for collapsing programming metamodels
CN113656433A (zh) 实体对象扩展方法、装置、电子设备和存储介质
CN112363700A (zh) 智能合约的协同创建方法、装置、计算机设备和存储介质
US20100023923A1 (en) Method for medeling objects in a hetrogenious computing environment
CN116502005A (zh) 网络资源配置化生成方法、装置、电子设备及存储介质

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