Schema文档生成方法、装置、计算机设备和介质
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种Schema文档生成方法、装置、计算机设备和介质。
背景技术
应用程序(Application,APP)是指为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。各类APP在使用时都有各自的APP页面,每一个APP页面都对应一个地址链接,每个APP页面的地址链接称为APP页面的Schema。
APP主框架与APP页面之间的交互,一个APP页面与另一个APP页面之间的交互都通过Schema完成。对于一个大型的APP,不同的APP页面一般由不同的团队和开发人员开发,不同的开发人员通过Schema进行协作,另外,测试人员也需要通过Schema进行测试。为了使相关开发人员和测试人员紧密合作,需要维护一份Schema文档。一般情况下,Schema文档使用在线文档编译器手动进行编写和维护。
手动编写和维护文档一方面操作繁琐,另一方面,由于不同编写人员编写的Schema文档格式不同,因此,使用手动的方式编写和维护的schema文档格式混乱,另外,如果编写人员没有及时更新Schema文档则会导致文档更新延迟,上述种种问题均影响了Schema文档编写和维护的效率。
发明内容
本公开实施例至少提供一种Schema文档生成方法、装置、计算机设备和介质,用以提高Schema文档编写和维护的效率。
第一方面,本公开实施例提供了一种Schema文档生成方法,包括:
拉取接口描述语言IDL文件,所述IDL文件中包含有Schema描述信息,所述Schema描述信息包括Schema参数和附加信息;
根据所述IDL文件生成Schema描述信息。
在一种可能的实施方式中,在所述IDL文件的数据集类型中描述所述Schema参数;在所述IDL文件的注释中描述所述附加信息。
在一种可能的实施方式中,根据所述IDL文件生成Schema描述信息,包括:
利用解析器解析所述IDL文件得到抽象语法树AST;
遍历所述AST得到所述Schema参数;
利用正则表达式解析所述IDL文件的注释得到所述附加信息。
在一种可能的实施方式中,所述IDL文件包括Thrift文件和Protobuf文件,在所述Thrift文件中使用结构体struct类型描述所述Schema参数;在所述Protobuf文件中使用信息message描述所述Schema参数。
在一种可能的实施方式中,所述Schema描述信息为json格式的。
第二方面,本公开实施例提供了一种Schema文档生成方法,包括:
获取Schema描述信息,所述Schema描述信息为根据IDL文件生成的,所述Schema描述信息包括Schema参数和附加信息;
根据所述Schema描述信息生成Schema文档。
在一种可能的实施方式中,所述Schema描述信息为json格式的;以及
根据所述Schema描述信息生成Schema文档,具体包括:
根据json格式的Schema描述信息,生成超文本标记语言HTML格式的Schema文档。
第三方面,本公开实施例还提供一种Schema文档生成装置,包括:
拉取模块,用于拉取接口描述语言IDL文件,所述IDL文件中包含有Schema描述信息,所述Schema描述信息包括Schema参数和附加信息;
生成模块,用于根据所述IDL文件生成Schema描述信息。
在一种可能的实施方式中,在所述IDL文件的数据集类型中描述所述Schema参数;在所述IDL文件的注释中描述所述附加信息。
在一种可能的实施方式中,所述生成模块,具体用于利用解析器解析所述IDL文件得到抽象语法树AST;遍历所述AST得到所述Schema参数;利用正则表达式解析所述IDL文件的注释得到所述附加信息。
在一种可能的实施方式中,所述IDL文件包括Thrift文件和Protobuf文件,在所述Thrift文件中使用结构体struct类型描述所述Schema参数;在所述Protobuf文件中使用信息message描述所述Schema参数。
在一种可能的实施方式中,所述Schema描述信息为json格式的。
第四方面,本公开实施例还提供一种Schema文档生成装置,包括:
获取模块,用于获取Schema描述信息,所述Schema描述信息为根据IDL文件生成的,所述Schema描述信息包括Schema参数和附加信息;
生成模块,用于根据所述Schema描述信息生成Schema文档。
在一种可能的实施方式中,所述Schema描述信息为json格式的;以及
所述生成模块,具体用于根据json格式的Schema描述信息,生成超文本标记语言HTML格式的Schema文档。
第五方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面或第二方面中任一种可能的实施方式中的步骤。
第六方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面或第二方面中任一种可能的实施方式中的步骤。
关于上述Schema文档生成方法、装置、计算机设备和计算机可读存储介质的效果描述参见上述Schema文档生成方法的说明,这里不再赘述。
本公开实施例提供的Schema文档生成的方法、装置、计算机设备和介质,通过IDL文件描述Schema参数和附加信息,在需要使用Schema文档时,通过获取IDL文件描述的Schema描述信息并解析生成Schema文档的方式,与现有技术中的使用在线文档编译器手动对Schema文档进行编写和维护相比,基于IDL文件生成的Schema文档格式统一,而且提高了Schema文档编写和维护的灵活性和效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例提供的服务端实施的Schema文档生成方法的流程图;
图2示出了本公开实施例提供的客户端实施的Schema文档生成方法的流程图;
图3示出了本公开实施例提供的git远程服务器、服务端和客户端之间的交互流程图;
图4示出了本公开实施例提供的应用于服务端的Schema文档生成装置的示意图;
图5示出了本公开实施例提供的应用于客户端的Schema文档生成装置的示意图;
图6示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,对于APP页面的开发需要Schema文档协作完成,在对APP进行测试时,需要维护一份共同的Schema文档,目前的维护方式中,一般都是使用在线文档编译器手动对Schema文档进行维护,但是手动编写和维护文档一方面操作繁琐,另一方面,由于不同编写人员编写的Schema文档格式不同,因此,使用手动的方式编写和维护的schema文档格式混乱,另外,如果编写人员没有及时更新Schema文档则会导致文档更新延迟,上述种种问题均影响了Schema文档编写和维护的效率。
基于上述研究,本公开提供了一种Schema文档生成方法、装置、计算机设备和介质,通过IDL文件描述Schema文档的Schema参数和附加信息,在需要使用Schema文档中,基于IDL文件生成Schema文档,此方法生成的Schema文档格式统一,大大提高了Schema文档编写和维护的效率。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种Schema文档生成方法进行详细介绍,本公开实施例所提供的Schema文档生成方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户终端、终端、便携设备、计算设备等。在一些可能的实现方式中,该Schema文档生成方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
IDL(接口描述语言)是一种用来描述接口的语言。IDL与编程语言无关,通过一定的映射关系可以转化成各种编程语言。由于IDL语义清晰,结构简单,也可以用来描述其他数据类型。本公开实施例中,为了简化Schema文档编写和维护的操作,提高Schema文档编写和维护效率,采用IDL文件来描述Schema参数及附加信息。
目前流行和成熟的IDL有Thrift和Protobuf两种,他们都有用来描述数据集的类型;在所述Thrift文件中使用结构体struct类型描述所述Schema参数;在所述Protobuf文件中使用信息message描述所述Schema参数。一个struct或message包含若干个字段,一个字段包含字段编号、字段类型和字段名称。一个Schema主要包括Schema前缀和Schema参数。一个Schema的所有参数就是一个数据集,可以用struct和message来描述。Schema文档的附加信息包括Schema说明、Schema前缀、参数说明、IOS版本、Android版本和维护者信息,无法使用IDL的类型进行描述,根据本公开实施例,可以采用注释的方式描述Schema附加信息。
在一个实施例中,附加信息可以使用键/值对的方式表示。其中,对于附加信息的表示中,键可以为附加信息的标志符,值可以为附加信息的具体值。具体实施时,为了便于解析,可以采用统一的格式‘@key value’表示。例如,@iosVersion 7.0.5,表示生效的IOS应用版本为7.0.5。
基于上述描述,可以使用Thrift的struct类型或者Protobuf的message类型定义schema,一个schema对应一个struct或message,schema中的一个参数对应struct或message中的一个字段;在注释中以@key value的格式描述附加信息,包括schema说明,schema前缀、参数说明、IOS版本、Android版本和维护者。使用IDL描述Schema参数和附加信息的示例如下:
用IDL描述schema示例:
上述示例用struct描述了一个Schema。这是一个发布器页面的Schema,前缀为sslocal://publish。包含一个参数,参数名为category_id,表示分类id,生效的IOS应用版本为7.0.5,生效的Android应用版本为7.0.8,页面的维护者为lance。符合描述的schema示例,sslocal://publish?category_id=2。
git是一个开源的分布式版本控制系统,可以高效地处理项目的版本管理。git包括远程仓库系统和本地开发工具两部分。git提供了本地命令行工具,使用git命令行工具可以很方便地和git远程服务器进行交互。例如,开发者可以通过git命令把本地开发的文件推送到远程仓库,其他开发者可以从远程仓库拉取推送的最新文件。因此,具体实施时,可以利用git仓库来管理IDL文件,在需要使用Schema文档时,可以通过从git仓库拉取IDL文件来生成Schema文档。
完成IDL文件后,调用git命令推送IDL文件到git远程仓库即可,后续无论其他开发人员还是测试人员需要使用Schema文档时,可以从git仓库拉取IDL文件来生成Schema文档。
以下结合基于IDL文件生成Schema文档的流程对本公开实施例进行说明,具体实施中,可以由服务端和客户端的配合生成Schema文档,其中,服务端从git远程仓库拉取IDL文件并解析得到Schema描述信息,客户端从服务端获取Schema描述信息并生成Schema文档。即服务端用于解析IDL文件,客户端用于生成并展示Schema文档。
如图1所示,为本公开实施例提供的服务端实施的Schema文档生成方法的流程图,包括以下步骤:
S101:拉取IDL文件。
具体实施时,在需要使用Schema文档时,用户可以通过客户端向服务端提交IDL文件拉取请求,服务器端在接收到IDL文件拉取请求时,响应于此IDL文件拉取请求,从git远程仓库中拉取IDL文件。其中,拉取的IDL文件中包含有Schema描述信息,Schema描述信息包括Schema参数和附加信息。
S102:根据拉取的IDL文件生成Schema描述信息。
本步骤中,在服务器端从git远程仓库拉取IDL文件之后,利用AST解析器对IDL文件进行解析得到AST(抽象语法树)。遍历AST可以得到Schema参数。
上述过程中,利用AST解析器对IDL文件进行解析可以获得Schema参数。而对于IDL文件的注释中描述的Schema附加信息,由于AST解析器不会解析注释里面的@key value结构。具体实施时,为了获得附加信息,根据本公开实施例,可以使用正则表达式来解析注释获得附加信息,在一个实施例中,可以使用的正则表达式为/^s*@([a-zA]+)\s+(.*)。例如,可以利用正则表达式对@iosVersion 7.0.5进行匹配解析,得到对应的Schema附加信息。
通过图1所示的流程,通过遍历AST并利用正则表达式解析注释,可以得到json格式的Schema描述信息。json格式的schema文档信息示例如下:
在客户端可以按照图2所示的流程生成Schema文档:
S201:获取Schema描述信息。
本步骤中,客户端可以采用以下任一方式获取Schema描述信息:
第一种方式,客户端通过git命令从git远程仓库中获取带有Schema参数和附加信息的IDL文件并解析得到Schema描述信息。
其中,客户端解析IDL文件获得Schema描述信息的流程与上述服务端解析并得到Schema描述信息的流程相同,其具体实施可以参照图1所示的流程,这里不再赘述。
第二种方式,客户端从服务端获取Schema描述信息。
具体实施时,客户端可以通过请求服务端的指定接口获得服务器解析得到的Schema描述信息。
S202:生成HTML格式的Schema文档。
以客户端获得的Schema描述信息为json格式为例,客户端根据获得的json格式的Schema描述信息,生成HTML格式的Schema文档。其中,生成的HTML格式的Schema文档示例如下:
-----------------------------------
|发布器Schema|sslocal://publish|
-----------------------------------
|参数列表|
---------------------------------------------------------------
|参数名称|类型|描述|ios版本|android版本|维护者|
---------------------------------------------------------------
|category_id|string|分类id|7.0.5|7.0.8|lance|
---------------------------------------------------------------
由于json格式的Schema描述信息的结构是通用的,根据Schema文档信息生成HTML格式文档的逻辑也是通用的,因此,生成的HTML格式文档的整体结构也是统一的。
为了更好地理解本公开实施例,以下结合git远程服务器、服务端和客户端之间的交互流程,对本公开实施例的实施过程进行说明,如图3所示,可以包括以下步骤:
S301、服务端接收客户端提交的Schema文档生成指令。
具体实施时,开发人员或者测试人员需要使用Schema文档时,可以通过客户端向服务端提交Schema文档生成指令。
S302、服务端向git远程服务器发送IDL文件拉取指令。
具体实施时,服务端可以通过git命令从远程服务器拉取IDL文件。在git命令中可以包含有所拉取的IDL文件对应的文件标识。
S303、服务端接收git远程服务器发送的IDL文件。
git远程服务器根据接收到的git命令中包含的文件标识查找相应的IDL文件,并发送给服务端。
S304、服务端解析接收到的IDL文件获得Schema描述信息。
本步骤中,服务端使用AST解析器解析IDL文件获得Schema参数,使用正则表达式解析IDL文件的注释文本得到Schema附加信息。
S305、服务端向客户端发送Schema描述信息。
S306、客户端根据接收到的Schema描述信息生成Schema文档。
根据本公开实施例提供的Schema文档生成方法,采用IDL文件来描述Schema参数及其附加信息,并通过git远程仓库进行管理,这样,在需要使用Schema文档时,根据从git远程仓库拉取包含Schema描述信息的IDL文件,通过解析IDL文件可以获得Schema描述信息,根据获得的Schema描述信息生成统一格式的Schema文档,相比于在线编辑Schema文档,简化了Schema文档编写和维护操作流程,提高了Schema文档编写和维护效率。
上述实施例中,以服务端拉取IDL文件并解析得到Schema描述为例进行说明,具体实施时,还可以由客户端从git远程服务器拉取IDL文件并解析得到Schema描述信息。
如图4所示,其为本公开实施例提供的应用于服务端的Schema文档生成装置示意图,包括:
拉取模块401,用于拉取接口描述语言IDL文件,所述IDL文件中包含有Schema参数和附加信息;
生成模块402,用于根据所述IDL文件生成Schema描述信息,所述Schema描述信息包括所述Schema参数和所述附加信息。
一种可能的实施方式中,在所述IDL文件的数据集类型中描述所述Schema参数;在所述IDL文件的注释中描述所述附加信息。
一种可能的实施方式中,所述生成模块,具体用于利用解析器解析所述IDL文件得到抽象语法树AST;遍历所述AST得到所述Schema参数;利用正则表达式解析所述IDL文件的注释得到所述附加信息。
一种可能的实施方式中,所述IDL文件包括Thrift文件和Protobuf文件,在所述Thrift文件中使用结构体struct类型描述所述Schema参数;在所述Protobuf文件中使用信息message描述所述Schema参数。
一种可能的实施方式中,所述Schema描述信息为json格式的。
如图5所示,其为本公开实施例提供的应用于客户端的Schema文档生成装置示意图,包括:
获取模块501,用于获取Schema描述信息,所述Schema描述信息为根据IDL文件生成的,所述IDL文件中包含有Schema参数和附加信息;
生成模块502,用于根据所述Schema描述信息生成Schema文档。
一种可能的实施方式中,所述Schema描述信息为json格式的;以及
所述生成模块,具体用于根据json格式的Schema描述信息,生成超文本标记语言HTML格式的Schema文档。
本公开实施例提供了一种Schema文档生成系统,包括服务器端和客户端,服务器端中设置有如图4所述的装置,客户端中设置有如图5所述的装置。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例还提供了一种计算机设备,如图6所示,为本公开实施例提供的计算机设备结构示意图,包括:
处理器61和存储器62;所述存储器62存储有处理器61可执行的机器可读指令,处理器61用于执行存储器62中存储的机器可读指令,所述机器可读指令被处理器61执行时,处理器61执行下述步骤:步骤S101:拉取IDL文件;以及步骤S102:根据拉取的IDL文件生成Schema描述信息或步骤S201:获取Schema描述信息;以及步骤S202:生成HTML格式的Schema文档。
上述存储器62包括内存621和外部存储器622;这里的内存621也称内存储器,用于暂时存放处理器61中的运算数据,以及与硬盘等外部存储器622交换的数据,处理器61通过内存621与外部存储器622进行数据交换。
上述指令的具体执行过程可以参考本公开实施例中所述的Schema文档生成方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的Schema文档生成方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的Schema文档生成方法方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的Schema文档生成方法方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。