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

编程语言类库的生成方法及装置、电子设备、存储介质

文献发布时间:2023-06-19 16:06:26



技术领域

本发明涉及信息处理技术领域,具体而言,涉及一种编程语言类库的生成方法及装置、电子设备、存储介质。

背景技术

相关技术中,对于不同应用或者厂商所开发的远程过程调用库,如果遇到需要相互迁移调用库的文件或者数据时(例如,如果遇到需要将Thrift迁移到gRPC的需求,或者用gRPC服务代理Thrift的需求时),当前手段是通过手动按照待迁移的调用库的协议定义文件再写一份协议文件,同时,文件所服务的接口也需要手动实现该待迁移的调用库的策略,这种通过编程人员手工实现文件定义、文件调用的方式,效率较低,且花费时间长。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本发明实施例提供了一种编程语言类库的生成方法及装置、电子设备、存储介质,以至少解决相关技术中采用手工方式编写协议定义文件,以调用文件数据的方式,效率低的技术问题。

根据本发明实施例的一个方面,提供了一种编程语言类库的生成方法,包括:接收文件转换请求,其中,所述文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;采用预先配置的协议生成器,基于所述文件信息生成第二类远程过程调用库的协议文件;执行所述远程过程调用命令,调用所述第二类远程过程调用库的协议文件,生成编程语言类库。

可选地,在接收文件转换请求之后,还包括:获取关于所述第一类远程过程调用库的服务接口信息、结构体信息和文件基础信息;将所述服务接口信息、所述结构体信息和所述文件基础信息放入缓存中;将缓存中的所述服务接口信息、所述结构体信息和所述文件基础信息中所有依赖的信息结构归置在新建文件中,以去除循环依赖;将去除循环依赖的所述服务接口信息、所述结构体信息和所述文件基础信息中归纳为所述文件信息。

可选地,所述文件基础信息包括下述至少之一:文件版本标识、引用文件、文件包名称;所述服务接口信息包括下述至少之一:服务名称、所有接口名称、参数、返回值和请求路径;所述结构体信息包括下述至少之一:结构名称、结构属性名称和结构类型。

可选地,采用预先配置的协议生成器,基于所述文件信息生成第二类远程过程调用库的协议文件的步骤,包括:采用预先配置的协议生成器,分别拼接所述服务接口信息、所述结构体信息和所述文件基础信息,生成第二类远程过程调用库的协议文件。

可选地,编程语言类库的生成方法应用于调用库转换器。

可选地,在构建所述调用库转换器时,包括:创建目标编程语言类的信息对象;将类名称和文件包的包名称记录至所述信息对象中;将依赖引用、字段信息、转换策略记录至所述信息对象中,其中,所述字段信息包括下述至少之一:类型和名称,所述转换策略包括下述至少之一:策略名称、返回值、参数;按照所述目标编程语言类的指定格式,依次拼接所述包名称、所述依赖引用、所述类名称、所有字段信息以及所有转换策略。

可选地,所述第一类远程过程调用库为gRPC调用库,所述第二类远程过程调用库为Thrift调用库;或者,所述第一类远程过程调用库为Thrift调用库,所述第二类远程过程调用库为gRPC调用库。

根据本发明实施例的另一方面,还提供了一种编程语言类库的生成装置,包括:接收单元,用于接收文件转换请求,其中,所述文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;生成单元,用于采用预先配置的协议生成器,基于所述文件信息生成第二类远程过程调用库的协议文件;调用单元,用于执行所述远程过程调用命令,调用所述第二类远程过程调用库的协议文件,生成编程语言类库。

可选地,编程语言类库的生成装置还包括:第一获取模块,用于在接收文件转换请求之后,获取关于所述第一类远程过程调用库的服务接口信息、结构体信息和文件基础信息;放入模块,用于将所述服务接口信息、所述结构体信息和所述文件基础信息放入缓存中;去除模块,用于将缓存中的所述服务接口信息、所述结构体信息和所述文件基础信息中所有依赖的信息结构归置在新建文件中,以去除循环依赖;归纳模块,用于将去除循环依赖的所述服务接口信息、所述结构体信息和所述文件基础信息中归纳为所述文件信息。

可选地,所述文件基础信息包括下述至少之一:文件版本标识、引用文件、文件包名称;所述服务接口信息包括下述至少之一:服务名称、所有接口名称、参数、返回值和请求路径;所述结构体信息包括下述至少之一:结构名称、结构属性名称和结构类型。

