本发明涉及计算机技术领域,尤其是涉及一种接口路由生成方法及装置。
背景技术:
api(applicationprogramminginterface,应用程序编程接口,简称接口)是一些预先定义的代码逻辑,通过调用这些代码逻辑可以实现所需应用系统的功能。但通常这些接口逻辑存放在服务器端,安全起见,不允许直接对其发起调用,而是需要通过调用特定的路径实现对接口的调用。而在接口代码和调用者之间,核心就是路由,包括所述路径也是路由的一部分。这里的路由是指将路径调用转换为对接口代码调用的中间逻辑,这些中间逻辑的存在可以大大降低对接口的恶意使用或攻击。同时这些路由也肩负着调用分配、调用转换、错误处理、数据加工及返回等作用。
在接口开发工作中,主要的方式为通过一个主入口程序,将路由路径暴露给外界,所有的路由调用都会先到达所述主入口程序,由他将调用转发到事先指定的接口程序。这就要求在主入口程序中引用所有的接口代码,使得任何的扩展都不得不编辑入口程序,扩展性差。而接口源文件的存放及接口源文件内对路由路径的定义比较随意,即使划分模块,在每个模块内部也没有统一的规范,或规范缺乏强制性。使得源代码的目录结构、路由路径的结构、产品逻辑的结构,三者完全独立,不能统一,增加了开发人员、架构人员和产品设计人员的沟通成本,且容易产生混乱。
因此,如何在接口开发工作中,提高可扩展性,降低沟通成本,避免产生混乱,是本领域技术人员目前需要解决的技术问题。
技术实现要素:
本发明实施例的目的在于提供一种接口路由的成生方法,用于提高代码的扩展性、降低沟通成本、解决容易产生混乱的问题;本发明的另一目的是提供一种接口路由的生成装置,均具有上述有益效果。
为解决上述技术问题,本发明实施例的一个方面提供了一种接口路由生成方法,包括:
通过递归读取预定义的接口根目录获取每一层目录中的源文件;
解析所述源文件的内容以获取所述每一层目录对应的接口逻辑和描述信息;
根据所述接口逻辑、所述描述信息及所述每一层目录的路径生成路由并关联所述接口逻辑和所述描述信息;
对外暴露所述生成的路由。
优选的,所述接口根目录,包括:预定义的每个模块中用于保存接口代码的根目录;预定义的用于保存接口代码的全局根目录。
优选的,所述每一层目录的结构与相应产品逻辑的结构所对应。
优选的,所述每一层目录中的源文件,包括:描述文件,用于描述所述目录对应路由的名称、说明等描述信息;接口代码文件,用于定义所述目录对应路由需要关联的接口逻辑;辅助文件,用于定义所述接口代码文件需要使用的辅助功能和资源。
可选的,所述接口代码文件,还包括:多个基于所述每一层目录的子接口。
可选的,所述每一层目录中的源文件,还包括:其他可扩展所述目录对应路由的文件。
可选的,所述描述信息,还包括:所述目录对应路由的路径,用于在特殊场景下自定义所述路由路径,使其可以与目录路径不一致;所述目录对应路由所需要使用的可变参数与配置信息;所述目录对应路由对其他路由的依赖关系。
可选的,所述可变参数与配置信息,还可以定义在全局的配置文件中,所述全局配置文件中的配置将覆盖所述模块中的可变参数与配置信息,使得系统维护人员不需要修改模块代码即可控制指定模块中的可变参数与配置信息。
可选的,所述对其他路由的依赖关系,所述其他路由将优先于所述对应路由加载,以达到控制路由加载顺序的目的。
可选的,所述全局配置文件,还可包括:全局接口路由统一的根路径。
可选的,所述每一层目录的路径,包括:所述全局接口路由统一的根路径;所述每一层目录自身从所述接口根目录起的全路径。
进一步,当所述描述信息中指定了所述目录对应路由的路径时,所述每一层目录的路径,将使用所述描述信息中所述目录对应路由的路径替换所述目录自身路径名称。
可选的,所述根据所述接口逻辑、所述描述信息及所述每一层目录的路径生成路由路径并关联所述接口逻辑和所述描述信息,包括:
读取所述全局配置文件中所述依赖关系,按所述依赖关系排序所有路由;
根据所述描述信息中的信息、所述全局接口路由统一的根路径、所述每一层目录自身从所述接口根目录起的完整路径,生成所述每一层目录的路由路径;
将所述接口逻辑以及所述子接口作为一个接口集合与所述路由路径相关联,使得对所述路由路径的调用依次转发至所述接口集合。
进一步,当需要添加新的产品功能模块时,接口开发人员只需要将包含有新的接口逻辑代码的源文件或目录添加到相应接口目录中即可。
进一步,当需要修改某个产品功能或修复某个产品功能的缺陷时,接口开发人员只需要调整相应接口目录中的代码即可。
进一步,当需要删除某个产品功能时,接口开发人员只需要删除相应接口目录即可。
本发明的另一有益效果是,当产品逻辑结构确定并根据所述产品逻辑结构划分接口目录结构后,接口开发人员不需要考虑路由路径的结构,同时不得不遵从所述接口目录结构进行接口开发和代码文件的存放,统一了产品逻辑结构、路由路径结构和代码目录结构,降低了各方的沟通成本,提高了代码的可维护性。
基于同样的发明构思,本发明实施例还提供了一种接口路由的生成装置,该装置包括:读取模块,用于递归读取接口目录中的代码源文件、描述文件以及其他文件;生成模块,用于根据所述代码源文件、描述文件、其他文件以及所述依赖关系生成路由;组装模块,用于根据所述依赖关系,将所述生成的路由依次对外暴露。
可选地,所述读取模块,包括:目录遍历子模块,用于递归读取指定目录中的所有的源文件;描述信息解析子模块,用于解析每个目录中描述文件中的内容,作为当前目录接口集合的描述信息;接口逻辑解析子模块,用于解析每个目录中接口定义源文件,并将其结果作为当前目录接口集合的接口子集;辅助资源解析子模块,用于解析每个目录中的辅助资源文件及其他文件,并将其结果作为辅助资源使用。
可选地,所述生成模块,包括:路由列表子模块,用于维护一个由所有可以被调用的路由组成的列表,以及每个路由对应的路由路径及接口列表;路径生成子模块,根据所述全局接口路由统一的根路径、所述指定目录所在目录树中的位置生成此目录对应接口集合的路由路径,每个子目录对应的路由路径由其父目录的路由路径附加所述子目录内描述文件指定的路由路径或子目录的目录名而成。
可选地,所述组装模块,包括:依赖控制子模块,用于根据所述依赖关系维护所述路由列表的加载顺序;调用管理子模块,用于管理所有外来的接口调用,并将每个接口调用分配到正确的接口列表。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例描述中所需要使用的附图作简单介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的接口路由生成方法的逻辑示意图;
图2是本发明实施例提供的接口路由生成方法中接口代码目录结构示意图;
图3是本发明实施例提供的接口路由生成方法的流程示意图;
图4是本发明实施例提供的接口路由生成装置的结构示意图;
图5是本发明实施例提供的接口路由生成方法的产品结构示意图;
图6是本发明实施例提供的接口路由生成方法的具体接口代码目录结构示意图;
图7是本发明实施例提供的接口路由生成方法生成的路由路径示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清晰,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的接口路由生成方法的逻辑示意图。该方法包括:
101:通过递归读取预定义的接口根目录获取每一层目录中的源文件;
102:解析所述源文件的内容以获取所述每一层目录对应的接口逻辑和描述信息;
103:根据所述接口逻辑、所述描述信息及所述每一层目录的路径生成路由路径并关联所述接口逻辑和所述描述信息;
104:对外暴露所述生成的路由。
图2是本发明实施例提供的接口路由生成方法中接口代码目录结构示意图。包括:
201,根目录,所有接口代码存放在其中或其子目录中;
205,子目录,根目录或任何其子目录中都可以有多个子目录;
202和206,描述文件,根目录或每个子目录都有描述文件;
203和207,接口文件,根目录或每个子目录都有接口文件;
204和208,辅助文件,根目录或每个子目录都有辅助文件。
进一步,根目录及每个子目录中,接口文件和辅助文件都可以有0个或多个。
基于图1给出的接口路由生成方法的逻辑示意图与图2给出的接口代码目录结构示意图,可以理解,图3是本发明实施例提供的接口路由生成方法的流程示意图,该方法包括:
301,判断系统是否按模块划分,所述模块是指系统功能的一个子集,通常每个模块都有自己的接口集合;
302,当系统按模块划分时,循环读取每个模块目录,并找到其中的模块接口根目录;
303,当系统未按模块划分时,读取接口根目录;
304,递归读取接口根目录中的每个子目录;
305,循环读取子目录中的源文件;
306,判断所读取的源文件是否为描述文件;
307,如果所读取的源文件不是描述文件,则进而判断其是否为接口定义文件;
308,如果所读取的源文件是描述文件,则导入接口集合描述信息至314,生成的当前接口集合路由;
309,如果所读取的源文件是接口文件,则进而判断其是否有接口定义;
310,如果所读取的源文件不是接口文件,则将其作为辅助文件使用;
311,如果所读取的源文件中有接口定义,则导入接口定义至当前接口集合;
312,如果所读取的源文件中没有接口定义,则将其作为辅助文件使用;
313,从全局配置中导入全局路由路径;
314,生成当前接口集合相应的路由;
315,判断是否已经完成所有子目录的处理,如果没有,则返回304继续执行;
316,如果已经处理完所有子目录的处理,则进而判断是否已经完成所有接口的加载,如果没有,则返回302继续执行;如果已经完成,结束处理工作。
其中,303需要说明的是,每个模块目录中,哪个目录作为模块接口根目录,以及系统级接口根目录,均可以通过全局的配置进行预设;而且在一个系统中,系统级的接口根目录与按模块划分的模块级接口根目录可以同时存在,其均可以遵循本实施例的实施方式生成接口路由。
其中,304,理以理解的是,接口根目录可以不存在,此时本实施例的方法最终将不会对外暴露任何接口,而本实施例的方法仍然可以顺利执行,这样处理的益处是,从系统开发的最初阶段即可以部署本实施例的方法,使得系统开发的迭代过程中任何新接口都可以自动得到生成并对外暴露;接口根目录或其任何子目录中都可以没有子目录。
其中,305,需要说明的是,所述子目录中的所有文件都将得到读取,包括任何未在本实施例中提到的类型的文件,这样处理的益处是,接口开发人员有足够的灵活性为其所开发的接口添加任何附加资源文件,而影响其他接口目录中的接口。q其中,306,具体的,描述文件中,包含:当前目录对应接口集合的显示名称;当前目录对应接口集合的说明信息;也可以包含其他本接口目录中接口所需要的其他信息。
其中,313,进一步,导入的全局路由路径将被附加在所有路由路径之前,作为每个路由的最终路径。
其中,314:
具体的,当前接口集合相应的路由的路径,由上述从全局配置中导入的全局路由路径、当前目录从接口根目录开始的完整路径组成;而当当前目录中的描述文件指定了其路由路径时,则当前接口集合相应的路由的路径,由上述从全局配置中导入的全局路由路径、当前目录中描述文件指定的路由路径组成;
可以理解的是,每个接口集合中都可以有多个接口定义,而这些接口集合为针对当前目录生成的接口集合与其中所有子目录生成的接口集合的合集;
需要说明的是,每个接口定义文件中,都可以定义多个接口处理逻辑,而每个接口处理逻辑可以指定其附加路由路径,此时的接口路由的路径由上述314中生成的路由路径、所述指定的其附加路由路径组成;而当某个接口指定的附加路由路径有多层级时,其与定义在与所述多层路由路径相对应的子目录中的接口都将被生成在同一个路由结构层级中,这在增加了路由路径结构、代码目录结构、产口逻辑结构的一致性的同时,保留开发的灵活性。
为了使本领域技术人员更加清楚地理解本申请中的技术方案,以下结合一个示意性的基本应用场景,提供具体的实施流程:
图5是本发明实施例提供的接口路由生成方法的产品结构示意图,在本实施流程中,产品a中包括:功能a1和功能a2;功能a1又包括子功能a11和子功能a12;功能a2又包括子功能a21和子功能a22。
图6是本发明实施例提供的接口路由生成方法的具体接口代码目录结构示意图,其目录结构根据图5所示产品a的功能逻辑划分,包括:根目录a;子目录a1,子目录a2;子目录a1又包括子目录a11和子目录a12;子目录a2又包括子目录a21和子目录a22。
图7是本发明实施例提供的接口路由生成方法生成的路由路径示意图,包括配置信息:全局路由根路径为api;全局路由根目录为目录a。
基于图5、图6及图7中的配置信息,接口路由生成过程包括:
根据配置信息,可知接口根目录为目录a,读取并导入目录a中的文件,包括:描述文件,接口定义文件,辅助文件;
读取目录a中的子目录a1,进而读取并导入目录a1中的文件,包括:描述文件,接口定义文件,辅助文件;
读取目录a1中的子目录a11,进而读取并导入目录a11中的文件,包括:描述文件,接口定义文件,辅助文件;
目录a11没有子目录,因此完成对目录a11中接口的导入,其路由路径为/a/a1/a11;
读取目录a1中的子目录a12,进而读取并导入目录a12中的文件,包括:描述文件,接口定义文件,辅助文件;
目录a12没有子目录,因此完成对目录a12中接口的导入,其路由路径为/a/a1/a12;
目录a1中没有其他子目录,因此完成对目录a1中接口的导入,其路由路径为/a/a1;
读取目录a中的子目录a2,进而读取并导入目录a2中的文件,包括:描述文件,接口定义文件,辅助文件;
读取目录a1中的子目录a21,进而读取并导入目录a21中的文件,包括:描述文件,接口定义文件,辅助文件;
目录a21没有子目录,因此完成对目录a21中接口的导入,其路由路径为/a/a2/a21;
读取目录a2中的子目录a22,进而读取并导入目录a22中的文件,包括:描述文件,接口定义文件,辅助文件;
目录a22没有子目录,因此完成对目录a22中接口的导入,其路由路径为/a/a2/a22;
目录a2中没有其他子目录,因此完成对目录a2中接口的导入,其路由路径为/a/a2;
目录a中没有其他子目录,因此完成对目录a中接口的导入,其路由路径为/a。
读取配置信息,得到全局路由根路径为api,因此所生成的路由路径包括:
/api/a;
/api/a/a1;
/api/a/a1/a11;
/api/a/a1/a12;
/api/a/a2;
/api/a/a2/a21;
/api/a/a2/a22。
需要说明的是,目录a22中的接口定义文件中,定义了另外两个指定了路由路径的接口,其指定的路由路径分别为:sub1和sub1/sub2,因此在导入目录a22对应的路由时,如图7所示,还同时生成了如下路由路径:
/api/a/a2/a22/sub1;
/api/a/a2/a22/sub1/sub2。
需要说明的是,上述两个接口路由定义在目录a22中的接口定义文件中,这和定义在目录a22的子目录a22/sub1以及子目录a22/sub1/sub2中的效果是一样的,因此,当因扩充此两个接口相对应的产品逻辑而需要将其独立放在单独目录时,只需要将此两个接口的定义按目录a22/sub1以及目录a22/sub1/sub2创建新的目录结构并保存源文件,并清除新的源文件中接口指定的路由路径即可,不需要修改任何其他代码。
进一步,当需要为产品a创建新的功能a3时,只需要开发a3相对应的接口并保存在目录a/a3中即可,开发人员不需要关心新的接口如何生成路由并对外暴露,也不需要修改任何已有代码。
可见,本实施例通过读取预设接口根目录中的源文件,自动生成接口路由,增加了系统的可扩展性,提高了开发效率;同时通过统一代码目录结构、路由路径结构、产品逻辑结构,可以有效提高各方对问题定位和理解的一致性,降低各方的沟通成本,减少混乱。
本发明实施例还提供了一种接口路由生成装置400,如图4所示,是本发明实施例提供的接口路由生成装置的结构示意图,包括:
401,读取模块,用于递归读取接口目录中的代码源文件、描述文件以及其他文件;
402,生成模块,用于根据所述代码源文件、描述文件、其他文件以及所述依赖关系生成路由;
403,组装模块,用于根据所述依赖关系,将所述生成的路由依次对外暴露。
作为优选的实施方式,读取模块,包括:
目录遍历子模块,用于递归读取指定目录中的所有的源文件;
描述信息解析子模块,用于解析每个目录中描述文件中的内容,作为当前目录接口集合的描述信息;
接口逻辑解析子模块,用于解析每个目录中接口定义源文件,并将其结果作为当前目录接口集合的接口子集;
辅助资源解析子模块,用于解析每个目录中的辅助资源文件及其他文件,并将其结果作为辅助资源使用。
作为优选的实施方式,生成模块,包括:
路由列表子模块,用于维护一个由所有可以被调用的路由组成的列表,以及每个路由对应的路由路径及接口列表;
路径生成子模块,根据所述全局接口路由统一的根路径、所述指定目录所在目录树中的位置生成此目录对应接口集合的路由路径,每个子目录对应的路由路径由其父目录的路由路径附加所述子目录内描述文件指定的路由路径或子目录的目录名而成。
作为优选的实施方式,组装模块,包括:
依赖控制子模块,用于根据所述依赖关系维护所述路由列表的加载顺序;
调用管理子模块,用于管理所有外来的接口调用,并将每个接口调用分配到正确的接口列表。
最后应说明的是:以上实施例仅用以说明本发明的实施例的技术方案,而非对其限制;尽管参照前述实施例对本发明的实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例记载的技术方案进行修改,或者对其中的部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例的技术方案的范围。
1.一种接口路由生成方法,其特征在于,所述方法包括:
通过递归读取预定义的接口根目录获取每一层目录中的源文件;
解析所述源文件的内容以获取所述每一层目录对应的接口逻辑和描述信息;
根据所述接口逻辑、所述描述信息及所述每一层目录的路径生成路由并关联所述接口逻辑和所述描述信息;
对外暴露生成的路由。
2.根据权利要求1所述的接口路由生成方法,其特征在于,所述接口根目录,包括:预定义的用于保存接口代码的根目录;预定义的每个模块中用于保存接口代码的根目录。
3.根据权利要求1所述的接口路由生成方法,其特征在于,所述每一层目录的结构与相应产品逻辑的结构所对应。
4.根据权利要求1所述的接口路由生成方法,其特征在于,所述每一层目录中的源文件,包括:描述文件,用于描述所述每一层目录对应路由的名称和说明信息;接口代码文件,用于定义所述每一层目录对应路由需要关联的接口逻辑;辅助文件,用于定义所述接口代码文件需要使用的辅助功能和资源。
5.根据权利要求1所述的接口路由生成方法,其特征在于,所述描述信息,包括:所述每一层目录对应路由的路径;所述每一层目录对应路由所需要使用的可变参数与配置信息;所述每一层目录对应路由对其他路由的依赖关系。
6.根据权利要求5所述的接口路由生成方法,其特征在于,所述可变参数与配置信息,还可以定义在全局配置文件中,全局配置文件中的配置将覆盖所述描述信息中的所述每一层目录对应路由所需要使用的可变参数与配置信息。
7.根据权利要求5所述的接口路由生成方法,其特征在于,所述对其他路由的依赖关系,所述其他路由将优先于所述每一层目录对应路由加载,以达到控制路由加载顺序的目的。
8.根据权利要求1所述的接口路由生成方法,其特征在于,所述每一层目录的路径,包括:预定义的全局接口路由统一的根路径;所述每一层目录自身从所述接口根目录起的完整路径。
9.根据权利要求1所述的接口路由生成方法,其特征在于,当所述描述信息中指定了所述每一层目录对应路由的路径时,将使用此路径替换所述每一层目录自身路径。
10.根据权利要求1所述的接口路由生成方法,其特征在于,所述根据所述接口逻辑、所述描述信息及所述每一层目录的路径生成路由并关联所述接口逻辑和所述描述信息,包括:
读取全局配置文件中所述生成的路由之间的依赖关系,按此依赖关系排序所有路由;
根据所述描述信息中的信息、所述预定义的接口根目录、所述每一层目录自身从所述接口根目录起的全路径,生成所述每一层目录的路由;
将所述接口逻辑与所述路由相关联,并将对所述路由的调用依次转发至所述接口逻辑。
11.一种接口路由的生成装置,其特征在于,该装置包括:
读取模块,用于递归读取接口目录中的代码源文件、描述文件以及其他文件;
生成模块,用于根据所读取的源文件生成路由;
组装模块,用于对外暴露生成的路由。
技术总结