一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于接口文档生成HTTP请求代码的系统及方法与流程

2022-07-30 19:50:06 来源:中国专利 TAG:
基于接口文档生成http请求代码的系统及方法
技术领域
:1.本发明涉及一种基于接口文档生成http请求代码的系统及方法,属于计算机软件
技术领域
:。
背景技术
::2.在完成接口文档的编写后,需要人工编写相关的接口请求代码。但其中存在诸多问题,如:接口文档中字段/结构变更频繁且对照麻烦,每次变更需手动更新代码;接口入参/出参模型定义繁琐,需人为手动逐个添加;字段信息不明确,研发人员需经常切换接口文档去理解字段含义;人为原因导致一系列代码错误,如,将result字段误写为results字段,等等。所以,需要使用一种通过接口文档自动生成接口请求代码的方法来提高研发效率。3.现有的从接口文档转换成请求代码方案一般仅生成部分http(hypertexttransferprotocol,超文本传输协议)核心代码,并未添加接口/字段注释、参数类型等内容。一般情况下,传统的代码生成方案会将每个接口的请求头、参数等信息在请求函数体内做组装,导致代码臃肿、晦涩难懂,同时做了许多重复的工作。在遇到函数、接口字段可能重复等问题时,其往往通过一些hash方法来保证命名不冲突,但也导致了使用者无法直接看懂hash方法的含义。技术实现要素:4.本发明的目的是解决上述
背景技术
:中提及的缺陷。5.为实现上述发明目的,第一方面,本发明提供一种基于接口文档生成http请求代码的系统,包括接口文档形成及存储模块,用于编写接口文档并以数据库形式存储;接口信息规范性校验模块,用于校验所述接口文档中的接口信息是否符合restfulapi规范;json树转换模块,用于将符合restfulapi规范的平层的线性结构的接口信息转换为json树;接口标识模块,用于通过遍历所述json树提取其中的接口信息来形成接口的唯一标识;models数组生成模块,通过提取接口的出/入参数内容及添加注释生成models数组;services数组生成模块,通过解析接口的模块名、请求/返回参数、接口路径,并添加注释,生成services数组;model文件生成模块,遍历所述models数组,使用模板渲染引擎handlebars生成至少一个model文件,其中一个model文件存储项目中一个模块的参数类型内容;service文件生成模块,遍历所述services数组,使用模板渲染引擎handlebars生成至少一个service文件,其中一个service文件存储项目中一个模块的http请求函数;api.module文件生成模块,用于将所有的model文件和service文件封装成api.module文件并对外暴露,供外部调用http请求函数或参数类型定义;http请求代码生成模块,用于将api.module文件输出到用户配置的代码输出路径,使用语法分析器对项目的入口文件进行语法检查,并使用词法分析器将代码字符序列转换为标记序列,最终生成抽象语法树;递归解析所述抽象语法树,创建名称为importdeclaration的ast节点,该节点表示api.module的引用语句;将该节点插入到抽象语法树的最后一个importdeclaration节点处,将返回的新的抽象语法树进行反编译,生成http请求代码,并写入到项目的入口文件中。6.进一步地,所述json树中的接口信息至少包括模块名及接口路径。7.进一步地,从所述json树中提取出的接口信息被组装成大驼峰字符串,以所述大驼峰字符串来唯一标识该接口。8.进一步地,所述http请求函数包括函数名、函数入参别名及类型、函数出参别名及类型、http请求方式和接口路径。9.进一步地,所述函数名由接口请求方式与接口路径拼接形成。10.第二方面,本发明提供一种基于接口文档生成http请求代码的方法,包括以下步骤:(1)编写接口文档并以数据库形式存储;(2)校验所述接口文档中的接口信息是否符合restfulapi规范;如是,则继续下一步,如否,则结束;(3)将符合restfulapi规范的平层的线性结构的接口信息转换为json树;(4)通过遍历所述json树提取其中的接口信息来形成接口的唯一标识;(5)提取接口的出/入参数内容及添加注释生成models数组;(6)解析接口的模块名、请求/返回参数、接口路径,并添加注释,生成services数组;(7)遍历所述models数组,使用模板渲染引擎handlebars生成至少一个model文件,其中一个model文件存储项目中一个模块的参数类型内容;(8)遍历所述services数组,使用模板渲染引擎handlebars生成至少一个service文件,其中一个service文件存储项目中一个模块的http请求函数;(9)将所有的model文件和service文件封装成api.module文件并对外暴露,供外部调用http请求函数或参数类型定义;(10)将api.module文件输出到用户配置的代码输出路径,使用语法分析器对项目的入口文件进行语法检查,并使用词法分析器将代码字符序列转换为标记序列,最终生成抽象语法树;递归解析所述抽象语法树,创建名称为importdeclaration的ast节点,该节点表示api.module的引用语句;将该节点插入到抽象语法树的最后一个importdeclaration节点处,将返回的新的抽象语法树进行反编译,生成http请求代码,并写入到项目的入口文件中。11.进一步地,所述json树中的接口信息至少包括模块名及接口路径。12.进一步地,从所述json树中提取出的接口信息被组装成大驼峰字符串,以所述大驼峰字符串来唯一标识该接口。13.进一步地,所述http请求函数包括函数名、函数入参别名及类型、函数出参别名及类型、http请求方式和接口路径。14.进一步地,所述函数名由接口请求方式与接口路径拼接形成。15.与现有技术相比,本发明的有益效果为:16.1.从接口文档中提取了所有描述信息、字段名称、字段类型等,通过深度优先的递归算法,按照模块分类生成多个代码文件,结构清晰,并生成每个接口注释、入参类型、出参类型、方法函数,最后将每个生成的代码文件封装到一个api模块中,对外暴露该api模块即可。而传统方式全部生成在一个文件中。17.2.在生成http请求函数逻辑时,不会在内部组装请求头、格式化请求参数等,而是放在函数调用时和统一拦截器中处理。相对于传统方案将所有逻辑全部放在请求函数体中,本发明保证了请求函数逻辑的清晰简洁,简单易用,降低了其耦合程度。18.3.在生成http请求代码的过程中,对每个接口的规范性进行扫描,检查是否符合restfulapi风格。如果文档中有接口不符合规范,会作出相应提示,并中断代码生成流程。而传统方式并没有这一步,每当开发人员编写完文档之后,需要其他人员人为检查其文档的规范性。19.4.通过解析源码ast(abstractsyntaxtree,抽象语法树)的方式,将原工程代码和新代码进行关联引用,并对其进行语法校验,相对于传统方式通过正则方式修改原工程代码,降低了其风险性,同时提高了容错率。同时从实际项目出发,保证了开发时开箱即用。20.5.无需研发人员编写接口请求代码,而是根据接口文档自动生成,节省了开发时间。在生成的接口请求代码中,会同时生成接口名称描述、接口字段含义等相关注释,研发人员无需再来回切换文档去搜索接口或某字段的含义。接口文档中填写完字段类型定义后,直接生成整个接口的参数类型定义,帮助研发人员在引用接口返回字段时,自动提示字段结构和内容。同时结合编码工具,如遇参数不匹配会自动提示错误原因,帮助开发者快速排查问题。附图说明21.图1是本发明方法一个实施例的流程图;22.图2是本发明方法一个实施例中models文件的生成流程图;23.图3是本发明方法一个实施例中services文件的生成流程图;24.图4是本发明系统/方法一个实施例中源码解析的流程图;25.图5是本发明系统/方法一个实施例中api.module文件的数据结构图;26.图6是本发明系统/方法一个实施例中接口文档编写界面示意图;27.图7是本发明系统/方法一个实施例中请求参数及返回数据的界面示意图。具体实施方式28.下面结合附图和具体实施例,对本发明的技术方案做进一步说明。29.如图1-图5所示,本发明基于接口文档生成http请求代码的系统的一个实施例,包括接口文档形成及存储模块,用于编写接口文档并以数据库形式存储;接口信息规范性校验模块,用于校验所述接口文档中的接口信息是否符合restfulapi规范;json树转换模块,用于将符合restfulapi规范的平层的线性结构的接口信息转换为json树;接口标识模块,用于通过遍历所述json树提取其中的接口信息来形成接口的唯一标识;models数组生成模块,通过提取接口的出/入参数内容及添加注释生成models数组;services数组生成模块,通过解析接口的模块名、请求/返回参数、接口路径,并添加注释,生成services数组;model文件生成模块,遍历所述models数组,使用模板渲染引擎handlebars生成至少一个model文件,其中一个model文件存储项目中一个模块的参数类型内容;service文件生成模块,遍历所述services数组,使用模板渲染引擎handlebars生成至少一个service文件,其中一个service文件存储项目中一个模块的http请求函数;api.module文件生成模块,用于将所有的model文件和service文件封装成api.module文件并对外暴露,供外部调用http请求函数或参数类型定义;http请求代码生成模块,用于将api.module文件输出到用户配置的代码输出路径,使用语法分析器对项目的入口文件进行语法检查,并使用词法分析器将代码字符序列转换为标记序列,最终生成抽象语法树;递归解析所述抽象语法树,创建名称为importdeclaration的ast节点,该节点表示api.module的引用语句;将该节点插入到抽象语法树的最后一个importdeclaration节点处,将返回的新的抽象语法树进行反编译,生成http请求代码,并写入到项目的入口文件中。30.在一个实施例中,所述json树中的接口信息至少包括模块名及接口路径。31.在一个实施例中,从所述json树中提取出的接口信息被组装成大驼峰字符串,以所述大驼峰字符串来唯一标识该接口。32.在一个实施例中,所述http请求函数包括函数名、函数入参别名及类型、函数出参别名及类型、http请求方式和接口路径。33.在一个实施例中,所述函数名由接口请求方式与接口路径拼接形成。34.如图1-图5所示,本发明基于接口文档生成http请求代码的方法的一个实施例,包括以下步骤:(1)编写接口文档并以数据库形式存储;(2)校验所述接口文档中的接口信息是否符合restfulapi规范;如是,则继续下一步,如否,则结束;(3)将符合restfulapi规范的平层的线性结构的接口信息转换为json树;(4)通过遍历所述json树提取其中的接口信息来形成接口的唯一标识;(5)提取接口的出/入参数内容及添加注释生成models数组;(6)解析接口的模块名、请求/返回参数、接口路径,并添加注释,生成services数组;(7)遍历所述models数组,使用模板渲染引擎handlebars生成至少一个model文件,其中一个model文件存储项目中一个模块的参数类型内容;(8)遍历所述services数组,使用模板渲染引擎handlebars生成至少一个service文件,其中一个service文件存储项目中一个模块的http请求函数;(9)将所有的model文件和service文件封装成api.module文件并对外暴露,供外部调用http请求函数或参数类型定义;(10)将api.module文件输出到用户配置的代码输出路径,使用语法分析器对项目的入口文件进行语法检查,并使用词法分析器将代码字符序列转换为标记序列,最终生成抽象语法树;递归解析所述抽象语法树,创建名称为importdeclaration的ast节点,该节点表示api.module的引用语句;将该节点插入到抽象语法树的最后一个importdeclaration节点处,将返回的新的抽象语法树进行反编译,生成http请求代码,并写入到项目的入口文件中。35.在一个实施例中,所述json树中的接口信息至少包括模块名及接口路径。36.在一个实施例中,从所述json树中提取出的接口信息被组装成大驼峰字符串,以所述大驼峰字符串来唯一标识该接口。37.在一个实施例中,所述http请求函数包括函数名、函数入参别名及类型、函数出参别名及类型、http请求方式和接口路径。38.在一个实施例中,所述函数名由接口请求方式与接口路径拼接形成。39.为了方便理解本发明,下面举一些应用实例进行具体化呈现:40.步骤1:通过可视化系统(如:yapi),编写接口文档并保存至数据库。41.步骤2:从步骤一中的数据库表中遍历接口文档数据,提取接口信息,在提取过程中,同时校验接口编写的规范性是否符合restfulapi风格。如果接口文档中存在不符合规范的问题,则提示该接口名称和规范建议,终止流程。如果合规,则将平层的线性结构转换为一个树形结构,最终形成一颗json(javascriptobjectnotation,js对象简谱)树。42.步骤3:提取json树中模块名及接口路径,通过下划线”、“冒号”、“斜杠”为标记进行切割,组装成一个大驼峰字符串,用于唯一标识该接口。(如:/api/user/comment_list/:id组装成apiusercommentlistid)模型相关的字段用于生成类型名。如果是出参,在类型名称前面添加res标识;如果是入参,在类型名称尾部添加params标识。方便开发者在获取接口参数类型时,快速判断该类型并检索。43.步骤4:获取接口请求方式,并与步骤3的返回结构进行拼接,生成接口请求函数名。(说明:通过这种方式,函数名能规避大部分函数名重复的问题,同时通过代码编辑器,可以实现模糊搜索的功能,知道接口路径的前提下,能快速写出函数方法。如get请求接口/api/user/list,对应函数名为getapiuserlist,在输入函数名过程中,编码工具会自动提示补全函数名)。44.步骤5:生成接口入参类型名称(步骤3的结果 params)和出参类型名称(res 步骤3的结果)。(说明:添加res和params标识,区分了出入参的命名。如:入参:apiusercommentlistidparams,出参:resapiusercommentlistid)45.步骤6:提取json树中的接口的请求参数对象和返回参数对象,并与步骤5的返回结果以key-value形式进行组装生成models对象。(说明:apiusercommentlistidparams:{参数对象xxx})。46.步骤7:提取json树中接口和参数字段类型的内容,添加注释。47.步骤8:重复步骤3-步骤7,直到模型参数全部生成完毕。将所有模型参数以对象数组(说明:对象数组是一种结构,即数组中的存储的元素是对象。如:[{name:1},{name:2}])的形式存储在models数组中。(models生成流程图如图2所示)[0048]步骤9:解析json中的接口所属模块名,生成service类名。并添加注释信息字段。[0049]步骤10:解析步骤9所属模块中的接口请求/返回参数、请求方式、接口路径、入参位置等字段,将其保存在service数组对象(说明:对象数组是一种结构,即数组中存储的元素是对象。如:[{name:1},{name:2}])中。[0050]步骤11:重复步骤9-步骤10,直到所有模块的service信息生成完毕,并将结果保存到services数组中。(services生成流程图如图3所示)[0051]步骤12:遍历步骤8和步骤11的结果,使用模板渲染引擎handlebars将model和service模板文件中的变量替换成每次遍历的结果值。model文件保存了某模块(说明:一个项目可能有用户、权限等多个模块,一个模块对应有许多接口,所以这里一个模块对应的是一个service文件,该文件下就是该模块下的所有接口请求函数,model对应该模块下的所有参数类型定义)下的所有接口的参数类型,service文件保存了某模块下的所有http请求函数。[0052]步骤13:生成api.module文件(其数据结构如图5所示),引入所有的model和service文件,并对外暴露该模块文件,外部需要调用函数或类型定义时,引用该模块即可。[0053]步骤14:根据用户配置的代码输出路径,将步骤12和步骤13的所有代码文件输出到指定位置。[0054]步骤15:使用语法分析器(parser)对项目工程中的入口文件进行语法检查,并使用词法分析器(lexicalanalyzer)将代码字符序列转换为标记(token)序列,最终生成抽象语法树(abstractsyntaxtree,ast)。[0055]步骤16:递归解析步骤15的抽象语法树,创建名称为importdeclaration的ast节点,该节点表示api.module的引用语句。将该节点插入到抽象语法树的最后一个importdeclaration节点处,插到末尾保证了不破坏原来入口文件的引用顺序。[0056]步骤17:将步骤16返回的新的抽象语法树进行反编译,生成http请求代码,并写入到入口文件中,(源码解析流程图如图4所示)。[0057]语法分析器(parser):语法分析器(parser)通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。[0058]词法分析器(lexicalanalyzer):词法分析(英语:lexicalanalysis)是计算机科学中将字符序列转换为标记(token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(lexicalanalyzer,简称lexer),也叫扫描器(scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。[0059]标记(token):这里的标记是一个字串,是构成源代码的最小单位。从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。词法分析器通常不会关心标记之间的关系(属于语法分析的范畴),举例来说:词法分析器能够将括号识别为标记,但并不保证括号是否匹配。[0060]抽象语法树(abstractsyntaxtree,ast):在计算机科学中,抽象语法树(abstractsyntaxtree,ast),或简称语法树(syntaxtree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有三个分支的节点来表示。和抽象语法树相对的是具体语法树(通常称作分析树)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树,然后从分析树生成ast。一旦ast被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。[0061]下面以某项目的“用户模块”接口文档为例:[0062]第一步:编写接口文档,如图6-图7所示。[0063]第二步:用户全局安装cli工具,在指定项目工程的根目录下,执行generateapi命令,并输入线上接口文档地址和代码生成路径,即可生成http请求代码。[0064]接口文档json树:[0065]{"info":{"title":"test1","version":"last"},"basepath":"/","tags":[{"name":"user","description":"userdescription"}],"schemes":["http"],"paths":{"/user/:user_id":{"delete":{"tags":["user"],"summary":"删除用户","description":"","consumes":["application/json"],"parameters":[{"name":"user_id","in":"path","description":"","required":true,"type":"string"}],"responses":{"200":{"description":"successfuloperation","schema":{"$schema":"http://json-schema.org/draft-04/schema#","type":"object","properties":{"code":{"type":"number"},"msg":{"type":"string"},"data":{"type":"null"}},"required":["code","msg","data"]}}}},"put":{"tags":["user"],"summary":"编辑用户","description":"","consumes":["application/json"],"parameters":[{"name":"user_id","in":"path","description":"","required":true,"type":"string"},{"name":"params","in":"body","schema":{"$ref":"#/definitions/user/useruser_idputparams"}}],"responses":{"200":{"description":"successfuloperation","schema":{"type":"object","title":"title","properties":{"code":{"type":"number"},"msg":{"type":"string"},"data":{"$ref":"#/definitions/user/resputuseruser_id"}},"required":["code","msg","data"]}}}}},"/user":{"post":{"tags":["user"],"summary":"新增用户","description":"","consumes":["application/json"],"parameters":[{"name":"params","in":"body","schema":{"$ref":"#/definitions/user/userpostparams"}}],"responses":{"200":{"description":"successfuloperation","schema":{"type":"object","title":"title","properties":{"code":{"type":"number"},"msg":{"type":"string"},"data":{"$ref":"#/definitions/user/respostuser"}},"required":["code","msg","data"]}}}}},"/user/:id":{"get":{"tags":["user"],"summary":"查询用户","description":"","consumes":["text/plain"],"parameters":[{"name":"id","in":"path","description":"","required":true,"type":"string"}],"responses":{"200":{"description":"successfuloperation","schema":{"$schema":"http://json-schema.org/draft-04/schema#","type":"object","properties":{"code":{"type":"number"},"msg":{"type":"string"},"data":{"$ref":"#/definitions/user/resgetuserid"}},"required":["code","msg","data"]}}}}}},"definitions":{"user":{"useruser_idputparams":{"type":"object","title":"title","properties":{"name":{"type":"string","description":"用户名称"},"desc":{"type":"string","description":"用户描述"},"address":{"type":"string","description":"家庭地址"}},"required":["name","desc","address"]},"resputuseruser_id":{"type":"object","properties":{"id":{"type":"string","title":"用户id"}},"required":["id"]},"userpostparams":{"type":"object","title":"title","properties":{"name":{"type":"string","title":"用户名称"},"desc":{"type":"string","title":"用户描述"},"address":{"type":"string","title":"家庭地址"}},"required":["name","desc","address"]},"respostuser":{"type":"object","properties":{"id":{"type":"string","title":"用户id"}},"required":["id"]},"resgetuserid":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"number"}},"required":["name","id"]}}}}[0066]下面展示核心的两个文件,models目录下代表了接口文档中所有的模型定义。service目录下包含了接口文档中的所有http请求函数。其目录下的文件根据接口模块名进行区分。比如用户模块的生成结构如下所示:[0067]api/models/user.ts[0068]/*tslint:disable*/[0069]exportinterfaceuseruser_idputparams{[0070]/**[0071]*家庭地址[0072]*/[0073]address:string;[0074]/**[0075]*用户描述[0076]*/[0077]desc:string;[0078]/**[0079]*用户名称[0080]*/[0081]name:string;[0082]}[0083]exportinterfaceresputuseruser_id{[0084]id:string;[0085]}[0086]exportinterfaceuserpostparams{[0087]address:string;[0088]desc:string;[0089]name:string;[0090]}[0091]exportinterfacerespostuser{[0092]id:string;[0093]}[0094]exportinterfaceresgetuserid{[0095]id:number;[0096]name:string;[0097]}[0098]api/service/user.ts[0099]/*tslint:disable*/[0100]import{injectable}from'@angular/core';[0101]import{httpclient}from'@angular/common/http';[0102]import{observable}from'rxjs';[0103]import{icommonresponse}from'../strict-http-response';[0104]import{apibaseservice}from'../base-service';[0105]import{resputuseruser_id,useruser_idputparams,respostuser,userpostparams,resgetuserid}from'../models/user';[0106]/**[0107]*userdescription[0108]*/[0109]@injectable({[0110]providedin:'root',[0111]})[0112]exportclassuserserviceextendsapibaseservice{[0113]constructor(protectedhttp:httpclient){[0114]super(http);[0115]}[0116]/**[0117]*删除用户[0118]*@paramuser_id[0119]*@returnsuccessfuloperation[0120]*/[0121]deleteuseruserid(user_id:string):observable《icommonresponse《null》》{[0122]returnthis.http.delete《icommonresponse《null》》(`user/${user_id}`)[0123]}[0124]/**[0125]*编辑用户[0126]*@paramparamsthe`userservice.putuseruseridparams`containingthefollowingparameters:[0127]*[0128]*-`user_id`:[0129]*[0130]*-`params`:[0131]*[0132]*@returnsuccessfuloperation[0133]*/[0134]putuseruserid(params:userservice.putuseruseridparams):observable《icommonresponse《resputuseruser_id》》{[0135]returnthis.http.put《icommonresponse《resputuseruser_id》》(`user/${params.user_id}`,params.params)[0136]}[0137]/**[0138]*新增用户[0139]*@paramparamsundefined[0140]*@returnsuccessfuloperation[0141]*/[0142]postuser(params?:userpostparams):observable《icommonresponse《respostuser》》{[0143]returnthis.http.post《icommonresponse《respostuser》》(`user`,params)[0144]}[0145]/**[0146]*查询用户[0147]*@paramid[0148]*@returnsuccessfuloperation[0149]*/[0150]getuserid(id:string):observable《icommonresponse《resgetuserid》》{[0151]returnthis.http.get《icommonresponse《resgetuserid》》(`user/${id}`)[0152]}[0153]}[0154]exportmoduleuserservice{[0155]/**[0156]*parametersforputuseruserid[0157]*/[0158]exportinterfaceputuseruseridparams{[0159]user_id:string;[0160]params?:useruser_idputparams;[0161]}[0162]}[0163]与现有技术相比,本发明的有益效果为:[0164]1.从接口文档中提取了所有描述信息、字段名称、字段类型等,通过深度优先的递归算法,按照模块分类生成多个代码文件,结构清晰,并生成每个接口注释、入参类型、出参类型、方法函数,最后将每个生成的代码文件封装到一个api模块中,对外暴露该api模块即可。而传统方式全部生成在一个文件中。[0165]2.在生成http请求函数逻辑时,不会在内部组装请求头、格式化请求参数等,而是放在函数调用时和统一拦截器中处理。相对于传统方案将所有逻辑全部放在请求函数体中,本发明保证了请求函数逻辑的清晰简洁,简单易用,降低了其耦合程度。[0166]3.在生成http请求代码的过程中,对每个接口的规范性进行扫描,检查是否符合restfulapi风格。如果文档中有接口不符合规范,会作出相应提示,并中断代码生成流程。而传统方式并没有这一步,每当开发人员编写完文档之后,需要其他人员人为检查其文档的规范性。[0167]4.通过解析源码ast(abstractsyntaxtree,抽象语法树)的方式,将原工程代码和新代码进行关联引用,并对其进行语法校验,相对于传统方式通过正则方式修改原工程代码,降低了其风险性,同时提高了容错率。同时从实际项目出发,保证了开发时开箱即用。[0168]5.无需研发人员编写接口请求代码,而是根据接口文档自动生成,节省了开发时间。在生成的接口请求代码中,会同时生成接口名称描述、接口字段含义等相关注释,研发人员无需再来回切换文档去搜索接口或某字段的含义。接口文档中填写完字段类型定义后,直接生成整个接口的参数类型定义,帮助研发人员在引用接口返回字段时,自动提示字段结构和内容。同时结合编码工具,如遇参数不匹配会自动提示错误原因,帮助开发者快速排查问题。[0169]本发明是参照根据本发明实施例的系统、方法和计算机存储介质的流程图和/或框图来描述的。应理解可由计算机程序指令实现流程图和/或框图中的每一流程和/或方框、以及流程图和/或框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0170]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0171]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0172]最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献