可选地,所述生成单元包括:拼接模块,用于采用预先配置的协议生成器,分别拼接所述服务接口信息、所述结构体信息和所述文件基础信息,生成第二类远程过程调用库的协议文件。

可选地,编程语言类库的生成方法应用于调用库转换器。

可选地,在构建所述调用库转换器时,包括:创建目标编程语言类的信息对象;将类名称和文件包的包名称记录至所述信息对象中;将依赖引用、字段信息、转换策略记录至所述信息对象中,其中,所述字段信息包括下述至少之一:类型和名称,所述转换策略包括下述至少之一:策略名称、返回值、参数;按照所述目标编程语言类的指定格式,依次拼接所述包名称、所述依赖引用、所述类名称、所有字段信息以及所有转换策略。

可选地,所述第一类远程过程调用库为gRPC调用库,所述第二类远程过程调用库为Thrift调用库;或者,所述第一类远程过程调用库为Thrift调用库,所述第二类远程过程调用库为gRPC调用库。

根据本发明实施例的另一方面,还提供了一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一项所述的编程语言类库的生成方法。

根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任意一项所述的编程语言类库的生成方法。

本发明实施例中,采用接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件;执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。在该实施例中,在接收到调用库之间的迁移请求(或者转换请求、调用请求等)时,可以通过预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件,该协议生成器可以免去大量的协议定义迁移和实现过程,可以快速自动化实现迁移协议文件,提高文件数据的调用速度,提高文件处理效率,从而解决相关技术中采用手工方式编写协议定义文件,以调用文件数据的方式,效率低的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的一种可选的编程语言类库的生成方法的流程图;

图2是根据本发明实施例的一种可选的开源远程过程调用库的调用示意图;

图3是根据本发明实施例的一种可选的编程语言类库的生成装置的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于本领域技术人员理解本发明,下面对本发明各实施例中所涉及的部分术语或者名词做出解释:

gRPC,即gRPC Remote Procedure Calls,为谷歌公司发起的一个开源远程过程调用系统,可以基于HTTP协议传输。

Thrift:开源的远程过程调用库。

本发明可以应用于各种文件迁移系统或者文件传输系统中,以gRPC与Thrift之间的调用为例,可以根据Thrift生成类产生通过文件收集器加载分析出服务接口信息、结构体信息和枚举信息并放入缓存中;然后通过循环依赖解决器将缓存中的各种信息去除循环依赖,方式为将所有依赖都归为新的文件中;最后通过协议生成器生成gRPC协议文件。或者通过Thrift生成类产生对应的转换器(Java),可以将Thrift数据转换为对应的gRPC数据。下面结合各个实施例来详细说明本发明。

实施例一

根据本发明实施例,提供了一种编程语言类库的生成方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本发明实施例的一种可选的编程语言类库的生成方法的流程图,如图1所示,该方法包括如下步骤:

步骤S102,接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;

步骤S104,采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件;

步骤S106,执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。

通过上述步骤,可以接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件;执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。在该实施例中,在接收到调用库之间的迁移请求(或者转换请求、调用请求等)时,可以通过预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件,该协议生成器可以免去大量的协议定义迁移和实现过程,可以快速自动化实现迁移协议文件,提高文件数据的调用速度,提高文件处理效率,从而解决相关技术中采用手工方式编写协议定义文件,以调用文件数据的方式,效率低的技术问题。

作为本实施例可选的实施方式,第一类远程过程调用库为gRPC调用库,第二类远程过程调用库为Thrift调用库;或者,第一类远程过程调用库为Thrift调用库,第二类远程过程调用库为gRPC调用库。

本实施例所提供的编程语言类库的生成方法,可以应用于调用库转换器。

在使用该调用库转换器之前,需要构建调用库转换器,可选的,在构建调用库转换器时,包括:创建目标编程语言类的信息对象;将类名称和文件包的包名称记录至信息对象中;将依赖引用、字段信息、转换策略记录至信息对象中,其中,字段信息包括下述至少之一:类型和名称,转换策略包括下述至少之一:策略名称、返回值、参数;按照目标编程语言类的指定格式,依次拼接包名称、依赖引用、类名称、所有字段信息以及所有转换策略。

本实施例中的目标编程语言类可以选取为JaVa,以Thrift/gRPC之间进行调用为例,说明创建Thrift/gRPC转换器的实施方式,包括:拼接java文件的字符串,然后将字符串输出到java文件中。拼接过程:1、创建一个Java类信息对象;2、将类名称、包名记录到Java类信息对象中;3、将依赖引用、字段、方法记录到Java类信息对象中;4、按照java文件的格式依次拼接包名、依赖引用、类名称、所有字段(类型和名称)以及所有方法/策略(策略方法名称、返回值、参数和方法内容)。

