一种基于Java字节码文件的Swagger注解稽核方法与流程

文档序号:37274571发布日期:2024-03-12 21:07阅读:16来源:国知局
本发明涉及稽核方法,具体涉及一种基于java字节码文件的swagger注解稽核方法。
背景技术
::1、在前后端分离模式的开发过程中,前后端开发人员存在对接口、参数的定义及变动沟通成本高、测试难度大等诸多协作问题。swagger作为一款可生成接口开发文档并且支持测试的框架,无论是独立使用,将接口开发文档作为前后端开发人员协作的连接点。或将接口开发文档作为数据源,导入apifox、apipost等当前流行的接口平台,以实现mock等更多附加功能。swagger框架均已经被广泛应用,大幅提高了前后端协作效率。2、作为协作连接点、数据源的swagger接口开发文档,其准确性极为重要。一旦接口开发文档中某些接口参数数量、参数类型等出现错误,将直接影响前端开发人员常规开发、测试、mock等一系列问题。然而对于java项目而言,swagger是在后端开发框架中引入,后端人员编写swagger注解后,借助springfox、swagger-maven-plugin等swagger开源工具,将根据注解并结合实际接口,生成接口开发文档。swagger注解是关键点,但是无法确保后端人员对需要进行描述的类、接口等都编写了注解,也无法确保编写的每个接口、参数的注解属性值都是准确的。springfox、swagger-maven-plugin等swagger开源工具更多聚焦于接口开发文档的生成,但是对于开发人员编写的swagger注解规范性、准确性并没有涉及。3、由此带来的问题会导致前后端开发人员之间协作效率的降低,增加了沟通成本。技术实现思路1、以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。2、本发明的目的在于解决上述问题,提供了一种基于java字节码文件的swagger注解稽核方法,能够确保swagger接口开发文档的准确性,实现前后端开发人员之间协作效率的提升,减少沟通成本。3、本发明的技术方案为:本发明揭示了一种基于java字节码文件的swagger注解稽核方法,方法包括:4、步骤一:swagger注解稽核前的准备工作;5、步骤二:判断当前项目中所使用的swagger注解类型,并据此执行不同的稽核逻辑,若为swagger2注解类型则跳转步骤三,若为openapi3注解类型则跳转步骤四;6、步骤三:实现对swagger2注解稽核;7、步骤四:实现对openapi3注解稽核。8、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,步骤一包括以下两方面处理:从目标maven项目中,获取当前使用的swagger版本;从目标maven项目中,获取已编译且已过滤的待稽核java字节码文件。9、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,步骤一进一步包括以下处理步骤:10、步骤1:读入目标maven项目;11、步骤2:扫描当前路径下java字节码文件;12、步骤3:判断当前路径下是否存在java字节码文件,若存在则跳转步骤4,若不存在,则将其设置为警告或异常信息并跳转步骤9;13、步骤4:扫描当前路径下pom.xml文件;14、步骤5:判断当前路径下是否存在pom.xml文件,若存在则跳转步骤6,若不存在,则将其设置为警告或异常信息并跳转步骤9;15、步骤6:解析pom.xml文件中所有依赖;16、步骤7:判断swagger依赖类型,若不存在swagger2或openapi3依赖,则将其设置为警告或异常信息并跳转步骤9,若既存在swagger2依赖又存在openapi3依赖,则将其设置为警告或异常信息并跳转步骤9,若存在swagger2或openapi3依赖,则跳转步骤8;17、步骤8:遍历所有java字节码文件;18、步骤9:收集警告及异常信息;19、步骤10:步骤一结束。20、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,在步骤一中的步骤6中,借助maven-model工具中mavenxpp3reader对象,将pom文件解析为model模型,并获取model模型中所有依赖列表。21、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,在步骤一中的步骤7中,基于swagger依赖类型判断表,根据groupid和artifactid遍历步骤一中的步骤6所获取的依赖列表,进行swagger依赖类型判断。22、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,步骤一中的步骤8进一步包括:23、步骤8.1初始化变量i=0;24、步骤8.2获取第i个java字节码文件;25、步骤8.3将字节码文件内容解析为javaclass对象;26、步骤8.4获取javaclass对象中的类注解列表annotationentry;27、步骤8.5判断是否存在待扫描的类注解,若存在则跳转步骤8.6,若不存在,则i++,跳转步骤8.2,对下一个字节码文件执行逻辑;28、步骤8.6收集待稽核字节码文件;29、步骤8.7判断是否为最后一个字节码文件,若是则跳转步骤10,若不是,则i++,跳转步骤8.2,对下一个字节码文件执行逻辑。30、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,在步骤8.3中,借助apache字节码解析工具bcel,将字节码文件解析为javaclass对象。31、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,在步骤8.5中,是基于待扫描类注解判断表,根据待扫描类注解包路径和待扫描类注解名称,遍历步骤8.4中获取的类注解列表,判断当前字节码文件是否存在待扫描类注解。32、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,步骤三进一步包括以下的处理步骤:33、步骤1:读入待稽核java字节码文件;34、步骤2:初始化变量i=0,准备遍历所有java字节码文件;35、步骤3:获取第i个字节码文件并解析为javaclass对象,其中借助apache字节码解析工具bcel,将字节码文件解析为javaclass对象;36、步骤4:获取javaclass对象中的类注解列表annotationentry;37、步骤5:判断是否存在待稽核类注解@api,若存在则跳转步骤6,若不存在,则将其设置为注解类稽核的警告或异常信息并跳转步骤8,其中包括基于swagger2稽核内容,根据待稽核类注解名称api及包路径io.swagger.annotations,遍历步骤4中获取的类注解列表annotationentry,判断是否存在稽核类注解@api;38、步骤6:获取待稽核类注解@api中所有属性列表elementvaluepair,通过遍历属性列表elementvaluepair,获取@api注解的属性,包括标签、标识符;39、步骤7:判断是否存在待稽核类注解属性,若存在则跳转步骤9,若不存在则将其设置为注解类稽核的警告或异常信息并跳转步骤8,其中包括结合swagger2稽核内容,判断是否存在@api注解待稽核属性中的标签和标识符;40、步骤8:收集类注解和属性警告及异常信息;41、步骤9:获取待稽核类下所有方法列表method;42、步骤10:遍历所有待稽核方法列表,包括方法注解及其需要标注的属性、参数注解与其需要标注的属性是否存在,以及方法上的参数注解与实际参数是否匹配;43、步骤11:待稽核java字节码文件是否遍历结束,若遍历结束则跳转步骤12,若遍历未结束,则j++,跳转步骤10.2,对下一个java字节码文件执行稽核逻辑;44、步骤12:汇总类、方法注解、属性稽核警告及异常信息;45、步骤13:结束。46、根据本发明的基于java字节码文件的swagger注解稽核方法的一实施例,步骤三中的步骤10进一步包括以下的处理:47、步骤10.1初始化变量j=0;48、步骤10.2获取第j个待稽核方法;49、步骤10.2.1获取待稽核方法上的注解信息:获取待稽核方法上对应50、的注解列表annotationentry;51、步骤10.2.1.1获取注解中关于方法注解信息;52、步骤10.2.1.1.1获取待稽核方法注解@apioperation;53、步骤10.2.1.1.2是否存在待稽核方法注解@apioperation,若存在则跳转步骤10.2.1.1.3,若不存在则将其设置为方法注解稽核的警告或异常信息并跳转步骤10.2.4;54、步骤10.2.1.1.3获取待稽核方法注解属性列表elementvaluepair;55、步骤10.2.1.1.4解析属性列表中方法信息,通过遍历属性列表elementvaluepair,获取@apioperation注解的包括标签、标识符在内的属性;56、步骤10.2.1.1.5是否漏写需要标注的方法属性,若不存在则将其设置为方法注解稽核的警告或异常信息,并跳转步骤10.2.4;57、步骤10.2.1.2获取注解中关于参数注解信息;58、步骤10.2.1.2.1获取待稽核方法参数注解59、@apiimplicitparam;60、步骤10.2.1.2.2是否存在待稽核参数注解61、@apiimplicitparam,若存在则跳转步骤10.2.1.2.3,若不存在则将其设置为参数注解稽核的警告或异常信息并跳转步骤10.2.4;步骤10.2.1.2.3获取待稽核参数注解属性列表elementvaluepair;62、步骤10.2.1.2.4解析属性列表中参数信息;63、步骤10.2.1.2.5是否漏写需要标注的参数属性,若存在漏写属性,则将其设置为参数注解稽核的警告或异常信息并跳转步骤10.2.4,若存在则跳转步骤10.2.3;64、步骤10.2.2获取实际方法中信息,包括以下的步骤10.2.2.1和10.2.2.2;65、步骤10.2.2.1获取待稽核方法参数池localvariabletable;66、步骤10.2.2.2从参数池中获取待稽核方法的实际参数及类型;67、步骤10.2.3比对实际参数与注解参数在数量、参数信息是否匹配有误,若无误差则跳转步骤10.2.5,若有误差则将其设置为参数注解稽核的警告或异常信息并跳转步骤10.2.4;68、步骤10.2.4收集方法注解和属性警告及异常信息69、步骤10.2.5待稽核方法是否遍历结束,若遍历结束则跳转步骤11,若遍历未结束,则j++,跳转步骤10.2,对下一个方法执行稽核逻辑。70、本发明对比现有技术有如下的有益效果:本发明基于java字节码文件,对编译后java文件中的内容进行解析,解析其中的类、参数注解及其属性,再解析实际接口的参数及类型等数据,对后端开发人员编写的swagger注解的规范性、准确性进行稽核,找出其中的问题点,抛给后台开发人员进行整改。后端开发人员能够根据稽核结果调整存在问题的swagger注解,从而确保swagger接口开发文档的准确性。71、相较于现有技术,本发明基于java字节码文件,一方面解析其中的注解信息,另一方面解析其中的实际方法信息。更进一步地,本发明从两个方向实现对swagger注解稽核:第一,类、方法、参数注解及其需要标注的属性是否存在。第二,方法上的参数注解与实际参数是否匹配。其中,第一点可以作为项目中swagger注解规则性检查,第二点可以作为项目中swagger注解准确性检查。72、本发明的方法被开发成ide插件应用在开发工具中,作为swagger注解稽核工具。将因swagger注解遗漏或者错误导致问题的事件发生点左移,尽早发现问题、解决问题。另一方面,可以将本发明的方法内嵌至devops(devops即软件开发与运维)中流水线中,作为强制门禁卡点。在向apifox、apipost等接口平台上报数据前,先进行强制校验,从而确保swagger接口开发文档的准确性。最终,实现前后端开发人员之间协作效率的提升,减少沟通成本。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1