CN112306578B - 可配置数据源的DataFetcher实现系统和方法 - Google Patents
可配置数据源的DataFetcher实现系统和方法 Download PDFInfo
- Publication number
- CN112306578B CN112306578B CN202011230854.0A CN202011230854A CN112306578B CN 112306578 B CN112306578 B CN 112306578B CN 202011230854 A CN202011230854 A CN 202011230854A CN 112306578 B CN112306578 B CN 112306578B
- Authority
- CN
- China
- Prior art keywords
- local
- client
- target
- data source
- datafetcher
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种可配置数据源的DataFetcher实现系统和方法,该系统包括设计端、配置端、客户端和本地服务端,由设计端创建目标业务的本地数据源,由配置端针对客户端配置目标业务对应的客户端参数、数据源参数和协议参数,本地服务端从配置端拉取其相关数据生成DataFetcher代码注册到graphql引擎、并将相关客户端参数转化为接口文档,客户端基于接口文档向本地服务端发起业务请求,本地服务端调用graphql引擎运行DataFetcher代码,以实现从本地数据源中获得数据。本发明在灵活配置多数据源的基础上,支持硬编码来实现复杂的业务逻辑,给出本地配置化的实现方式,从而提升开发效率。
Description
技术领域
本发明涉及互联网技术领域,更具体地说,涉及一种可配置数据源的DataFetcher实现系统和方法。
背景技术
graphql是一个用于API的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统可以自定义)。graphql并没有和任何特定数据库或者存储引擎绑定,而是依靠现有的代码和数据支撑。
一个graphQL服务是通过定义类型和类型上的字段来创建的。针对graphql-java语言,每个类型上的每个字段的数据获取,会解析对应到一个DataFetcher数据源。现阶段,有部分方案能够基于配置无代码方式实现DataFetcher数据源的获取,这带来了灵活性与效率,但是无法配置复杂业务逻辑的实现。
发明内容
有鉴于此,为解决上述问题,本发明提供一种可配置数据源的DataFetcher实现系统和方法,技术方案如下:
一种可配置数据源的DataFetcher实现系统,所述系统包括设计端、配置端本地服务端和客户端;
所述设计端,用于创建目标业务的本地数据源,所述本地数据源包括本地服务类和所述本地服务类中多个方法的逻辑块类;
所述配置端,用于针对所述客户端配置所述目标业务对应的客户端参数、数据源参数和协议参数,所述客户端参数包括所述本地数据源的类型和所述本地服务类的标识,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段;
所述本地服务端,用于拉取所述客户端参数、所述数据源参数和所述协议参数,并基于拉取结果生成DataFetcher代码;将所述DataFetcher代码注册到graphql引擎;将所述本地数据源的类型和所述本地服务类的标识转化为接口文档,并发送给所述客户端;
所述客户端,用于基于所述接口文档向所述本地服务端发起业务请求,所述业务请求中包含待请求的目标字段;
所述本地服务端,还用于接收所述业务请求;调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码,以实现确定所述目标字段所对应的目标方法、以及基于所述目标方法的标识执行其对应的目标逻辑块类、以及从所述目标逻辑块类获取所述目标字段的数据;向所述客户端返回所述目标字段的数据。
优选的,所述客户端参数还包括:容错参数;
所述本地服务端,还用于:
在执行所述调用所述graphql引擎之前,基于所述容错参数对所述业务请求进行容错降级。
优选的,所述客户端参数还包括:缓存参数;
用于向所述客户端返回所述目标字段的数据的所述本地服务端,具体用于:
基于所述缓存参数向所述客户端返回所述目标字段的数据,以使所述客户端对所述目标字段的数据进行缓存。
优选的,所述数据源参数还包括:输入格式和输出格式;
所述本地服务端在执行所述调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码的过程中,还能够实现:
在执行所述从所述目标逻辑块类获取所述目标字段的数据之前,基于所述输入格式对所述目标字段进行渲染;
所述本地服务端,还用于:
在执行所述向所述客户端返回所述目标字段的数据之前,按照所述输出格式处理所述目标字段的数据。
一种可配置数据源的DataFetcher实现方法,所述方法应用于可配置数据源的DataFetcher实现系统中的本地服务端,所述方法包括:
从配置端拉取目标业务对应的客户端参数、数据源参数和协议参数,并基于拉取结果生成DataFetcher代码,所述客户端参数包括本地数据源的类型和本地服务类的标识,所述本地数据源是由设计端对所述目标业务所创建的,所述本地数据源包括所述本地服务类和所述本地服务类中多个方法的逻辑块类,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段;
将所述DataFetcher代码注册到graphql引擎;
将所述本地数据源的类型和所述本地服务类的标识转化为接口文档,并发送给客户端,以使所述客户端基于所述接口文档发起业务请求,所述业务请求中包含待请求的目标字段;
调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码,以实现确定所述目标字段所对应的目标方法、以及基于所述目标方法的标识执行其对应的目标逻辑块类、以及从所述目标逻辑块类获取所述目标字段的数据;
向所述客户端返回所述目标字段的数据。
优选的,所述客户端参数还包括:容错参数;
所述方法还包括:
在执行所述调用所述graphql引擎之前,基于所述容错参数对所述业务请求进行容错降级。
优选的,所述客户端参数还包括:缓存参数;
所述向所述客户端返回所述目标字段的数据,包括:
基于所述缓存参数向所述客户端返回所述目标字段的数据,以使所述客户端对所述目标字段的数据进行缓存。
优选的,所述数据源参数还包括:输入格式和输出格式;
在执行所述调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码的过程中,还能够实现:
在执行所述从所述目标逻辑块类获取所述目标字段的数据之前,基于所述输入格式对所述目标字段进行渲染;
所述方法还包括:
在执行所述向所述客户端返回所述目标字段的数据之前,按照所述输出格式处理所述目标字段的数据。
一种可配置数据源的DataFetcher实现方法,所述方法应用于可配置数据源的DataFetcher实现系统中的客户端,所述方法包括:
接收本地服务端发送的接口文档,所述接口文档是所述本地服务端通过转化其从配置端拉取的客户端参数中的本地数据源的类型和本地服务类的标识所得到的,所述本地数据源是由设计端对所述目标业务所创建的,所述本地数据源包括所述本地服务类和所述本地服务类中多个方法的逻辑块类;
基于所述接口文档向所述本地服务端发起业务请求,所述业务请求中包含待请求的目标字段,以使所述本地服务端调用graphql引擎,所述graphql引擎注册有DataFetcher代码,所述DataFetcher代码是所述本地服务端基于从所述配置端拉取的所述客户端参数、数据源参数和协议参数所生成的,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段;
接收所述本地服务端返回所述目标字段的数据,所述目标字段的数据是所述本地服务端通过所述graphql引擎运行所述DataFetcher代码从被执行的目标逻辑块类获取的,所述目标逻辑块类是基于所述目标方法的标识被执行的,所述目标方法是所述目标字段所对应的方法。
一种可配置数据源的DataFetcher实现方法,所述方法应用于可配置数据源的DataFetcher实现系统中的配置端,所述方法包括:
针对客户端配置目标业务对应的客户端参数、数据源参数和协议参数,所述客户端参数包括本地数据源的类型和本地服务类的标识,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段,所述本地数据源是由设计端对所述目标业务所创建的,所述本地数据源包括所述本地服务类和所述本地服务类中多个方法的逻辑块类;
响应本地服务端的拉取操作,向所述本地服务端返回所述客户端参数、所述数据源参数和所述协议参数,以使所述本地服务端基于拉取结果生成DataFetcher代码、以及将所述DataFetcher代码注册到graphql引擎,还使所述本地服务端将所述客户端参数转化为接口文档发送给所述客户端,还使所述客户端基于所述接口文档向所述本地服务端发起包含待请求的目标字段的业务请求,还使所述本地服务端通过调用所述graphql引擎运行所述DataFetcher代码向所述客户端返回所述目标字段的数据,所述DataFetcher代码运行能够实现:
确定所述目标字段所对应的目标方法、以及基于所述目标方法的标识执行其对应的目标逻辑块类、以及从所述目标逻辑块类获取所述目标字段的数据。
相较于现有技术,本发明实现的有益效果为:
本发明提供一种可配置数据源的DataFetcher实现系统和方法,在灵活配置多数据源的基础上,支持硬编码来实现复杂的业务逻辑,给出本地配置化的实现方式,从而提升开发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的可配置数据源的DataFetcher实现系统的系统架构图;
图2为本发明实施例提供的本地列表服务客户端配置示意图;
图3为本发明实施例提供的本地列表服务数据源配置示意图;
图4为本发明实施例提供的本地列表服务协议配置示意图;
图5为本发明实施例提供的UML类图;
图6为本发明实施例提供的可配置数据源的DataFetcher实现方法的方法流程图;
图7为本发明实施例提供的可配置数据源的DataFetcher实现方法的另一方法流程图;
图8为本发明实施例提供的可配置数据源的DataFetcher实现方法的再一方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明在DataFetcher数据源的配置实现机制上,增加一种本地配置方式实现数据源的获取,本地配置方式支持硬编码实现复杂业务逻辑,这样既拥有了配置的灵活性,也拥有了复杂逻辑的本地实现方式。
参见图1所示的可配置数据源的DataFetcher实现系统的系统架构图,该系统包括设计端10、配置端20、本地服务端30和客户端40。
设计端10,用于创建目标业务的本地数据源,本地数据源包括本地服务类和本地服务类中多个方法的逻辑块类。
本发明实施例中,通过与用户交互,设计端10能够提供一种Local(本地)类型的数据源,即本地数据源,通过用户手写代码实现复杂业务逻辑。
一般来说,可以首先设计本地服务类,进而在本地服务类下设计多个方法的逻辑块类。但如果方法数量较多,这就会增加设计难度,因此本发明中可以首先设计各方法的逻辑块类,将该逻辑块类的接口在get方法中实现,进一步再设计本地服务类,该本地服务类能够调用各逻辑块类对应的get方法。
本地服务类的所有方法返回类型为LocalDataFetcher,每一个方法能够代表相应逻辑块类返回的数据。
配置端20,用于针对客户端40配置目标业务对应的客户端参数、数据源参数和协议参数,客户端参数包括本地数据源的类型和本地服务类的标识,数据源参数包括本地服务类中每个方法的标识,协议参数包括本地服务类中每个方法对应的字段。
本发明实施例中,配置端20设计三层逻辑结构,即客户端、数据源和协议三个方面。以下分别对这三层逻辑结构进行说明:
客户端参数:其至少包含两个元素,即类型和基础配置。具体的,类型在本发明中被配置为本地类型,而基础配置则被配置为目标业务的本地服务类的标识,比如服务类名称。当然,基础配置还可以配置有超时时间等,以限制本地服务端30返回数据的时间,一旦超过该时间客户端40可以采取诸如重新发送业务请求的处理手段。
数据源参数:其至少包含两个元素,即本地数据源配置和接口配置。具体的,本地数据源配置是指对于目标业务的客户端,同一个客户端上可以配置多个本地数据源,即对于客户端所配置的一个本地数据源来说,其配置的是该本地数据源中本地服务类的标识;而接口配置则是指配置本地服务类下具体方法的标识,比如方法名称,该方法返回LocalDataFetcher,LocalDataFetcher表示本地执行的逻辑块类,其非远程调用,本地执行逻辑块类可以封装远程调用,比如可以将多个远程数据源整合后封装至本地数据源的一个逻辑块类中,以此实现复杂业务逻辑。
协议参数:其至少包括三个元素,即类型、字段和数据源,作用是把某个类型的字段绑定到一个数据源。具体的:同一类型下的多个字段可以绑定同一个本地数据源的方法,而该字段对应到接口能够返回数据的具体层级,当graphql引擎在获取该字段的数据时,能够通过协议参数找到相应的方法,执行该方法既可获得具体数据。
本地服务端30,用于拉取客户端参数、数据源参数和协议参数,并基于拉取结果生成DataFetcher代码;将DataFetcher代码注册到graphql引擎;将将本地数据源的类型和本地服务类的标识转化为接口文档,并发送给客户端40。
本发明实施例中,本地服务端30会定时从配置端20拉取相关的配置数据,生成DataFetcher代码,并注册到graphql引擎。此外,本地服务端30会将本地数据源的类型和本地服务类的标识映射为一个通用的接口文档,通过该接口文档本地服务端即可为客户端40提供目标业务。
客户端40,基于接口文档向本地服务端30发起业务请求,业务请求中包含待请求的目标字段。
本地服务端30,还用于接收业务请求;调用graphql引擎,并通过graphql引擎运行DataFetcher代码,以实现确定目标字段所对应的目标方法、以及基于目标方法的标识执行其对应的目标逻辑块类、以及从目标逻辑块类获取目标字段的数据;向客户端40返回目标字段的数据。
本发明实施例中,客户端40向本地服务端30请求目标字段的数据。本地服务端30则通过调用graphql引擎运行DataFetcher代码来执行目标逻辑块类获得目标字段端的数据,而目标逻辑块类则可以通过协议参数目标字段确定目标方法、再基于目标方法的标识来确定。
在其他一些实施例中,客户端参数还可以包括容错参数,相应的,本地服务端30还用于:
在执行调用graphql引擎之前,基于容错参数对业务请求进行容错降级。
本发明实施例中,容错参数为客户端40相关的容错配置,例如并发数,熔断失败率阈值等,可以基于hystrix配置实现。以并发数为例,通过设定并发的请求数量阈值,一旦客户端40同时发送的业务请求的数量大于该阈值,则停止响应,并向客户端40报错。
在其他一些实施例中,客户端参数还可以包括缓存参数,相应的,用于向客户端40返回目标字段的数据的本地服务端30,具体用于:
基于缓存参数向客户端40返回目标字段的数据,以使客户端40对目标字段的数据进行缓存。
本发明实施例中,针对不同方法的逻辑块类所返回的数据,可以设置不同的缓存机制,比如部分类型的逻辑块类的数据不允许缓存,再比如,部分类型的逻辑块类的数据允许缓存一定时间,比如1分钟。由此,客户端40在获得目标字段的数据后,可以基于缓存参数进行相关的缓存操作,进而在后续再次请求时,优先从缓存中获得数据,以此可以提高业务的访问效率。
在其他一些实施例中,数据源参数还可以包括输入格式和输出格式,相应的,本地服务端30在执行调用graphql引擎,并通过graphql引擎运行DataFetcher代码的过程中,还能够实现:
在执行从目标逻辑块类获取目标字段的数据之前,基于输入格式对目标字段进行渲染;
本地服务端30,还用于:
在执行向客户端40返回目标字段的数据之前,按照输出格式处理目标字段的数据。
本发明实施例中,输入格式是指向一个方法的逻辑块类请求数据的模板,当请求逻辑块类时,graphql引擎会基于该模板将目标字段渲染成具体的参数,再发起请求。而输出格式则是指逻辑块类所返回的数据进行相关字段的提取并进行格式定义,比如格式化为某个类型的数据再返回给客户端40。
为方便理解本发明,以下一个获取正片视频列表(本地类型的DataFetcher)的本地配置化为例进行说明:
步骤1,创建正片视频列表的逻辑块类VideoListLocalDataFetcher,实现LocalDataFetcher接口,把获取正片视频列表的逻辑块类写在实现方法get中。
步骤2,创建本地列表服务类ListLocalServer,该其中创建表示正片视频列表的本地列表服务方法padVideoList,该方法返回VideoListLocalDataFetcher实例。
步骤3,参见图2所示的本地列表服务客户端配置示意图,配置本地列表服务的DataFetcher客户端,配置如下:
名称,客户端40的标识,用于服务修改与调用;
类型,Local(本地)类型;
(基础)配置,主要配置本地列表服务的服务类名称,即ListLocalServer,客户端连接数,调用超时时间;
容错策略,无;
扩展配置,无。
步骤4,参见图3所示的本地列表服务数据源配置示意图,配置本地列表服务的DataFetcher数据源,配置如下:
名称,本地数据源标识,用于服务修改与调用;
类型,Local(本地)类型;
客户端,这里选择步骤3中配好的客户端40的标识;
接口,本地列表服务方法的标识,即padVideoList;
输入,本地列表服务的请求参数模板;
输出,配置“:JSONObject”表示,从正片视频列表的逻辑块类返回数据中提取全部数据,并格式化为JSONObject类型返回。
步骤5,参见图4所示的本地列表服务协议配置示意图,配置本地列表服务的DataFetcher协议,配置如下:
类型,配置Query类型(这里对应graphql引擎DataSchema中的type类型);
字段,配置tinker_pad_v8_video_list字段(这里对应graphql引擎DataSchema中的filed字段);
数据源,这里选择步骤4中配好的本地列表服务方法的标识。
步骤6,本地服务端30定时拉取正片列表的配置数据(客户端、数据源、协议),生成DataFetcher代码,并注册进入graphql引擎,参见图5所示的UML类图。生成DataFetcher代码主要流程是根据配置拿到ListLocalServer实例,执行padVideoList方法拿到VideoListLocalDataFetcher实例,执行该实例的get方法获取到数据,该流程被封装成一个DataFetcher代码。
步骤7,本地服务端30在处理正片列表请求时,当graphql引擎在解析“Query类型/tinker_pad_v8_video_list字段”时,会找到正片列表的DataFetcher代码,即步骤6中生成的DataFetcher代码,执行该DataFetcher代码时,最终会执行逻辑块类VideoListLocalDataFetcher,获取到对应的数据并返回。
综上,本发明实施例提供的可配置数据源的DataFetcher实现系统,在灵活配置多数据源的基础上,支持硬编码来实现复杂的业务逻辑,给出本地配置化的实现方式,从而提升开发效率。
基于上述实施例提供的可配置数据源的DataFetcher实现系统,本发明实施例还提供一种可配置数据源的DataFetcher实现方法,该方法应用于可配置数据源的DataFetcher实现系统中的本地服务端,包括如下步骤,方法流程图如图6所示:
S101,从配置端拉取目标业务对应的客户端参数、数据源参数和协议参数,并基于拉取结果生成DataFetcher代码,客户端参数包括本地数据源的类型和本地服务类的标识,本地数据源是由设计端对目标业务所创建的,本地数据源包括本地服务类和本地服务类中多个方法的逻辑块类,数据源参数包括本地服务类中每个方法的标识,协议参数包括本地服务类中每个方法对应的字段。
S102,将DataFetcher代码注册到graphql引擎。
S103,将本地数据源的类型和本地服务类的标识转化为接口文档,并发送给客户端,以使客户端基于接口文档发起业务请求,业务请求中包含待请求的目标字段。
S104,调用graphql引擎,并通过graphql引擎运行DataFetcher代码,以实现确定目标字段所对应的目标方法、以及基于目标方法的标识执行其对应的目标逻辑块类、以及从目标逻辑块类获取目标字段的数据。
S105,向客户端返回目标字段的数据。
可选的,客户端参数还包括:容错参数;
上述方法还包括:
在执行S104之前,基于容错参数对业务请求进行容错降级。
可选的,客户端参数还包括:缓存参数;
S105“向客户端返回目标字段的数据”,包括:
基于缓存参数向客户端返回目标字段的数据,以使客户端对目标字段的数据进行缓存。
可选的,数据源参数还包括:输入格式和输出格式;
在执行调用graphql引擎,并通过graphql引擎运行DataFetcher代码的过程中,还能够实现:
在执行从目标逻辑块类获取目标字段的数据之前,基于输入格式对目标字段进行渲染;
上述方法还包括:
在执行S105之前,按照输出格式处理目标字段的数据。
基于上述实施例提供的可配置数据源的DataFetcher实现系统,本发明实施例还提供一种可配置数据源的DataFetcher实现方法,该方法应用于可配置数据源的DataFetcher实现系统中的客户端,包括如下步骤,方法流程图如图7所示:
S201,接收本地服务端发送的接口文档,接口文档是本地服务端通过转化其从配置端拉取的客户端参数中的本地数据源的类型和本地服务类的标识所得到的,本地数据源是由设计端对目标业务所创建的,本地数据源包括本地服务类和本地服务类中多个方法的逻辑块类。
S202,基于接口文档向本地服务端发起业务请求,业务请求中包含待请求的目标字段,以使本地服务端调用graphql引擎,graphql引擎注册有DataFetcher代码,DataFetcher代码是本地服务端基于从配置端所拉取的客户端参数、数据源参数和协议参数所生成的,数据源参数包括本地服务类中每个方法的标识,协议参数包括本地服务类中每个方法对应的字段。
S203,接收本地服务端返回目标字段的数据,目标字段的数据是本地服务端通过graphql引擎运行DataFetcher代码从被执行的目标逻辑块类获取的,目标逻辑块类是基于目标方法的标识被执行的,目标方法是目标字段所对应的方法。
基于上述实施例提供的可配置数据源的DataFetcher实现系统,本发明实施例还提供一种可配置数据源的DataFetcher实现方法,该方法应用于可配置数据源的DataFetcher实现系统中的配置端,包括如下步骤,方法流程图如图8所示:
S301,针对客户端配置目标业务对应的客户端参数、数据源参数和协议参数,客户端参数包括本地数据源的类型和本地服务类的标识,数据源参数包括本地服务类中每个方法的标识,协议参数包括本地服务类中每个方法对应的字段,本地数据源是由设计端对目标业务所创建的,本地数据源包括本地服务类和本地服务类中多个方法的逻辑块类。
S302,响应本地服务端的拉取操作,向本地服务端返回客户端参数、数据源参数和协议参数,以使本地服务端基于拉取结果生成DataFetcher代码、以及将DataFetcher代码注册到graphql引擎,还使本地服务端将本地数据源的类型和本地服务类的标识转化为接口文档发送给客户端,还使客户端基于接口文档向本地服务端发起包含待请求的目标字段的业务请求,还使本地服务端通过调用graphql引擎运行DataFetcher代码向客户端返回目标字段的数据,DataFetcher代码运行能够实现:确定目标字段所对应的目标方法、以及基于目标方法的标识执行其对应的目标逻辑块类、以及从目标逻辑块类获取目标字段的数据。
需要说明的是,对于上述可配置数据源的DataFetcher实现方法,本地服务端、客户端和配置端的具体执行过程,可以参见可配置数据源的DataFetcher实现系统的对应部分。
本发明实施例提供的提供的可配置数据源的DataFetcher实现方法,在灵活配置多数据源的基础上,支持硬编码来实现复杂的业务逻辑,给出本地配置化的实现方式,从而提升开发效率。
以上对本发明所提供的一种可配置数据源的DataFetcher实现系统和方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素,或者是还包括为这些过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种可配置数据源的DataFetcher实现系统,其特征在于,所述系统包括设计端、配置端、本地服务端和客户端;
所述设计端,用于创建目标业务的本地数据源,所述本地数据源包括本地服务类和所述本地服务类中多个方法的逻辑块类;
所述配置端,用于针对所述客户端配置所述目标业务对应的客户端参数、数据源参数和协议参数,所述客户端参数包括所述本地数据源的类型和所述本地服务类的标识,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段;
所述本地服务端,用于拉取所述客户端参数、所述数据源参数和所述协议参数,并基于拉取结果生成DataFetcher代码;将所述DataFetcher代码注册到graphql引擎;将所述本地数据源的类型和所述本地服务类的标识转化为接口文档,并发送给所述客户端;
所述客户端,用于基于所述接口文档向所述本地服务端发起业务请求,所述业务请求中包含待请求的目标字段;
所述本地服务端,还用于接收所述业务请求;调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码,以实现确定所述目标字段所对应的目标方法、以及基于所述目标方法的标识执行其对应的目标逻辑块类、以及从所述目标逻辑块类获取所述目标字段的数据;向所述客户端返回所述目标字段的数据。
2.根据权利要求1所述的系统,其特征在于,所述客户端参数还包括:容错参数;
所述本地服务端,还用于:
在执行所述调用所述graphql引擎之前,基于所述容错参数对所述业务请求进行容错降级。
3.根据权利要求1所述的系统,其特征在于,所述客户端参数还包括:缓存参数;
用于向所述客户端返回所述目标字段的数据的所述本地服务端,具体用于:
基于所述缓存参数向所述客户端返回所述目标字段的数据,以使所述客户端对所述目标字段的数据进行缓存。
4.根据权利要求1所述的系统,其特征在于,所述数据源参数还包括:输入格式和输出格式;
所述本地服务端在执行所述调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码的过程中,还能够实现:
在执行所述从所述目标逻辑块类获取所述目标字段的数据之前,基于所述输入格式对所述目标字段进行渲染;
所述本地服务端,还用于:
在执行所述向所述客户端返回所述目标字段的数据之前,按照所述输出格式处理所述目标字段的数据。
5.一种可配置数据源的DataFetcher实现方法,其特征在于,所述方法应用于可配置数据源的DataFetcher实现系统中的本地服务端,所述方法包括:
从配置端拉取目标业务对应的客户端参数、数据源参数和协议参数,并基于拉取结果生成DataFetcher代码,所述客户端参数包括本地数据源的类型和本地服务类的标识,所述本地数据源是由设计端对所述目标业务所创建的,所述本地数据源包括所述本地服务类和所述本地服务类中多个方法的逻辑块类,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段;
将所述DataFetcher代码注册到graphql引擎;
将所述本地数据源的类型和所述本地服务类的标识转化为接口文档,并发送给客户端,以使所述客户端基于所述接口文档发起业务请求,所述业务请求中包含待请求的目标字段;
调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码,以实现确定所述目标字段所对应的目标方法、以及基于所述目标方法的标识执行其对应的目标逻辑块类、以及从所述目标逻辑块类获取所述目标字段的数据;
向所述客户端返回所述目标字段的数据。
6.根据权利要求5所述的方法,其特征在于,所述客户端参数还包括:容错参数;
所述方法还包括:
在执行所述调用所述graphql引擎之前,基于所述容错参数对所述业务请求进行容错降级。
7.根据权利要求5所述的方法,其特征在于,所述客户端参数还包括:缓存参数;
所述向所述客户端返回所述目标字段的数据,包括:
基于所述缓存参数向所述客户端返回所述目标字段的数据,以使所述客户端对所述目标字段的数据进行缓存。
8.根据权利要求5所述的方法,其特征在于,所述数据源参数还包括:输入格式和输出格式;
在执行所述调用所述graphql引擎,并通过所述graphql引擎运行所述DataFetcher代码的过程中,还能够实现:
在执行所述从所述目标逻辑块类获取所述目标字段的数据之前,基于所述输入格式对所述目标字段进行渲染;
所述方法还包括:
在执行所述向所述客户端返回所述目标字段的数据之前,按照所述输出格式处理所述目标字段的数据。
9.一种可配置数据源的DataFetcher实现方法,其特征在于,所述方法应用于可配置数据源的DataFetcher实现系统中的客户端,所述方法包括:
接收本地服务端发送的接口文档,所述接口文档是所述本地服务端通过转化其从配置端拉取的客户端参数中的本地数据源的类型和本地服务类的标识所得到的,所述本地数据源是由设计端对目标业务所创建的,所述本地数据源包括所述本地服务类和所述本地服务类中多个方法的逻辑块类;
基于所述接口文档向所述本地服务端发起业务请求,所述业务请求中包含待请求的目标字段,以使所述本地服务端调用graphql引擎,所述graphql引擎注册有DataFetcher代码,所述DataFetcher代码是所述本地服务端基于从所述配置端拉取的所述客户端参数、数据源参数和协议参数所生成的,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段;
接收所述本地服务端返回所述目标字段的数据,所述目标字段的数据是所述本地服务端通过所述graphql引擎运行所述DataFetcher代码从被执行的目标逻辑块类获取的,所述目标逻辑块类是基于所述目标方法的标识被执行的,所述目标方法是所述目标字段所对应的方法。
10.一种可配置数据源的DataFetcher实现方法,其特征在于,所述方法应用于可配置数据源的DataFetcher实现系统中的配置端,所述方法包括:
针对客户端配置目标业务对应的客户端参数、数据源参数和协议参数,所述客户端参数包括本地数据源的类型和本地服务类的标识,所述数据源参数包括所述本地服务类中每个方法的标识,所述协议参数包括所述本地服务类中每个方法对应的字段,所述本地数据源是由设计端对所述目标业务所创建的,所述本地数据源包括所述本地服务类和所述本地服务类中多个方法的逻辑块类;
响应本地服务端的拉取操作,向所述本地服务端返回所述客户端参数、所述数据源参数和所述协议参数,以使所述本地服务端基于拉取结果生成DataFetcher代码、以及将所述DataFetcher代码注册到graphql引擎,还使所述本地服务端将所述本地数据源的类型和所述本地服务类的标识转化为接口文档发送给所述客户端,还使所述客户端基于所述接口文档向所述本地服务端发起包含待请求的目标字段的业务请求,还使所述本地服务端通过调用所述graphql引擎运行所述DataFetcher代码向所述客户端返回所述目标字段的数据,所述DataFetcher代码运行能够实现:
确定所述目标字段所对应的目标方法、以及基于所述目标方法的标识执行其对应的目标逻辑块类、以及从所述目标逻辑块类获取所述目标字段的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011230854.0A CN112306578B (zh) | 2020-11-06 | 2020-11-06 | 可配置数据源的DataFetcher实现系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011230854.0A CN112306578B (zh) | 2020-11-06 | 2020-11-06 | 可配置数据源的DataFetcher实现系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112306578A CN112306578A (zh) | 2021-02-02 |
CN112306578B true CN112306578B (zh) | 2022-04-19 |
Family
ID=74326378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011230854.0A Active CN112306578B (zh) | 2020-11-06 | 2020-11-06 | 可配置数据源的DataFetcher实现系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112306578B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102754411A (zh) * | 2009-12-14 | 2012-10-24 | 起元技术有限责任公司 | 使用客户端-服务器网桥管理对象 |
CN106874461A (zh) * | 2017-02-14 | 2017-06-20 | 北京慧正通软科技有限公司 | 一种工作流引擎支持多数据源配置安全访问系统及方法 |
CN107277116A (zh) * | 2017-05-27 | 2017-10-20 | 北京思特奇信息技术股份有限公司 | 一种可配置的客户端引擎及利用其调用服务的方法 |
WO2018203166A1 (en) * | 2017-05-05 | 2018-11-08 | Esoptra, N.V. | Plug-in function platform and methods |
-
2020
- 2020-11-06 CN CN202011230854.0A patent/CN112306578B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102754411A (zh) * | 2009-12-14 | 2012-10-24 | 起元技术有限责任公司 | 使用客户端-服务器网桥管理对象 |
CN106874461A (zh) * | 2017-02-14 | 2017-06-20 | 北京慧正通软科技有限公司 | 一种工作流引擎支持多数据源配置安全访问系统及方法 |
WO2018203166A1 (en) * | 2017-05-05 | 2018-11-08 | Esoptra, N.V. | Plug-in function platform and methods |
CN107277116A (zh) * | 2017-05-27 | 2017-10-20 | 北京思特奇信息技术股份有限公司 | 一种可配置的客户端引擎及利用其调用服务的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112306578A (zh) | 2021-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109002362B (zh) | 一种服务方法、装置、系统以及电子设备 | |
US8145593B2 (en) | Framework for web services exposing line of business applications | |
CN1967485B (zh) | 一种实现j2ee应用的方法及系统 | |
US20080155525A1 (en) | Synchronization patterns for mobile applications | |
US7650609B2 (en) | Multi-environment document management system access | |
US10417248B2 (en) | Field extension in database system | |
KR20140047580A (ko) | 다중-서버 예약 시스템 상의 동기화 메커니즘 시스템 및 방법 | |
US20070011274A1 (en) | Data transfer in a multi-environment document management system access | |
CN109831466B (zh) | 微服务业务处理方法及nginx服务器 | |
CN111010438B (zh) | 远程过程调用方法、装置、服务器及存储介质 | |
JP2022523914A (ja) | レプリゼンテーショナルステートトランスファ(rest)アプリケーションプログラミングインターフェイス(api)を使用するデータ変換のための方法、システムおよびコンピュータ読取可能媒体 | |
CN102214099A (zh) | 用于autosar的rte代码自动生成方法 | |
CN112073448A (zh) | 一种双系统终端的服务隔离方法和装置 | |
CN114629904B (zh) | 一种分布式事件的处理方法、系统、设备及介质 | |
KR100370548B1 (ko) | 임베디드 시스템의 통합 소프트웨어 개발 프레임워크를제공하는 실시간 미들웨어 장치 및 그 서비스 방법 | |
US10803413B1 (en) | Workflow service with translator | |
CN116204239A (zh) | 业务处理方法、装置和计算机可读存储介质 | |
CN114237594A (zh) | 一种表单界面生成方法、装置、系统及可读存储介质 | |
CN112306578B (zh) | 可配置数据源的DataFetcher实现系统和方法 | |
CN107239265B (zh) | Java函数与C函数的绑定方法及装置 | |
US10713014B2 (en) | Multi-platform interface framework | |
US11016830B2 (en) | Entity-based service operation for object-based persistence | |
KR101190597B1 (ko) | 로봇 소프트웨어 컴포넌트를 위한 메소드 포트 장치 및 구성 방법 | |
CN112328324B (zh) | 可配置数据源的DataFetcher实现系统和方法 | |
Baraki et al. | Sam: A semantic-aware middleware for mobile cloud computing |
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 |