下面结合已经构建的调用库转换器以及预先构建的协议生成器,对上述各实施步骤进行示意说明。

步骤S102,接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令。

文件转换请求可以是客户端发送的,该文件转换请求中可以包括:验证信息、消息头、数据内容等。通过该文件转换请求,能够将不同类的远程过程调用库的协议文件相互转化。

可选的,在接收文件转换请求之后,还包括:获取关于第一类远程过程调用库的服务接口信息、结构体信息和文件基础信息;将服务接口信息、结构体信息和文件基础信息放入缓存中;将缓存中的服务接口信息、结构体信息和文件基础信息中所有依赖的信息结构归置在新建文件中,以去除循环依赖;将去除循环依赖的服务接口信息、结构体信息和文件基础信息中归纳为文件信息。

本发明实施例中,可以根据Thrift生成类产生通过文件收集器加载分析出服务接口信息、结构体信息和枚举信息并放入缓存中;然后通过循环依赖解决器将缓存中的各种信息去除循环依赖,方式为将所有依赖都归为新的文件中。

可选的,文件基础信息包括下述至少之一:文件版本标识、引用文件、文件包名称;服务接口信息包括下述至少之一:服务名称、所有接口名称、参数、返回值和请求路径;结构体信息包括下述至少之一:结构名称、结构属性名称和结构类型。

步骤S104,采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件。

本实施例的协议生成器是预先配置的,在配置协议生成器时(以Grpc协议生成器为例示意说明),包括:拼接proto文件的字符串,然后将字符串输出到proto文件中。拼接过程:1、拼接版本号、引用文件、包名称等文件基础信息;2、拼接服务接口信息:服务名称、所有接口名称、参数、返回值和请求路径;3、拼接所有结构信息:结构名称、结构内所有属性(属性名称和类型)。

可选的,采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件的步骤,包括:采用预先配置的协议生成器,分别拼接服务接口信息、结构体信息和文件基础信息,生成第二类远程过程调用库的协议文件。

步骤S106,执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。

例如,通过协议生成器生成gRPC协议文件,然后可以执行gRPC的生成命令生成Java类库。

本实施例可以根据Thrift生成类产生通过文件收集器加载分析出服务接口信息、结构体信息和枚举信息并放入缓存中;然后通过循环依赖解决器将缓存中的各种信息去除循环依赖,方式为将所有依赖都归为新的文件中;最后通过协议生成器生成gRPC协议文件。

本实施例,可以根据Thrift生成类产生对应的转换器(Java),可以将Thrift数据转换为对应的gRPC数据。当遇到需要将Thrift迁移到gRPC的需求,或者用gRPC服务代理Thrift的需求时,本实施例无需编程人员手动按照Thrift协议定义文件再写一份gRPC协议文件,本实施例可以免去大量的协议定义迁移和实现过程,快速实现文件数据的迁移。

下面结合具体实施方式来说明本发明实施例。

图2是根据本发明实施例的一种可选的开源远程过程调用库的调用示意图,如图2所示,其最左侧包括两种类型的生成类:thrift生成类和gRPC生成类。

第1点,第一列的Thrift生成类,通过第二列的文件收集器加载分析出服务接口信息(即图2中的服务,service)、结构体信息(即图2中的结构)和枚举信息(即图2中的枚举)并放入文件信息缓存中,这些信息体现在图2中的第三列。

第2点,通过图2第二列的循环依赖解决器将缓存中的各种信息去除循环依赖(具体去除方式:将所有依赖的结构都归为新的文件中)。

第3点,通过图2第二列的协议生成器(图2示意了Grpc协议生成器)生成gRPC协议文件(图2第一列的Grpc协议),然后可以执行gRPC的生成命令生成Java类库(通过protobuf编译来实现)。

第4点,通过新实现的Thrift转换器生成器(图2中示意了通过创建Thrift转换器组件得到Thrift转换器)生成所有Thrift结构的转换器方法,从而可以调用这些方法将Thrift数据转换为对应的gRPC数据,这些数据将作为返回值返回给客户端。

第5点,通过gRPC转换器生成器(图2中示意了通过创建gRPC转换器组件得到gRPC转换器)生成所有gRPC结构的转换器方法,从而可以调用这些方法将gRPC数据转换为对应的Thrift数据,这些数据将作为请求参数发送给处理业务的服务。

