基于Swagger动态生成范本文件的方法、装置及应用
文献发布时间:2023-06-19 16:09:34
技术领域
本申请涉及大数据挖掘领域,特别是涉及基于Swagger动态生成范本文件的方法、装置及应用。
背景技术
随着web开发前后端分离,各个工种更加细化,web开发的流程为:后端开发好符合restfull类型的api,同时提供相应的对接文档,定义好api接口的入参类型,中文释义,是否必填,以及返回数据的格式,内容,以及中文释义,继而提供给前端开发人员,而前端开发人员会读取这份文档,编写为适用于前端开发的Typescript文件,同时定义好符合Typescript规范的对应函数的入参以及出参,就能够有效地约束前端开发人员按照文档提供的参数类型传递参数和解析参数。后端人员往往使用Swagger生成对接文档,Swagger能够提供web版的文档,也能够下载对应的doc文件进行查看。前端开发可以有效地使用这份文档编写Typescript文件。
然而软件开发的需求通常在不断变更,为应对如此多的变更,后端开发需要对restfull接口进行不断地修改和变更,借用Swagger的文档系统,后端开发能迅速发布新的文档,前端开发人员则需要实时关注后端对restfull接口的调整,虽然Swagger提供的文档系统能够有效地提示哪些接口经历过变更,以及主要变更在哪里,但由于软件开发往往要求迭代速度快速,前端开发可能忽视于更新Typescript文件。在项目开发过程中,一旦项目开发周期拖长或者软件开发人员出现变动,导致最终没人能够熟悉各个API接口对接方式或变动,使得后端开发人员需要重新阅读源码才能辨别API接口是哪部分在改动或重构,这样致使API对接过程中错误率升高,后端开发人员极大可能选择重构,前端开发人员也需要重复校验Typescript文件和Swagger文档的差异,否则会出现字段缺失,字段类型错误,或者接口完全替换等情况,影响项目开发进度。
而对于前端开发,由于不同开发人员使用的编辑器不同,亦或者是使用的插件不同,所以在代码保存时,可能会进行相应的格式化,那么在多人开发的过程中,开发人员A可能使用Eslint规范的格式插件进行代码格式化,开发人员B可能使用prettier。如果开发人员A和B都将修改Typescript文件并且上传至代码管理仓库,就会因为格式差异产生多条仅修改格式的记录,但实质上,并无达成任何有意义的修改,一方面使得开发人员在bug回溯时不能快速定位问题文件,一方面使开发人员在代码的review过程中忽略项目中关键的代码。如果想要解决这个问题,就需要使用统一的代码格式化工具对代码进行格式化,使得不同的编辑器或插件都能输出相同的Typescript文件,不会触发编辑器的语法错误检查。同时也能保证一定的代码美观度,便于开发者查看。
因此,迫切需要一种能依据生成的web文档解析为相应的Typescript文件的工具或方法,同时能够通过统一的格式化方式规范这部分文件的输出格式,防止代码上传至代码仓库时发生混乱和错误。
发明内容
本申请实施例提供了一种基于Swagger动态生成规范文件的方法、装置及应用,有效地解决了背景技术中提到的问题,方便了java后端与web前端开发的接口对接。
第一方面,本申请实施例提供了一种基于Swagger动态生成规范文件的方法,包括以下步骤:
调取swagger提供的api接口以获取webjson格式的文档数据,将所述文档数据转换为json数据格式的数据源;
基于所述数据源对应的api接口的分类名称生成对应的接口定义;
基于所述接口定义生成Typescript文件;
将所述Typescript文件格式化为规范文件,其中所述规范文件符合eslint规范以及prettier美化规范。
第二方面,本申请实施例提供了一种基于Swagger动态生成规范文件的装置,包括:
数据抓取模块,用于调取swagger提供的api接口以获取webjson格式的文档数据,将所述文档数据转换为json数据格式的数据源;
接口动态模板生成模块,用于基于所述数据源对应的api接口的分类名称生成对应的接口定义;
Typescript文件生成模块,用于基于所述接口定义生成Typescript文件;
文件格式化模块,用于将所述Typescript文件格式化为规范文件,其中所述规范文件符合eslint规范以及prettier美化规范。
第三方面,本申请实施例提供一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述的基于Swagger动态生成规范文件的方法。
第四方面,本申请实施例提供一种计算机程序产品,包括软件代码部分,当所述计算机程序产品在计算机上被运行时,所述软件代码部分用于执行所述的基于Swagger动态生成规范文件的方法。
第五方面,本申请实施例提供一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括所述的基于Swagger动态生成规范文件的方法。
本发明的主要贡献和创新点如下:
本方案提供的种基于Swagger动态生成规范文件的方法,实现了后端开发人员在开发完restfull格式的api接口后,前端开发人员可以通过此工具即时生成Typescript文件,生成文件后,前端开发人员能及时调整编写的代码中类型的不正确或参数丢失引起的项目运行错误。并且一般只需要定义Swagger的文档地址即可运行,减少前端开发人员编写Typescript文件消耗的时间,后端开发人员不需要告知前端开发人员哪些api接口发生过修改,前端人员也无需对照原来自己编写的Typescript文件和新的Swagger文档逐一确认修改,大大节省了前后端开发人员在接口参数对接时所消耗的无用时间。
由于本工具会动态生成interface接口,前端人员在进行软件开发时,在编辑器中会有智能提示,提示该数组有哪些字段构成,哪些是必填项,哪些是非必填项,同时如果有不符合定义参数的字段,也会使项目无法正常运行,在项目运行的控制台中输出实际是代码的哪一处发生的字段类型错误,约束开发人员进行高质量的代码开发。该功能是通过VsCode编辑器自带的语义及词法分析能力完成的。
另外,生成的API接口根据分类名称进行分类,分别放置于以分类名称命名的文件夹内,在代码提交时,能显著区分哪些是属于接口变更导致的提交,哪些是文件格式化导致的提交。对于前后端开发人员来说,命名接口名称往往比较繁琐,并且可能会遇到相同类型类似功能的api接口需要命名,无法有效区分对应接口,使用本工具只需要后端开发人员定义一套命名,则能自动生成前端的接口命名,相同名称自动隔离。降低了开发人员起名称的心智负担。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是传统修改Typescript文件的流程示意说明;
图2是本方案修改Typescript文件的示意说明;
图3是根据本申请一种实施例的基于Swagger动态生成规范文件的方法的流程图;
图4是根据本申请实施例的基于Swagger动态生成规范文件的方法装置的结构框图;
图5是根据本申请实施例的电子装置的硬件结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
在介绍本方案之前,首先对本方案可能涉及的几个名词进行解释说明:
Prettier是一种用来格式化javascript代码的插件,支持包括ES2017,JSX,Flow,Typescript,CSS,LESS,和SCSS。
TypeScript是JavaScript的一个超集,支持ECMAScript 6标准,TypeScript设计目标是开发大型应用,它可以编译成纯JavaScript,编译出来的JavaScript可以运行在任何浏览器上。并且能在编译时校验对应参数的合法性,有效地约束开发人员在多人协作时书写代码的规范性。
Interface是Typescript的接口,用于约束变量的类型,名称与需要验证的变量一一对应,它不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以,可复用。配合eslint能校验变量类型是否合法,约束开发人员编写类型正确的代码,在代码编译运行之前提示错误并修复。
引用类型是JavaScript中的一类数据类型,如Object、Array、Function、Date等,是javascript保存在堆内存中的对象。引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。非引用类型是按值访问的,可以直接操作保存在变量中的实际值。
实施例一
如图3所示,本申请旨在提出一种基于Swagger动态生成规范文件的方法,包括以下步骤:
调取swagger提供的api接口以获取webjson格式的web数据,将所述web数据转换为json数据格式的数据源;
基于所述数据源对应的api接口的分类名称生成对应的接口定义;
基于所述接口定义生成Typescript文件;
将所述Typescript文件格式化为规范文件,其中所述规范文件符合eslint规范以及prettier美化规范。
值得一提的是,本方案提供了一种基于Swagger动态生成规范文件的工具或方法,以方便java后端和web前端开发的接口对接。对应的,该基于Swagger动态生成规范文件的工具包括:用于抓取数据源的数据抓取模块、用于生成接口定义的接口动态模板生成模块,用于生成Typescript文件的Typescript文件生成模块;以及用于格式化Typescript文件的文件格式化模块,其中每个模块对应的功能对应其上所述。
另外,在数据抓取模块调取文档数据之前,获取后端开发人员提供的Swagger的文档访问地址,导入文档访问地址的参数以调取swagger提供的api接口。示例性,文档访问地址可以是hostname:port/doc.html,那么数据抓取模块在运行时需要导入的起始参数是hostname:port。
值得说明是,本方案的基于Swagger动态生成规范文件的方法提供两种模式生成Typescript文件:简化版模式以及常规版模式。简化版模式下生成的Typescript文件体积小,接口响应类型字段统一输出为any,请求类型字段仅输出简单类型,如string,number等,此时传入的simple变量可以设置为true,如果是true,则不具体解析接口参数的类型,直接导出为一个params变量,类型为any,即javascript中的任意类型。
本方案的数据抓取模块在调取文档数据中使用了node.js的http模块,通过请求Swagger所提供的api接口,获取到utf-8格式的web数据,同时将web数据转换为javascript方便处理的json数据格式的数据源。
http模块是node中的核心成员之一,是客户端与服务端交互的基础,http模块通常能以极简的方式构建一个服务,也能发起一个请求。
对应的,在“调取swagger提供的api接口以获取webjson格式的web数据”步骤中,使用node.js的http模块调取Swagger提供的restfull的api接口,获取webjson格式的web数据。
在“使用node.js的http模块调取Swagger提供的restfull的api接口”步骤中,http模块调用Swagger的文档访问地址获取文档数据,并基于所述文档数据获取swagger预先分好的组,继而通过获取文档数据分组后每组json数据的url地址,进而获取到对应组的详细地址,再调用具体分类名称所在的地址,能够获取每组下的同一分类名称的restfull的api接口。
其中Swagger内部将不同用途的接口预先分为不同的组,在获取了接口后即可获取到对应组的api-docs详细地址,api-docs详细地址包含当前组的详细描述信息的详细地址。
在“将所述web数据转换为json数据格式的数据源”步骤中,通过javascript的JSON.parse函数,将web数据通过序列化转换为javascript能识别的json对象,也就是说,所述数据源以json对象的形式保存至内存中。
接口动态模板生成模块通过解析json数据格式的数据源的paths字段,将Swagger全局所有的api接口收录并生成字典,并且通过判断所述api接口所属的key来确定api接口的请求类型。同时会根据api接口的分类名称将api接口划分到对应的类别中,如果该api接口无分类名称的相关字段,就会并入全局的共用api接口。
对应的,在“基于所述数据源的组名称生成对应的接口定义”步骤中,将所述数据源对应的具有相同分类名称的api接口分为同一类,解析所述数据源确定每一api接口的请求类型,并基于所述请求类型获取入参,基于所述入参生成接口定义。所述分类名称在sawgger的文档数据中的tags字段中保存。
在“将所述数据源对应的具有相同分类名称的api接口分为同一类”步骤中,若所述数据源对应的api接口没有分类名称,则将所述数据源并入全局共用api接口内。且关于api接口的分类信息被存储在内存中。
一般来说,通常restfull类型的接口比较常见的有get和post的请求:针对post请求,如果在请求参数中有通过地址栏query传递参数的,接口动态模板生成模块会先过滤出来,并且追加到post请求入参中。如果是post请求,则过滤含有body字段的参数,作为入参生成入参模板。
对应的,在“确定每一api接口的请求类型获取入参,并基于所述请求类型获取入参”步骤中,api接口的请求类型为get请求或post请求,根据所述数据源的method字段中包含的类型判断请求类型为get或post请求,如果是get请求,则过滤含有query字段的参数,作为入参生成为入参模板;如果是post请求,则过滤含有body字段的参数,作为入参生成入参模板。在一些实施例中,将请求类型拼接在接口定义名称后,有效地从名称上区分请求类型,最后作为接口定义输出。
在对每一api接口的请求类型确认并得到入参之后,还需对入参进行判断,在“基于所述入参生成接口定义”步骤中,判断所述入参是否为多个,若入参为多个,则表示请求类型为数组,此时循环遍历所述数组,通过比对definitions中的字段,获取到对应的数据传输对象,定义一个缓存数组,将已经获取过的数据传输对象缓存至内存中,第二次访问时使用内存中缓存的数据,同时标注已使用的数据传输对象;当遍历完毕或者入参仅为一个时,根据预定义的类型转换函数将所述数据源的swagger类型转换为typescript可识别的类型,通过比对definitions中的字段,获取到对应的数据传输对象,基于所述数据传输对象生成接口定义。
所述数据传输对象的获取:类似Typescript中的interface字段,数据传输对象对类型的定义有string\integer\int\long\Array\file\boolean\,对应着Typescript中的string\number\number\string\array\blob\boolean\字段,如果字段是javascript中的普通类型,如string,number,blob,boolean字段,直接依据预定义的类型转换函数将字段转换为Typescript识别的类型几种非引用类型。如果字段是Array类型或Object类型,则首先定义为泛型,在全局缓存数据中检索泛型下各接口定义,应用在泛型的接口定义中,然后经过再次遍历判断入参是否为多个的步骤,直至泛型的所有接口定义都被查找出来。
如果是层级较深的类似树状的数据结构,会在循环中不断将接口定义查找出来,示例性的;若对于某一个包含子类a的对象A,此时的表达为A.a,在这种情况下需要遍历循环找到A,才能找到A,a的定义;对于Object类型可能存在的无限引用问题,判断同一个接口中泛型具体类型的遍历次数,避免了其被多次引用,在本方案中通过计数器来判断遍历次数,若遍历次数大于1则判断为多次引用。
接口动态模板生成模块内置模板字符串以生成对应请求类型的interface字符串。具体的,本方案解析所述数据源的url字段,对类似{id}传入地址栏的参数进行标识,转换为${id},生成javascript能够识别的模板字符串中变量所能解析的格式。
上述生成的interface类型的数据传输对象最终会生成一个接口定义,本方案将多次出现的接口定义提升为全局接口,对全局接口统一定义一个Deepcommon的字符串并将其放置在临时数组中,用来标注它是全局接口。保存至后面生成Typescript文件时使用。接口定义是Typescript中的Interface,是对行为的抽象,体现为具体的类。本方案将数据传输对象转换为接口定义。
将生成的接口定义输出拼接为一个字符串,其中在字符串头部信息中添加接口名称,同时添加接口注释以及公共包。通常在项目开发中会封装request函数用于请求,这里导入request函数,也可针对项目进行自定义,如导入axios或者vue-resource等javascript封装的http请求库,本实施例的最佳实践推荐使用项目中统一封装的requeset函数,后期能够统一修改,统一添加请求拦截器或响应拦截器。
后端开发人员在定义接口名称时,可能比较随意,造成不同的接口定义相同的接口名称,前端开发人员在使用时需要转换为不同的名称,前端的表达可能偏离API接口实际用途,根据接口title统一生成名称,如遇到相同的名称,在名称后添加operationId用以区分,有效地解决接口名称需要重复定义的问题。示例性的:获取用户名后端命名为userInfo,但前端api命名可能为getinfo偏离实际,故拼接为GET_userInfo,有效表达接口用途和请求类型。
也就是说,为了避免出现接口名称不一致带来的问题,本方案的api接口根据接口title统一生成接口名称,若至少两api接口的名称一致的话,则在每一api接口的接口名称后添加operationId。
在使用Swagger生成接口注释时,后端可能会输入诸如*/等文本,但在javascript中,单一的*/文本会被转换为注释文字,如果缺少/*字符,会引发文本校验错误的问题,利用接口动态模板生成模块,通过正则全量将*/的文本转换为空,解决了生成的注释文本可能报错的问题。也就是说,本方案的接口动态模板生成模块将接口注释后的*/的文本转换为空。
本方案的Typescript文件生成模块将上述生成的分类过的接口定义对应api接口通过node的fs模块,生成为后缀名为ts的Typescript文件。通过fs模块的mkdirSync和existsSync函数,根据api接口的分类名称创建不同的文件夹,如果存在则不创建。按照分类名称生成文件夹能让开发者直观地看到不同类型的接口处于哪个文件夹。
也就是说,在“基于所述接口定义生成Typescript文件”步骤中,使用node的fs模块将所述接口定义生成后缀名为ts的Typescript文件,且将具有相同分类名称的接口定义生成的Typescript文件置于同一文件夹中。且所述文件夹以分类名称进行命名。
具体的,利用生成的接口定义字符串,同时将之前生成的Deepcommon公共接口缓存的数组通过遍历后,注入字符串的最前面,对于使用simple变量标注为简易生成Typescript文件的执行流程(对于simple变量设置为true的,执行简易生成Typescript文件的执行流程),只保留接口的中文注释字段。接着调用node的fs模块中的writeFileSync函数,生成对应的ts后缀的文件。根据大类创建文件夹,小类别的不同文件写入文件夹内。
本方案的文件格式化模块,通过调用npm中的prettier模块,将Typescript文件的代码按格式化规则修改为符合美观的代码,并且输出为在不同编辑器中都能正常运行不报错的Typescript文件。使用node中的模块,可以保证在不同操作系统平台或不同集成开发环境中输出相同的内容。prettier模块需要通过node调用,本工具使用npx模块去调用,相比较于传统的node调用方式,在系统未安装prettier时,会创建一个临时仓库安装prettier模块,不会污染当前项目的依赖环境,同时能指定node版本、命令的版本,解决了不同项目使用不同版本的命令的问题。也解决了不同开发人员不断重复修改Typescript文件导致的格式化提交远程仓库次数过多的问题。
也就是说,在“将所述Typescript文件格式化为规范文件”步骤中,使用调用npm中的prettier模块将所述Typescript文件格式化为规范文件。
对于Typescript文件,它本身属于javascript语言。prettier能配合eslint使用,eslint是一个用来识别ECMAScript/JavaScript并且按照规则给出报告的代码检测工具,代码检查是一种静态的分析,常用语寻找有问题的模式或者代码,并且不依赖于具体的编码风格。对大多数编程语言来说都会有代码检查,一般来说编译程序会内置检查工具。JavaScript是一个动态的弱类型语言,在开发中比较容易出错。因为没有编译程序,为了寻找JavaScript代码错误通常需要在执行过程中不断调试。ESLint这样的工具可以让程序员在编码的过程中发现问题,而不是在执行的过程中发现问题。利用eslint的规则加上包含具体编码风格的prettier工具,运行后,能够生成符合规范且容易读取的Typescript文件。本工具需要调用prettier格式化文件。通常会使用npm或yarn。在使用前,这些工具需要提前下载prettier模块至全局目录或当前项目的node_modules文件夹中。再调用prettier指令。优选地,使用npx模块调用prettier指令,能够指定node版本,命令的版本,解决了不同命令使用不同版本的命令的问题,自动加载node_modules中依赖包,不需要指定$PATH,也就是模块对应的目录,可以执行依赖包中的命令,安装完成自动运行,安装时也只是临时安装可执行依赖包,不安装至全局目录,节省了程序所占存储空间,长期使用后不会和已有的依赖包冲突。
本方案提供的基于Swagger动态生成规范文件的方法及工具经过Node.js脚本运行后为用户自动生成Typescript文件,定义了包括数组,字符串,数字,文件,布尔,对象等类型的入参,对于非引用类型,直接以原始类型标识,同时针对数组和对象,能够同步递归查找对应数组及对象的属性名称以及属性类型,对于生成的Typescript文件进行格式化,以适应不同的编辑器或插件。
为了说明本方案的基于Swagger动态生成规范文件的方法及工具和传统人为修改Typescript文件的区别,以下示例进行说明。如图1所示,图1是传统人为修改Typescript文件的过程:
同一个项目当中,开发人员A使用eslint格式化Typescript文件,开发人员A将经过格式化后的文件变更到git或svn的远程代码仓库,此时,a.ts,b.ts,c.ts,d.ts等经过格式化的变更记录会提交至远端。开发人员B使用prettier格式化Typescript文件,经过格式化的Typescript文件修改了部分样式文件g.css,此时,同样地,a.ts,b.ts,c.ts,d.ts等经过格式化的变更记录会提交至远端,不同的是g.css的修改也会提交至远端。这样的方式造成了开发人员可能无法有效识别g.css已经更改以及其他的非格式化更改,故亟需一种无需担忧文件格式化引起的提交记录混乱的工具。
而图2是本方案的基于Swagger动态生成规范文件的方法的过程:使用本方案的基于Swagger动态生成规范文件的方法生成规范文件,此时远程代码仓库的变更记录会以接口的分类名称作为区分,能快速而有效地辨别哪些是格式化提交,哪些为实际的代码更改,极大地提高开发人员对bug回溯时的效率。
值得一提的是,本方案的基于Swagger动态生成规范文件侵入性较小,且仅须配置swagger的文件访问地址,而且使用的依赖较少,仅使用node中的fs,path,http模块。且本方案在调用后会运行prettier进行代码格式化,生成的文件符合项目的提交规范,可直接入库。
实施例二
基于相同的构思,参考图4,本申请还提出了一种基于Swagger动态生成规范文件的装置,包括:
数据抓取模块301,用于调取swagger提供的api接口以获取webjson格式的文档数据,将所述文档数据转换为json数据格式的数据源;
接口动态模板生成模块302,用于基于所述数据源对应的api接口的分类名称生成对应的接口定义;
Typescript文件生成模块303,用于基于所述接口定义生成Typescript文件;
文件格式化模块304,用于将所述Typescript文件格式化为规范文件,其中所述规范文件符合eslint规范以及prettier美化规范。
关于该实施例二中提及的技术内容同于实施例一的技术内容介绍,关于累赘部分不进行累赘说明。
实施例三
本实施例还提供了一种电子装置,参考图5,包括存储器404和处理器402,该存储器404中存储有计算机程序,该处理器402被设置为运行计算机程序以执行上述任一项基于Swagger动态生成规范文件的方法的实施例中的步骤。
具体地,上述处理器402可以包括中央处理器(CPU),或者特定集成电路(ApplicationSpecificIntegratedCircuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
其中,存储器404可以包括用于数据或指令的大容量存储器404。举例来说而非限制,存储器404可包括硬盘驱动器(HardDiskDrive,简称为HDD)、软盘驱动器、固态驱动器(SolidStateDrive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(UniversalSerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器404可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器404可在数据处理装置的内部或外部。在特定实施例中,存储器404是非易失性(Non-Volatile)存储器。在特定实施例中,存储器404包括只读存储器(Read-OnlyMemory,简称为ROM)和随机存取存储器(RandomAccessMemory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(ProgrammableRead-OnlyMemory,简称为PROM)、可擦除PROM(ErasableProgrammableRead-OnlyMemory,简称为EPROM)、电可擦除PROM(ElectricallyErasableProgrammableRead-OnlyMemory,简称为EEPROM)、电可改写ROM(ElectricallyAlterableRead-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(StaticRandom-AccessMemory,简称为SRAM)或动态随机存取存储器(DynamicRandomAccessMemory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器404(FastPageModeDynamicRandomAccessMemory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(ExtendedDateOutDynamicRandomAccessMemory,简称为EDODRAM)、同步动态随机存取内存(SynchronousDynamicRandom-AccessMemory,简称SDRAM)等。
存储器404可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器402所执行的可能的基于Swagger动态生成规范文件的方法的计算机程序指令。
处理器402通过读取并执行存储器404中存储的计算机程序指令,以实现上述实施例中的任意一种基于Swagger动态生成规范文件的方法。
可选地,上述电子装置还可以包括传输设备406以及输入输出设备408,其中,该传输设备406和上述处理器402连接,该输入输出设备408和上述处理器402连接。
传输设备406可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备406可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
输入输出设备408用于输入或输出信息。在本实施例中,输入的信息可以是未经处理的文档数据等,输出的信息可以是规范文件等。
可选地,在本实施例中,上述处理器402可以被设置为通过计算机程序执行以下步骤:
调取swagger提供的api接口以获取webjson格式的web数据,将所述web数据转换为json数据格式的数据源;
基于所述数据源对应的api接口的分类名称生成对应的接口定义;
基于所述接口定义生成Typescript文件;
将所述Typescript文件格式化为规范文件,其中所述规范文件符合eslint规范以及prettier美化规范。
需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
通常,各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。本发明的一些方面可以以硬件来实现,而其他方面可以以可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是本发明不限于此。尽管本发明的各个方面可以被示出和描述为框图、流程图或使用一些其他图形表示,但是应当理解,作为非限制性示例,本文中描述的这些框、装置、系统、技术或方法可以以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备或其某种组合来实现。
本发明的实施例可以由计算机软件来实现,该计算机软件由移动设备的数据处理器诸如在处理器实体中可执行,或者由硬件来实现,或者由软件和硬件的组合来实现。包括软件例程、小程序和/或宏的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括用于执行特定任务的程序指令。计算机程序产品可以包括当程序运行时被配置为执行实施例的一个或多个计算机可执行组件。一个或多个计算机可执行组件可以是至少一个软件代码或其一部分。另外,在这一点上,应当注意,如图中的逻辑流程的任何框可以表示程序步骤、或者互连的逻辑电路、框和功能、或者程序步骤和逻辑电路、框和功能的组合。软件可以存储在诸如存储器芯片或在处理器内实现的存储块等物理介质、诸如硬盘或软盘等磁性介质、以及诸如例如DVD及其数据变体、CD等光学介质上。物理介质是非瞬态介质。
本领域的技术人员应该明白,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
- 基于Swagger动态生成范本文件的方法、装置及应用
- 基于swagger文档的类型声明文件生成方法及装置