CN115576536A - 一种通过分析字节码自动生成接口文档的方法及*** - Google Patents
一种通过分析字节码自动生成接口文档的方法及*** Download PDFInfo
- Publication number
- CN115576536A CN115576536A CN202211410534.2A CN202211410534A CN115576536A CN 115576536 A CN115576536 A CN 115576536A CN 202211410534 A CN202211410534 A CN 202211410534A CN 115576536 A CN115576536 A CN 115576536A
- Authority
- CN
- China
- Prior art keywords
- class
- file
- information
- interface
- annotation information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Library & Information Science (AREA)
- Document Processing Apparatus (AREA)
Abstract
本申请提供了一种通过分析字节码自动生成接口文档的方法及***,其特征在于,包括:S1、上传编译打包好的JAR、WAR包;S2、解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件;S3、将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;S4、利用ASM Tree API的第一工具获取第二文件的类结构信息;S5、所述类结构信息结合第一注解信息,解析出第二文件的RESTful API文档信息。本发明能够解决一些没有引入Swagger框架、不想修改源码造成对业务代码的侵入,而又想获取***RESTful API文档的棘手问题。
Description
技术领域
本发明涉及接口文档自动生成的技术领域,尤其涉及一种通过分析字节码自动生成接口文档的方法及***。
背景技术
目前现有技术中常常利用Swagger生成RESTful API文档,但具有以下缺点:1、Swagger对项目所在业务代码具有侵入性,用户只有引入Springfox Swagger依赖组件,并编写对应的Java注解代码,才能在服务启动后自动生成对应的RESTful API文档。2、对于那些老旧没有引入Swagger的***,或者因缺乏源码无法再重新编译打包成JAR、WAR包的***,通过修改业务代码这种具有侵入性的方式再自动生成RESTful API文档困难重重,还可能会因引入新的组件导致服务启动失败,造成服务不稳定。3、Swagger自动生成API文档还依赖于服务运行时,只有在服务启动后,才能感知RESTful API的变化,服务停止后,RESTful API文档同时停用。
所以为了解决上述技术问题,本申请提出了一种通过分析字节码自动生成接口文档的方法、装置及可读存储介质。在不修改项目的任何源代码情况下,不需编写对应的OpenAPI 3.0注解,不依赖于Java服务的启动运行,直接扫描JAR、WAR包中的class文件,通过ASM字节码工具扫描class文件自动分析并提取出RESTful API文档信息。解决一些没有引入Swagger框架、不想修改源码造成对业务代码的侵入,而又想获取***RESTful API文档的棘手问题。
值得说明的是,本申请所涉及数据采集及迁移行为都已经经过用户的同意,并且为申请人进行正常的经营活动所必需。对于采集后的数据申请人进行了匿名化、保密等脱敏处理,并相应设置了数据的访问权限以确保不会泄露用户的隐私,本申请涉及的数据合规措施仅做列举,其他相关的数据合规措施申请人也有设置。申请人所进行的数据处理活动符合数据安全法与个人信息保护法等法律法规的规定。
发明内容
为解决现有状况的不足,本发明针对以上背景技术的缺陷,本发明提出了一种通过分析字节码自动生成接口文档的方法、装置及可读存储介质。包括:
本申请第一方面提出了一种通过分析字节码自动生成接口文档的方法,其特征在于,包括:
S1、上传编译打包好的JAR、WAR包;
S2、解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件,其中第一格式文件包括class文件;
S3、将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;
S4、利用ASM Tree API的第一工具获取第二文件的类结构信息,其中,第一工具包括ClassNode、MethodNode、FieldNode、AnnotationNode,所述类结构信息包括类的名称、类的所有方法、类的所有成员变量、类注解信息;
S5、所述类结构信息结合第一注解信息,解析出第二文件的RESTful API文档信息,其中,第一注解信息包括Swagger2、OpenAPI 3.0、SpringMVC的注解信息,RESTful API文档信息包括接口的名称、接口的请求类型、接口的请求地址URI、接口的输入输出参数。
进一步的,所述步骤S1包括:
S11、用户通过手动上传或持续集成或持续部署流水线自动上传JAR、WAR包;
S12、判断JAR、WAR包是否符合预设格式要求,如果符合预设格式要求,则将JAR、WAR包缓存起来,其中,所述预设格式要求包括class类型要求。
进一步的,所述步骤S3包括:将第二格式文件以Key-value的形式缓存,其中,Key存放class类名,value存放ClassNode类的结构信息。
进一步的,所述步骤S5包括:
S51、判断第二文件的类注解信息是否包含SpringMVC的第一接口类型注解信息,其中,所述第一接口类型注解包括@Controller、@RestController接口类型注解信息;
S52、如果第二文件的类注解信息包含SpringMVC的第一接口类型注解信息,则基于SpringMVC注解信息解析第二文件,获得基于SpringMVC框架的第一分注解信息;
S53、判断第二文件的类注解信息是否包含Swagger2、OpenAPI 3.0的第二接口类型注解信息,如果包含则基于Swagger2、OpenAPI 3.0注解信息解析第二文件获得第二分注解信息;
S54、基于第一分注解信息和第二分注解信息获得第一注解信息。
进一步的,所述方法还包括S6:将RESTful API文档信息转化为JSON格式。
进一步的,将转化为JSON格式的RESTful API文档信息存储到数据库中,存储后返回给前端页面展示。
本申请第二方面提出了一种基于ASM自动生成文档的装置,其特征在于,包括:
上传模块,用于上传编译打包好的JAR、WAR包;
解压扫描模块,用于解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件,其中第一格式文件包括class文件;
转化模块,用于将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;
第一获取模块,用于利用ASM Tree API的第一工具获取第二文件的类结构信息,其中第一工具包括ClassNode、MethodNode、FieldNode、AnnotationNode,所述类结构信息包括类的名称、类的所有方法、类的所有成员变量;
解析模块,用于所述类结构信息结合第一注解信息,解析出第二文件的RESTfulAPI文档信息,其中,第一注解信息包括Swagger2、OpenAPI 3.0、SpringMVC的注解信息,RESTful API文档信息包括接口的名称、接口的请求类型、接口的请求地址URI、接口的输入输出参数。
本申请第三方面提出了一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现上述基于ASM自动生成文档的方法。
本申请第四方面提出了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述基于ASM自动生成文档的方法。
本申请第五方面提出了一种计算机程序产品,其特征在于,包括计算机程序,该计算机程序被处理器执行时实现上述基于ASM自动生成文档的方法。
本发明的有益效果为:在不修改项目的任何源代码情况下,不需编写对应的OpenAPI 3.0注解,不依赖于Java服务的启动运行时,直接扫描JAR、WAR包中的class文件,通过ASM字节码工具扫描class文件自动分析并提取出RESTful API文档信息。主要解决一些没有引入Swagger框架、不想修改源码造成对业务代码的侵入,而又想获取***RESTfulAPI文档的棘手问题,而具有Swagger2、OpenAPI 3.0框架的项目,则基于Swagger2、OpenAPI3.0注解获得RESTful API文档信息。
附图说明
图1为本发明的通过分析字节码自动生成接口文档的方法的流程示意图。
图2为本发明的通过分析字节码自动生成接口文档装置的结构框图。
图3为本发明的实施例提供的电子设备的结构示意图。
具体实施方式
为了更清楚的理解本发明的内容,将结合附图和实施例详细说明。
但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本发明。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。本发明是已有专利技术的改进,所以对于本申请未描述的部分以现有技术来实现。
术语解释:
Swagger:可以根据业务代码自动生成相关的RESTful API接口文档,并且提供相应的测试界面,自动显示JSON格式的响应报文。开发人员几乎可以不用专门去维护RESTfulAPI,大大降低了前端与后端开发人员的沟通与联调成本。
Springfox Swagger UI:在Java项目启动的过程中,Spring上下文在初始化时,框架自动根据配置加载一些Swagger相关的Bean到当前的上下文中,自动扫描***中可能需要生成API文档那些类,并生成相应的信息缓存起来。如果项目MVC控制层用的是SpringMVC,那么会自动扫描所有Controller类,并根据这些Controller类中方法的注解生成相应的API文档。
RESTful API:即具有REST风格的应用程序接口。REST(英文:RepresentationalState Transfer,简称REST)描述了一个架构样式的网络***,比如web应用程序。REST指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是RESTful。
OpenAPI 3.0规范:OpenAPI规范(OAS)是一种通用的、和编程语言无关的API描述规范,它的主要作用是描述REST API,既可以作为文档给开发者阅读,又可以让机器根据这个文档自动生成客户端代码等。OpenAPI始于Swagger规范。
ASM是一个用于字节码增强的开源框架,是Java中比较流行的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换。ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM可以直接产生二进制class文件,也可在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能根据要求生成新类。目前许多框架如cglib、Hibernate、Spring都直接或间接使用ASM操作字节码。
JAR文件:Java归档(英语:Java ARchive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件或库。
WAR文件:Web应用程序归档(英语:Web Application ARchive)是一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源。
本申请的技术原理如下:Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作***、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码文件(class文件)供JVM使用。JVM规范中关于class文件格式是有着一定要求的,如魔数、版本号、常量池等都有排序格式方面的要求。
现有技术中常常利用Swagger生成RESTful API文档,但具有以下缺点:1、Swagger对项目所在业务代码具有侵入性,用户只有引入Springfox Swagger依赖组件,并编写对应的Java注解代码,才能在服务启动后自动生成对应的RESTful API文档。2、对于那些老旧没有引入Swagger的***,或者因缺乏源码无法再重新编译打包成JAR、WAR包的***,通过修改业务代码这种具有侵入性的方式再自动生成RESTful API文档困难重重,还可能会因引入新的组件导致服务启动失败,造成服务不稳定。3、Swagger自动生成API文档还依赖于服务运行,只有在服务启动后,才能感知RESTful API的变化,服务停止后,RESTful API文档同时停用。
所以为了解决上述技术问题,本申请提出了一种通过分析字节码自动生成接口文档的方法、装置及可读存储介质。在不修改项目的任何源代码情况下,不需编写对应的OpenAPI 3.0注解,不依赖于Java服务的启动运行,直接扫描JAR、WAR包中的class文件,通过ASM字节码工具扫描class文件自动分析并提取出RESTful API文档信息。解决一些没有引入Swagger框架、不想修改源码造成对业务代码的侵入,而又想获取***RESTful API文档的棘手问题。
图1为本发明的通过分析字节码自动生成接口文档的方法的流程示意图。本申请第一方面提出了一种通过分析字节码自动生成接口文档的方法,其特征在于,包括:
S1、上传编译打包好的JAR、WAR包;
进一步的,所述步骤S1包括:
S11、用户通过手动上传或持续集成或持续部署流水线自动上传JAR、WAR包;
S12、判断JAR、WAR包是否符合预设格式要求,如果符合预设格式要求,则将JAR、WAR包缓存起来,其中,所述预设格式要求包括class类型要求。
具体的,用户可以通过调用API扫描接口,将已经构建编译好的JAR、WAR包手动上传(或通过CICD持续集成&持续部署流水线自动上传)到服务器上,API扫描接口会自动校验包的格式是否符合要求,并将该包存到服务器的一个临时目录,待扫描解析出API接口文档信息后再删除。
具体的,预设格式要求可以设置为class类型要求以选出目标class类型文件,并且可以通过打标签做标记的方法筛选出目标class类型文件。
S2、解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件,其中第一格式文件包括class文件;
具体的,API扫描接口将上传的JAR、WAR包逐层解压,根据文件名称和后缀,设计相应的过滤器规则,获取包里将要扫描的目标class文件。
Java源代码被编译成class文件,这些跟RESTful API相关的接口信息并未消失,还是会存在于class文件中。因此,我们只需要分析相应的class文件,并根据一定规则,就可以正确的提取出与RESTful API相关的文档信息。
S3、将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;
进一步的,所述步骤S3包括:将第二格式文件以Key-value的形式缓存,其中,Key存放class类名,value存放ClassNode类的结构信息。
将目标class文件先转化为ASM Tree API中的ClassNode类型,再存到Map<String,ClassNode>集合中。其中Map<String,ClassNode>中的Key存放class类名,value存放ClassNode类的结构描述,用作后续解析类信息的上下文缓存。
S4、利用ASM Tree API的第一工具获取第二文件的类结构信息,其中,第一工具包括ClassNode、MethodNode、FieldNode、AnnotationNode,所述类结构信息包括类的名称、类的所有方法、类的所有成员变量、类注解信息等;
具体的,转化为ClassNode类型的第二文件包含不同的类结构信息,而正是基于ASM框架能够改变类行为,ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能根据要求生成新类。ASM Tree API中提供的工具类ClassNode、MethodNode、FieldNode、AnnotationNode可以完整描述class文件中类的结构信息,通过对这些类结构信息的分析与处理,我们可以提取出自己想要的内容,比如类的名称、类的所有方法、类的所有成员变量、类的注解等等。再通过类注解信息注解,我们可以通过以分析字节码的方式获取一个JAR、WAR包中的所有关于RESTful API文档的信息。
具体的,ASM Tree API中包括各种类结构,如果后续需要对第二文件的格式进行转换,可以在ASM Tree API中进行转换以满足工具解析的需要。各种类结构如ClassNode类结构、MethodNode方法类结构、FieldNode成员变量类结构、AnnotationNode注解类结构,对于对结构的解析,我们可以获得类结构的信息。ClassNode类结构包括类版本号、类名称、类模块信息,对于其他的类结构也包括其他信息,通过对第二文件的解析,即可获得类结构信息。
S5、所述类结构信息结合第一注解信息,解析出第二文件的RESTful API文档信息,其中,第一注解信息包括Swagger2、OpenAPI 3.0、SpringMVC的注解信息,RESTful API文档信息包括接口的名称、接口的请求类型、接口的请求地址URI、接口的输入输出参数。
进一步的,所述步骤S5包括:
S51、判断第二文件的类注解信息是否包含SpringMVC的第一接口类型注解信息,其中,所述第一接口类型注解包括@Controller、@RestController接口类型注解信息;
S52、如果第二文件的类注解信息包含SpringMVC的第一接口类型注解信息,则基于SpringMVC注解信息解析第二文件,获得基于SpringMVC框架的第一分注解信息;
S53、判断第二文件的类注解信息是否包含Swagger2、OpenAPI 3.0的第二接口类型注解信息,如果包含则基于Swagger2、OpenAPI 3.0注解信息解析第二文件获得第二分注解信息;
S54、基于第一分注解信息和第二分注解信息获得第一注解信息。
具体的,在提取RESTful API过程中,还会大量用到SpringMVC相关的注解,通过对类或方法的注解分析,可以快速定位哪些class文件是接口所在类,哪些类的方法是接口类型所在的方法,还可以提取到与这些接口相关的描述、接口类型(GET、POST等)、接口URI等相关的信息。对于Web层接口的SpringMVC Controller注解为本领域技术人员所公知的部分,如注解名称为@Controller,注解描述为Controller控制器注解,在HTTP接口请求类型注解中,注解名称为@GetMapping,注解描述为处理HTTP GET请求。对于自定义的注解可以进行预设。
同样的,已经接入Swagger2、OpenAPI 3.0项目,我们可以通过分析Swagger2、OpenAPI 3.0相关的注解,可以获取接口的描述文档等信息。同样的对于自定义的注解可以进行预设。
值得说明的是,项目中可以仅仅包括Swagger2、OpenAPI 3.0一种,项目也可能没有引入任何Swagger2、OpenAPI 3.0等框架自动生成RESTful API文档的老旧***,在配置注解时候可以根据项目的情况选择不同的注解信息。
通过分析JAR、WAR包中的class字节码文件,通过直接扫描SpringMVC的@RestController、@Controller等注解,提取出接口的名称、接口的请求类型(GET、POST、PUT、DELETE、PATCH)、接口的请求地址URI、接口的入参出参(包括参数名称、类型、是否必须、参数描述等),解析出复杂的对象参数、嵌套对象参数等信息,就能提取并自动生成RESTful API文档。
进一步的,所述方法还包括S6:将RESTful API文档信息转化为JSON格式。
进一步的,将转化为JSON格式的RESTful API文档信息存储到数据库中,存储后返回给前端页面展示。
具体的,将分析提取到的相关内容拼接成API接口实体类,并将扫描到的所有接口实体类转化为JSON格式,先持久化到MySQL数据库中,最后返回给前端页面展示。
图2为本发明的通过分析字节码自动生成接口文档装置的结构框图。本申请第二方面提出了一种基于ASM自动生成文档的装置,其特征在于,包括:
上传模块,用于上传编译打包好的JAR、WAR包;
解压扫描模块,用于解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件,其中第一格式文件包括class文件;
转化模块,用于将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;
第一获取模块,用于利用ASM Tree API的第一工具获取第二文件的类结构信息,其中第一工具包括ClassNode、MethodNode、FieldNode、AnnotationNode,所述类结构信息包括类的名称、类的所有方法、类的所有成员变量;
解析模块,用于所述类结构信息结合第一注解信息,解析出第二文件的RESTfulAPI文档信息,其中,第一注解信息包括Swagger2、OpenAPI 3.0、SpringMVC的注解信息,RESTful API文档信息包括接口的名称、接口的请求类型、接口的请求地址URI、接口的输入输出参数。
进一步的,所述装置还包括上传判断模块,用于:
S11、用户通过手动上传或持续集成或持续部署流水线自动上传JAR、WAR包;
S12、判断JAR、WAR包是否符合预设格式要求,如果符合预设格式要求,则将JAR、WAR包缓存起来,其中,所述预设格式要求包括class类型要求。
进一步的,所述装置还包括存储模块:用于将第二格式文件以Key-value的形式缓存,其中,Key存放class类名,value存放ClassNode类的结构信息。
进一步的,所述装置还包括注解模块,用于:
S51、判断第二文件的类注解信息是否包含SpringMVC的第一接口类型注解信息,其中,所述第一接口类型注解包括@Controller、@RestController接口类型注解信息;
S52、如果第二文件的类注解信息包含SpringMVC的第一接口类型注解信息,则基于SpringMVC注解信息解析第二文件,获得基于SpringMVC框架的第一分注解信息;
S53、判断第二文件的类注解信息是否包含Swagger2、OpenAPI 3.0的第二接口类型注解信息,如果包含则基于Swagger2、OpenAPI 3.0注解信息解析第二文件获得第二分注解信息;
S54、基于第一分注解信息和第二分注解信息获得第一注解信息。
进一步的,所述装置还包括转化模块:将RESTful API文档信息转化为JSON格式。
进一步的,所述装置还包括存储展示模块,用于将转化为JSON格式的RESTful API文档信息存储到数据库中,存储后返回给前端页面展示。
图3为本申请实施例提供的电子设备的结构示意图。如图3所示,该电子设备可以包括:收发器121、处理器122、存储器123。
处理器122执行存储器存储的计算机执行指令,使得处理器122执行上述实施例中的方案。处理器122可以是通用处理器,包括中央处理器CPU、网络处理器(networkprocessor,NP)等;还可以是数字信号处理器DSP、专用集成电路ASIC、现场可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
存储器123通过***总线与处理器122连接并完成相互间的通信,存储器123用于存储计算机程序指令。
收发器121可以用于获取第二文件的类结构信息和第一注解信息。
***总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。***总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。收发器用于实现数据库访问装置与其他计算机(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(randomaccess memory,RAM),也可能还包括非易失性存储器(non-volatile memory)。
本申请实施例提供的电子设备,可以是上述实施例的终端设备。
本申请实施例还提供一种运行指令的芯片,该芯片用于执行上述实施例中通过分析字节码自动生成接口文档的方法的技术方案。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行上述实施例中通过分析字节码自动生成接口文档的方法的技术方案。
本申请实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,其存储在计算机可读存储介质中,至少一个处理器可以从计算机可读存储介质读取计算机程序,至少一个处理器执行计算机程序时可实现上述实施例中通过分析字节码自动生成接口文档的方法的技术方案。
本发明的有益效果为:在不修改项目的任何源代码情况下,不需编写对应的OpenAPI 3.0注解,不依赖于Java服务的启动运行时,直接扫描JAR、WAR包中的class文件,通过ASM字节码工具扫描class文件自动分析并提取出RESTful API文档信息。主要解决一些没有引入Swagger框架、不想修改源码造成对业务代码的侵入,而又想获取***RESTfulAPI文档的棘手问题,而具有Swagger2、OpenAPI 3.0框架的项目,则基于Swagger2、OpenAPI3.0注解获得RESTful API文档信息。
值得说明的是,本申请所涉及数据采集及迁移行为都已经经过用户的同意,并且为申请人进行正常的经营活动所必需。对于采集后的数据申请人进行了匿名化、保密等脱敏处理,并相应设置了数据的访问权限以确保不会泄露用户的隐私,本申请涉及的数据合规措施仅做列举,其他相关的数据合规措施申请人也有设置。申请人所进行的数据处理活动符合数据安全法与个人信息保护法等法律法规的规定。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
本领域技术人员可以进一步意识到,结合本文的实施例的算法步骤,能够以电子硬件、计算机软件或二者结合的方式实现,且这些功能究竟以硬件还是软件的方式执行,取决于技术方案的特定应用和设计约束条件,本领域技术人员可以对每个特定的应用使用不同方法实现所描述的功能,但是这种实现不应认为超出本发明的范围。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
以上所述仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换等都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (10)
1.一种通过分析字节码自动生成接口文档的方法,其特征在于,包括:
S1、上传编译打包好的JAR、WAR包;
S2、解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件,其中第一格式文件包括class文件;
S3、将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;
S4、利用ASM Tree API的第一工具获取第二文件的类结构信息,其中,第一工具包括ClassNode、MethodNode、FieldNode、AnnotationNode,所述类结构信息包括类的名称、类的所有方法、类的所有成员变量、类注解信息等;
S5、所述类结构信息结合第一注解信息,解析出第二文件的RESTfulAPI文档信息,其中,第一注解信息包括Swagger2、OpenAPI 3.0、SpringMVC的注解信息,RESTfulAPI文档信息包括接口的名称、接口的请求类型、接口的请求地址URI、接口的输入输出参数。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1包括:
S11、用户通过手动上传或持续集成或持续部署流水线自动上传JAR、WAR包;
S12、判断JAR、WAR包是否符合预设格式要求,如果符合预设格式要求,则将JAR、WAR包缓存起来,其中,所述预设格式要求包括class类型要求。
3.根据权利要求1所述的方法,其特征在于,所述步骤S3包括:将第二格式文件以Key-value的形式缓存,其中,Key存放class类名,value存放ClassNode类的结构信息。
4.根据权利要求1所述的方法,其特征在于,所述步骤S5包括:
S51、判断第二文件的类注解信息是否包含SpringMVC的第一接口类型注解信息,其中,所述第一接口类型注解包括@Controller、@RestController接口类型注解信息;
S52、如果第二文件的类注解信息包含SpringMVC的第一接口类型注解信息,则基于SpringMVC注解信息解析第二文件,获得基于SpringMVC框架的第一分注解信息;
S53、判断第二文件的类注解信息是否包含Swagger2、OpenAPI 3.0的第二接口类型注解信息,如果包含则基于Swagger2、OpenAPI 3.0注解信息解析第二文件获得第二分注解信息;
S54、基于第一分注解信息和第二分注解信息获得第一注解信息。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括S6:将RESTfulAPI文档信息转化为JSON格式。
6.根据权利要求5所述的方法,其特征在于,将转化为JSON格式的RESTful API文档信息存储到数据库中,存储后返回给前端页面展示。
7.一种通过分析字节码自动生成接口文档的装置,其特征在于,包括:
上传模块,用于上传编译打包好的JAR、WAR包;
解压扫描模块,用于解压JAR、WAR包,通过ASM字节码工具扫描并提取出JAR、WAR包中的第一格式文件,其中第一格式文件包括class文件;
转化模块,用于将第一格式文件转化为ClassNode类型,将ClassNode类型的第一格式的文件命名为第二文件;
第一获取模块,用于利用ASM Tree API的第一工具获取第二文件的类结构信息,其中第一工具包括ClassNode、MethodNode、FieldNode、AnnotationNode,所述类结构信息包括类的名称、类的所有方法、类的所有成员变量;
解析模块,用于所述类结构信息结合第一注解信息,解析出第二文件的RESTful API文档信息,其中,第一注解信息包括Swagger2、OpenAPI 3.0、SpringMVC的注解信息,RESTfulAPI文档信息包括接口的名称、接口的请求类型、接口的请求地址URI、接口的输入输出参数。
8.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-6中任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-6中任一项所述的方法。
10.一种计算机程序产品,其特征在于,包括计算机程序,该计算机程序被处理器执行时实现权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211410534.2A CN115576536A (zh) | 2022-11-11 | 2022-11-11 | 一种通过分析字节码自动生成接口文档的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211410534.2A CN115576536A (zh) | 2022-11-11 | 2022-11-11 | 一种通过分析字节码自动生成接口文档的方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115576536A true CN115576536A (zh) | 2023-01-06 |
Family
ID=84588769
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211410534.2A Pending CN115576536A (zh) | 2022-11-11 | 2022-11-11 | 一种通过分析字节码自动生成接口文档的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115576536A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501306A (zh) * | 2023-06-29 | 2023-07-28 | 深圳市银云信息技术有限公司 | 一种基于自然语言描述生成接口文档代码的方法 |
-
2022
- 2022-11-11 CN CN202211410534.2A patent/CN115576536A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501306A (zh) * | 2023-06-29 | 2023-07-28 | 深圳市银云信息技术有限公司 | 一种基于自然语言描述生成接口文档代码的方法 |
CN116501306B (zh) * | 2023-06-29 | 2024-03-26 | 深圳市银云信息技术有限公司 | 一种基于自然语言描述生成接口文档代码的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20150378864A1 (en) | Systems and methods for instrumenting applications for performance monitoring | |
US20070067418A1 (en) | Object oriented web application framework | |
US8645916B2 (en) | Crunching dynamically generated script files | |
US8561088B2 (en) | Registering network applications with an API framework | |
CN110321504B (zh) | 一种页面处理方法及装置 | |
CN111680253A (zh) | 页面应用数据包生成方法、装置、计算机设备及存储介质 | |
US20070256048A1 (en) | Loading application resources | |
KR20130105287A (ko) | 클라이언트 어플리케이션 및 웹 페이지 통합 | |
US10506017B2 (en) | Manipulation of PDF file content through HTTP requests | |
CN113704590B (zh) | 网页数据获取方法、装置、电子设备及存储介质 | |
US9571557B2 (en) | Script caching method and information processing device utilizing the same | |
CN114237651A (zh) | 云原生应用的安装方法、装置、电子设备和介质 | |
CN112667246A (zh) | 应用功能扩展的方法、装置及电子设备 | |
CN114297700B (zh) | 动静态结合的移动应用隐私协议提取方法及相关设备 | |
CN115576536A (zh) | 一种通过分析字节码自动生成接口文档的方法及*** | |
JP5039946B2 (ja) | クライアント装置およびサーバ装置の間の通信を中継する技術 | |
US10567472B2 (en) | Manipulation of PDF files using HTML authoring tools | |
US10353700B1 (en) | Code base sharing between standalone and web-based versions of an application via an emulated network communication channel | |
CN111124525A (zh) | 一种网站功能实现方法和装置 | |
KR20170105325A (ko) | 소스 코드 분석 방법과 이를 수행하기 위한 시스템 및 장치 | |
CN113377376A (zh) | 数据包生成方法、数据包生成装置、电子设备及存储介质 | |
CN115525305A (zh) | 数据处理、应用启动方法、装置、计算机设备和存储介质 | |
US10635851B2 (en) | Virtualized server side rendering | |
US20090313628A1 (en) | Dynamically batching remote object model commands | |
CN114816385B (zh) | 一种异构***的集成方法、装置和设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |