组合IDL文件的方法、装置、计算机设备和存储介质
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种组合IDL文件的方法、装置、计算机设备以及存储介质。
背景技术
一个软件应用一般分为客户端和服务端,服务端又可能包含多个子服务。客户端与服务端之间以及服务端的多个子服务之间,一般通过接口进行连接。连接的多方进行对接的时候,需要确定接口的具体信息,比如接口名称、请求类型和返回类型等。为了方便对接,一般使用IDL(Interface description language,接口描述语言)文件来描述具体的接口信息。
对于接口的提供方,一般维护一个主IDL文件,表示提供一个服务。对于接口的使用方,往往需要使用多个服务,所以需要使用多个主IDL文件。通常,接口使用方可以引入多个主IDL文件,生成多个主IDL文件的接口代码,然后从中挑选需要使用的接口代码。比如,服务A和服务B分别提供了20个接口,使用方C需要使用2个接口,服务A和服务B各提供一个,则C使用服务A和服务B的完整的IDL文件,并生成40个接口的接口代码。
上述过程中,接口使用方使用全量IDL文件的方式生成接口代码,导致生成了一些不需要使用的接口代码,一方面,不便于查阅需要的接口类型,降低了IDL文件查阅效率,另一方面,还降低了生成接口代码的性能。
发明内容
有鉴于此,本公开实施例至少提供一种组合IDL文件的方法、装置、计算机设备和存储介质,用以根据需要的接口类型生成IDL文件,提高IDL文件查阅效率,提升生成接口代码的性能。
第一方面,本公开实施例提供了一种组合IDL文件的方法,包括:
根据预先定义的接口描述元信息结构,从多个IDL文件中分别提取接口描述元信息,所述接口描述元信息包括接口类型和普通类型;
遍历所述接口描述元信息中的接口类型,确定需要使用的接口类型;
根据需要使用的接口类型确定需要使用的普通类型;
根据需要使用的接口类型和需要使用的普通类型,生成包含所需要接口的IDL文件。
在一种可能的实施方式中,根据预先定义的接口描述元信息结构,从多个IDL文件中分别提取接口描述元信息,包括:
解析IDL文件得到抽象语法树AST;
遍历所述AST,确定函数类型为所述接口描述元信息的接口类型;
确定除函数类型以外的其他类型为所述接口描述元信息的普通类型。
在一种可能实施方式中,遍历所述接口描述元信息中的接口类型,确定需要使用的接口类型,包括:
获取所需要接口的接口需求信息;
根据所述接口需求信息,从所述接口描述元信息中的接口类型中确定需要使用的接口类型。
在一种可能实施方式中,根据需要使用的接口类型确定需要使用的普通类型,具体包括:
从需要使用的接口类型的请求类型和返回类型开始递归查找所依赖的普通类型;
确定查找到的普通类型为需要使用的普通类型。
在一种可能实施方式中,需要使用的接口类型和需要使用的普通类型包含文件路径属性;所述接口类型由接口名称和接口信息组成,所述普通类型由类型名称和类型信息组成;以及
根据需要使用的接口类型和需要使用的普通类型,生成包含所需要接口的IDL文件,具体包括:
按照需要使用的接口类型和需要使用的普通类型的文件路径,聚合需要使用的接口类型和需要使用的普通类型;
根据聚合后的需要使用的接口类型中的接口信息和需要使用的普通类型中的类型信息生成所需要接口的IDL文件。
第二方面,本公开实施例还提供一种组合IDL文件的装置,包括:
第一生成模块,用于根据预先定义的接口描述元信息结构,从多个IDL文件中分别提取接口描述元信息,所述接口描述元信息包括接口类型和普通类型;第一选取模块,用于遍历所述接口描述元信息中的接口类型,确定需要使用的接口类型;
第二选取模块,用于根据需要使用的接口类型确定需要使用的普通类型;
第二生成模块,用于根据需要使用的接口类型和需要使用的普通类型,生成包含所需要接口的IDL文件。
在一种可能实施的方式中,所述第一生成模块,具体用于解析IDL文件得到抽象语法树AST;遍历所述AST,确定函数类型为所述接口描述元信息的接口类型;确定除函数类型以外的其他类型为所述接口描述元信息的普通类型。
在一种可能实施的方式中,所述第一选取模块,具体用于获取所需要接口的接口需求信息;根据所述接口需求信息,从所述接口描述元信息中的接口类型中确定需要使用的接口类型。
在一种可能实施的方式中,所述第二选取模块,具体用于从需要使用的接口类型的请求类型和返回类型开始递归查找所依赖的普通类型;确定查找到的普通类型为需要使用的普通类型。
在一种可能实施的方式中,需要使用的接口类型和需要使用的普通类型包含文件路径属性;所述接口类型由接口名称和接口信息组成,所述普通类型由类型名称和类型信息组成;以及
所述第二生成模块,具体用于按照需要使用的接口类型和需要使用的普通类型的文件路径,聚合需要使用的接口类型和需要使用的普通类型;根据聚合后的需要使用的接口类型中的接口信息和需要使用的普通类型中的类型信息生成所需要接口的IDL文件。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述组合IDL文件的装置、计算机设备及计算机可读存储介质的效果描述参见上述组合IDL文件方法的说明,这里不再赘述。
本公开实施例提供的组合IDL文件的方法、装置、计算机设备和存储介质,根据预先定义的接口描述元信息结构,从多个IDL文件中分别提取成所述IDL文件的接口描述元信息,从接口描述元信息中的接口类型中确定需要使用的接口类型,根据需要使用的接口类型确定需要使用的普通类型,最后根据需要使用的接口类型和需要使用的普通类型,生成包含所需要接口的IDL文件,上述过程中,将多个IDL文件组合为一个只包含需要的接口的相关类型的IDL文件,提高了IDL文件查阅效率;而且,与现有技术中使用全量IDL文件生成接口代码相比,由于过滤掉不需要的接口类型,提升生成接口代码的性能。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种组合IDL文件方法的流程图;
图2示出了本公开实例解析IDL文件的方法流程图;
图3示出了本公开实施例所提供的组合IDL文件装置的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,接口使用方需要使用多个服务时,需要使用所使用服务的全量IDL文件生成包含全部接口的接口代码,一方面,不便于从IDL文件中查阅需要的接口类型,另一方面,还会影响生成接口代码的性能。
基于上述研究,本公开提供了一种组合IDL文件的方法,用以把多个IDL文件组合为一个只包含需要的接口的相关类型的IDL文件,实现按需组合,提高查阅IDL文件中的接口类型的效率,提升生成接口代码的性能。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
下面将结合本公开中附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种组合IDL文件的方法进行详细介绍,本公开实施例所提供的组合IDL文件方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该组合IDL文件方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为计算设备为例对本公开实施例提供的组合IDL文件的方法加以说明。
实施例一
参见图1所示,为本公开实施例一提供的组合IDL文件方法的流程图,所述方法包括步骤S101~S104,其中:
S101:根据预先定义的接口描述元信息结构,从多个IDL文件中分别提取接口描述元信息。
为了完成IDL文件的组合,需要先把IDL文件解析成接口描述元信息,然后处理接口元信息,最后生成IDL文件。
根据本公开实施例,接口描元信息结构可以预先进行定义,考虑到接口描述元信息结构不仅需要利用于IDL文件的正向和逆向转化,还需要便于按需选取。由于按需选取是根据接口进行的,所以要把接口类型单独抽出来。在一种实施方式中,接口描元信息结构顶层可以包括接口类型api和普通类型type。
因为最后多个IDL文件中定义的类型会聚合到一起,为了防止命名冲突,可以使用域名引用的名称作为键。具体实施时,接口描述元信息结构中的api和type可以为一个映射结构,其中,api映射的键为域名引用的接口名称,映射的值为接口信息,type映射的键为域名引用的类型名称,映射的值为类型信息。
在本步骤中,根据所述预先定义好的接口描述元信息结构,针对每一IDL文件,分别进行解析,得到所述IDL文件的接口描述元信息。
S102:遍历所述接口描述元信息中的接口类型,确定需要使用的接口类型。
在本步骤中,可以通过提供命令行或页面交互的方式让用户选取需要使用的接口,在获取用户的选择后,遍历接口描述元信息中的接口类型,根据选取的需要的使用接口名称标记对应的接口类型为需要,得到确定使用的接口类型。
S103:根据需要使用的接口类型确定需要使用的普通类型。
在本步骤中,可以从步骤S102中确定出的需要的接口类型的请求类型和返回类型开始递归寻找依赖的普通类型,并且标记为需要,最后把标记为需要的接口类型和普通类型组合成新的接口描述元信息。
S104:根据需要使用的接口类型和需要使用的普通类型,生成包含所需要接口的IDL文件。
在本步骤中,由于每个类型都包含了文件路径属性,可以按照文件路径进行聚合。
在一种实施方式中,可以遍历步骤S103中生成的新的接口描述元信息中的接口类型和普通类型,根据需要使用的接口类型和需要使用的普通类型的文件路径进行聚合,根据聚合后的需要使用的接口类型中的接口信息和需要使用的普通类型中的类型信息生成所需要接口的的生成IDL文件。
实施例二
为了保持好的通用性和减少开发成本,具体实施时,可以不直接把IDL文件解析成接口元信息,而是先解析成AST,然后再把AST转化成接口描述元信息,其解析过程可以参照图2所示的流程,包括以下步骤:
S201:解析IDL文件得到AST。
在本步骤中,可以使用官方或者社区的解析器解析所述IDL文件,得到对应的AST(抽象语法树)。
S202:遍历所述AST,确定函数类型为所述接口描述元信息的接口类型。
在本步骤中,AST中的函数类型按照预先设定的接口描述元信息结构放到接口类型映射结构中。
S203:确定除函数类型以外的其他类型为所述接口描述元信息的普通类型。
在本步骤中,AST中的其他类型放到普通类型映射结构中,与步骤S202中的接口类型映射结构组合生成所述IDL文件对应的接口描述元信息。
S204:在所有的类型中增加文件路径属性。
至此,通过上述步骤S201-S204,得到了所述IDL文件对应的接口描述元信息。接口描述元信息示例如下:
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
本公开实施例提供的按需组合IDL文件的方法,能把多个IDL文件组合为一个只包含需要的接口的相关类型的IDL文件,并过滤掉不需要的类型,提高查阅IDL文件中的类型的效率,提升生成接口代码的性能。
基于同一发明构思,本公开实施例中还提供了与组合IDL文件方法对应的组合IDL文件装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述组合IDL文件方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例三
参照图3所示,为本公开实施例三提供的一种组合IDL文件的示意图,所述装置包括:第一生成模块301、第一选取模块302、第二选取模块303、第二生成模块304;其中,
第一生成模块301,用于根据预先定义的接口描述元信息结构,从多个IDL文件中分别提取接口描述元信息,所述接口描述元信息包括接口类型和普通类型;
第一选取模块302,用于遍历所述接口描述元信息中的接口类型,确定需要使用的接口类型;
第二选取模块303,用于根据需要使用的接口类型确定需要使用的普通类型;
第二生成模块304,用于根据需要使用的接口类型和需要使用的普通类型,生成包含所需要接口的IDL文件。
一种可能的实施方式中,所述第一生成模块,具体用于解析IDL文件得到抽象语法树AST;遍历所述AST,确定函数类型为所述接口描述元信息的接口类型;确定除函数类型以外的其他类型为所述接口描述元信息的普通类型。
一种可能的实施方式中,所述第一选取模块,具体用于获取所需要接口的接口需求信息;根据所述接口需求信息,从所述接口描述元信息中的接口类型中确定需要使用的接口类型。
一种可能的实施方式中,所述第二选取模块,具体用于从需要使用的接口类型的请求类型和返回类型开始递归查找所依赖的普通类型;确定查找到的普通类型为需要使用的普通类型。
一种可能的实施方式中,需要使用的接口类型和需要使用的普通类型包含文件路径属性;所述接口类型由接口名称和接口信息组成,所述普通类型由类型名称和类型信息组成;以及
所述第二生成模块,具体用于按照需要使用的接口类型和需要使用的普通类型的文件路径,聚合需要使用的接口类型和需要使用的普通类型;根据聚合后的需要使用的接口类型中的接口信息和需要使用的普通类型中的类型信息生成所需要接口的IDL文件。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
实例四
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的组合IDL文件方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的组合IDL文件方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的组合IDL文件方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。