第6点,通过gRPC服务生成器生成所有gRPC服务,每一个服务的都实现类对应的gRPC接口。接口的实现方式为通过Thrift转换器转换为Thrift数据去请求Thrift服务的接口,再通过gRPC转换器将Thrift服务的接口返回值转回gRPC数据,最后返回给请求端。

本发明实施例,可以通过gRPC服务生成器生成所有gRPC服务,生成方式是将:每一个服务的都实现类对应的gRPC接口:实现方式为通过Thrift转换器,转换为Thrift数据去请求Thrift服务的接口,再通过gRPC转换器将Thrift服务的接口返回值转回gRPC数据,最后返回给请求端。

本发明实施例,生成的服务也可以接收gRPC请求,然后通过第二点的转换器转换为Thrift数据(由Thrift定义的接口参数)去请求使用Thrift定义服务(该服务为处理业务逻辑的服务)的接口,再通过第二点的转换器将Thrift服务的接口返回值转回gRPC数据,最后返回给请求端。

下面结合另一种可选的实施例来说明本发明。

实施例二

本发明实施例提供了一种编程语言类库的生成装置,该生成装置中所包含的各个实施单元对应于上述实施例一中的各个步骤。

图3是根据本发明实施例的一种可选的编程语言类库的生成装置的示意图,如图3所示,该生成装置可以包括:接收单元31、生成单元33、调用单元35,其中,

接收单元31,用于接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;

生成单元33,用于采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件;

调用单元35,用于执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。

上述编程语言类库的生成装置,可以通过接收单元31接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;通过生成单元33采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件;通过调用单元35执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。在该实施例中,在接收到调用库之间的迁移请求(或者转换请求、调用请求等)时,可以通过预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件,该协议生成器可以免去大量的协议定义迁移和实现过程,可以快速自动化实现迁移协议文件,提高文件数据的调用速度,提高文件处理效率,从而解决相关技术中采用手工方式编写协议定义文件,以调用文件数据的方式,效率低的技术问题。

可选的,编程语言类库的生成装置还包括:第一获取模块,用于在接收文件转换请求之后,获取关于第一类远程过程调用库的服务接口信息、结构体信息和文件基础信息;放入模块,用于将服务接口信息、结构体信息和文件基础信息放入缓存中;去除模块,用于将缓存中的服务接口信息、结构体信息和文件基础信息中所有依赖的信息结构归置在新建文件中,以去除循环依赖;归纳模块,用于将去除循环依赖的服务接口信息、结构体信息和文件基础信息中归纳为文件信息。

可选的,文件基础信息包括下述至少之一:文件版本标识、引用文件、文件包名称;服务接口信息包括下述至少之一:服务名称、所有接口名称、参数、返回值和请求路径;结构体信息包括下述至少之一:结构名称、结构属性名称和结构类型。

可选的,生成单元包括:拼接模块,用于采用预先配置的协议生成器,分别拼接服务接口信息、结构体信息和文件基础信息,生成第二类远程过程调用库的协议文件。

可选的,编程语言类库的生成方法应用于调用库转换器。

可选的,在构建调用库转换器时,包括:创建目标编程语言类的信息对象;将类名称和文件包的包名称记录至信息对象中;将依赖引用、字段信息、转换策略记录至信息对象中,其中,字段信息包括下述至少之一:类型和名称,转换策略包括下述至少之一:策略名称、返回值、参数;按照目标编程语言类的指定格式,依次拼接包名称、依赖引用、类名称、所有字段信息以及所有转换策略。

可选的,第一类远程过程调用库为gRPC调用库,第二类远程过程调用库为Thrift调用库;或者,第一类远程过程调用库为Thrift调用库,第二类远程过程调用库为gRPC调用库。

上述的编程语言类库的生成装置还可以包括处理器和存储器,上述接收单元31、生成单元33、调用单元35等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

上述处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。

上述存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

根据本发明实施例的另一方面,还提供了一种电子设备,包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行上述任意一项的编程语言类库的生成方法。

根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述任意一项的编程语言类库的生成方法。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:接收文件转换请求,其中,文件转换请求携带有第一类远程过程调用库的文件信息和远程过程调用命令;采用预先配置的协议生成器,基于文件信息生成第二类远程过程调用库的协议文件;执行远程过程调用命令,调用第二类远程过程调用库的协议文件,生成编程语言类库。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

相关技术
  • 编程语言类库的生成方法及装置、电子设备、存储介质
  • 类库自动更新方法、装置、电子设备、存储介质
技术分类

06120114702386