一种接口文档生成方法、系统、计算设备以及存储介质与流程

专利查询2023-9-18  132



1.本发明涉及计算机和互联网领域,具体涉及一种基于javaagent技术自动生成spring系项目接口文档的方法、系统、计算设备以及存储介质。


背景技术:

2.在用java开发的项目中,关于项目的接口文档的维护要占用开发人员的20%至30%的时间。项目又称应用、应用程序等,在本文中的项目是指基于springboot开发的java web应用,其中,springboot是一种快速开发java应用程序的集成框架。
3.目前大多数的接口文档采用swagger、apizza等接口文档生成工具去生成,但是需要由开发人员在代码中维护大量的注释及字段说明,代码侵入较高,费时费力,而且存在字段命名和说明不统一,以及存在文档描述和代码实现逻辑不一致的情况。若需要进行接口测试,还需要通过额外的工具如postman或自行开发脚本去完成。
4.而且随着技术的发展,现在大多数的java应用都是采用springboot框架、利用微服务的思想去构建自己的应用程序,这使得项目更加分散,接口文档更加不好维护。
5.因此,如何提供一种无侵入式、自动生成接口文档的方案就成为亟待解决的技术问题。


技术实现要素:

6.鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的接口文档生成方法、系统、计算设备以及存储介质。
7.根据本发明的一个方面,提供一种接口文档生成系统,包括接口信息获取单元、消息队列和接口文档平台,所述接口信息获取单元部署在计算设备中,并包括对代理单元的引用,所述计算设备中还部署有目标项目,其中:
8.所述接口信息获取单元适于在所述目标项目启动后启动,并在将自身绑定(attach)到所述目标项目后加载所述代理单元,由所述代理单元基于所述目标项目所加载的类,获取所述目标项目中web接口的接口信息,将所述接口信息封装成接口对象后上报到所述消息队列;
9.所述接口文档平台适于从消息队列中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成所述web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目,其中,所述接口基础信息表和所述接口参数表构成所述目标项目的接口文档。
10.可选地,根据本发明的接口文档生成系统,其中,所述计算设备中存储有目标项目的启动脚本,所述启动脚本适于:启动目标项目;将所述目标项目的项目名称作为参数传入到接口信息获取单元,并启动所述接口信息获取单元。
11.可选地,根据本发明的接口文档生成系统,其中,所述接口信息获取单元进一步适于:获取当前的jvm列表;遍历所述jvm列表,根据传入的项目名称获取目标项目的进程id;
通过virtualmachine.attach方法绑定该进程id。
12.可选地,根据本发明的接口文档生成系统,其中,所述web接口的接口信息包括所属项目的项目名称、接口uri、请求类型和请求参数,所述代理单元适于按照如下方式获取目标项目中web接口的接口信息:解析出目标项目的项目名称;从目标项目已加载的类中过滤出含有controller或者restcontroller注解的目标类;获取目标类上通过requestmapping注解的value属性,作为接口uri的第一部分;遍历目标类中具有requestmapping、getmapping、postmapping、putmapping、deletemapping注解的目标方法;解析目标方法的参数名称和参数类型,作为web接口的请求参数的参数名称和参数类型,解析目标方法的注解的value属性作为接口uri的第二部分和method属性作为web接口的请求类型。
13.可选地,根据本发明的接口文档生成系统,其中,所述接口基础信息表包括如下字段:接口id;项目名称;接口uri;请求类型。
14.可选地,根据本发明的接口文档生成系统,其中,所述接口参数表包括如下字段:接口id;参数名称;参数类型;参数描述。
15.可选地,根据本发明的接口文档生成系统,其中,所述接口文档平台中还包括元字段表,所述元字段表包括如下字段:参数id;参数名称;参数描述。
16.可选地,根据本发明的接口文档生成系统,其中,所述接口文档平台进一步适于按照如下方式生成接口参数表:从解析的接口信息中得到参数名称和参数类型;基于参数名称,从元字段表中获取对应的参数描述;将参数名称、参数类型和参数描述添加到web接口的接口参数表中。
17.可选地,根据本发明的接口文档生成系统,其中,所述目标项目为基于springboot开发的java web应用。
18.根据本发明的另一个方面,提供一种接口文档生成方法,在上述的接口文档生成系统中执行,并包括如下步骤:
19.启动目标项目;
20.启动接口信息获取单元,将所述接口信息单元绑定(attach)到所述目标项目;
21.接口信息获取单元加载代理单元;
22.代理单元基于所述目标项目所加载的类,获取所述目标项目中web接口的接口信息,将所述接口信息封装成接口对象后上报到消息队列;
23.接口文档平台从消息队列中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成所述web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目,其中,所述接口基础信息表和所述接口参数表构成所述目标项目的接口文档。
24.根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行上述方法的指令。
25.根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行上述的方法。
26.本发明实施例提供了一种基于javaagent技术加业务元字段管理,无侵入自动生成接口文档,并提供自动化mock的方案,具有以下特性:
27.代码无侵入,无需开发人员在代码中编写说明;
28.自动化生成接口文档,基于项目部署实时更新;
29.接口字段命名统一、说明统一,不会出现歧义;
30.自动生成测试case,自动化mock。
31.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
32.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
33.图1示出了根据本发明一个实施例的接口文档生成系统100的示意图;
34.图2示出了根据本发明一个实施例的计算设备200的示意图;
35.图3示出了根据本发明一个实施例的接口文档生成方法300的流程图;
36.图4示出了本发明实施例中接口信息描述的一个可视化界面。
具体实施方式
37.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
38.图1是根据本发明一个实施例的接口文档生成系统100的示意图。参照图1,系统100包括接口信息获取单元112、消息队列122和接口文档平台130。接口信息获取单元112部署在计算设备110中,计算设备110中还部署有目标项目116,接口信息获取单元112包括对代理单元114的引用。
39.目标项目116是待生成接口文档的项目,本发明实施例中,目标项目116可以是基于springboot开发的java web应用。在一个或多个计算设备中可以驻留有一个或多个目标项目116,例如test-api项目、test-api2项目、xx-api项目。
40.可以为目标项目116设置启动脚本,并将启动脚本和接口信息获取单元112引用到目标项目116中。启动脚本的执行逻辑是,先启动目标项目116,然后,将目标项目116的项目名称作为参数传入到接口信息获取单元112,并启动接口信息获取单元112。
41.接口信息获取单元112启动后,先将自身绑定(attach)到目标项目116,然后加载代理单元114,由代理单元114基于目标项目116所加载的类,获取目标项目116中web接口的接口信息,将接口信息封装成接口对象后上报到消息队列122。
42.在本发明实施例中,接口信息获取单元112和代理单元114可以为java程序,并基于springboot开发。例如,接口信息获取单元112为后文所述的api-doc-main.jar,代理单元114为后文所述的java-doc-agent.jar。
43.具体地,接口信息获取单元112在启动后,可以获取计算设备110中当前的jvm列
表,并遍历所述jvm列表,根据传入的项目名称获取目标项目的进程id,然后,通过virtualmachine.attach方法绑定该进程id。
44.通常,web接口的接口信息包括该接口所属项目的项目名称、接口uri、请求类型(即请求方法类型)、请求参数和返回参数。关于接口参数,本发明仅涉及请求参数的处理,不涉及返回参数的处理,返回参数的处理可参考相关现有技术。请求方法类型主要包括:新增(post)、修改(put)、删除(delete)和获取(get)。
45.代理单元114在启动后,可以按照如下方式获取目标项目116中web接口的接口信息:
46.1)解析出目标项目的项目名称;
47.2)从目标项目已加载的类中过滤出含有controller或者restcontroller注解的目标类;
48.3)获取目标类上通过requestmapping注解的value属性,作为接口uri的第一部分;
49.4)遍历目标类中具有requestmapping、getmapping、postmapping、putmapping、deletemapping注解的目标方法,可能有多个,每个目标方法对应一个不同的web接口;
50.5)对于每个目标方法,解析该目标方法的参数名称和参数类型,将解析出的参数名称作为web接口的请求参数的参数名称,将解析出的参数类型作为该请求参数的参数类型;解析该目标方法的注解的value属性,作为接口uri的第二部分,解析该目标方法的注解的method属性,作为web接口的请求类型。
51.后续,通过顺序拼接接口uri的第一部分和第二部分,就能够得到该web接口的接口uri。
52.消息服务器集群120,例如可以实现为kafka集群,集群中可以包括一个或多个消息队列122,这样,不同的目标项目的接口信息就可以对应不同的消息队列。代理单元114将接口信息封装成接口对象并上报到消息队列122之后,接口文档平台130可以从消息队列122中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目。
53.具体地,接口文档平台130中可以包括消息消费模块131、文档生成模块132、接口基础信息表133和接口参数表134。接口基础信息133表例如包括如下字段:接口id;项目名称;接口uri;请求类型。接口参数表134例如包括如下字段:接口id;参数名称;参数类型;参数描述。在本发明实施例中,目标项目的每个web接口在接口基础信息表中有一条记录,每个web接口对应一个接口参数表,目标项目如果有多个web接口,则会有多个接口参数表。接口基础信息表和一个或多个接口参数表就构成了目标项目的接口文档。
54.消息消费模块131对消息队列122中的消息进行消费,从而获取接口对象,并将接口对象解析为接口信息,解析出的接口信息包括web接口所属项目的项目名称、接口uri(uri的第一部分和第二部分)、请求类型和请求参数(包括参数名称和参数类型)。
55.文档生成模块132基于解析的接口信息,生成web接口的接口参数表,即生成一个表格,将接口id、参数名称和参数类型添加到该表格中,并且,在接口基础信息表中添加一条记录(接口id、项目名称、接口uri)其中,接口uri由uri的第一部分和第二部分顺序拼接而成。
56.进一步,接口文档平台130中还可以包括元字段表135,元字段表135可以包括如下字段:参数id、参数名称、参数描述。参数描述例如为参数的中文含义。
57.文档生成模块132从解析的接口信息中得到参数名称和参数类型之后,还可以基于参数名称,从元字段表135中获取与该参数名称对应的参数描述,例如参数的中文含义,并将参数名称、参数类型和参数描述添加到web接口的接口参数表中。
58.以下给出本发明的一个应用实例。
59.1)新建一个命名为java-doc-agent的java项目。下文提到的jda均指该项目,下文提的所有项目均为使用maven工具进行管理。
60.2)在jda中创建一个apidocagent类,在该类中创建一个公共、静态、无返回值且方法名为agentmain、入参为string和instrumentation的方法,示例代码如下:
[0061][0062]
其中,instrumentation为jdk提供的基于jvmti机制的java实现,该类提供控制java语言代码的服务。使用instrumentation,开发者可以构建一个独立于应用程序的代理程序(agent),用来监测和协助运行在jvm上的程序,并能够替换和修改某些类的定义。
[0063]
3)在agentmain方法中编写具体的逻辑:
[0064]
通过agentargs解析出传入的的项目名称,例如:test-api;
[0065]
通过instrumentation.getallloadedclasses()方法获取jvm中所有已经加载的类,遍历并过滤出含有controller或者restcontroller注解的类。获取当前类上requestmapping注解的value属性,例如requestmapping(value="/tag"),获取的value值为/tag。
[0066]
4)遍历所过滤出来的类中具有requestmapping、getmapping、postmapping、putmapping、deletemapping注解的public的方法。解析注解的value(uri)、method(请求类型)属性值,以及方法的参数类型和参数名称,示例性代码如下:
[0067][0068]
以上是value为"/options",method为"get",参数类型为long、参数名为userid和参数类型为string、参数名为source的一个public方法。
[0069]
5)将项目名称和以上步骤解析的属性值、参数类型、参数名称封装成对象并拼接成json串,示例如下:
[0070][0071]
然后将该json串上报到kakfa中。
[0072]
6)在java-doc-agent项目创建mainfest.mf文件(元信息配置文件)并配置信息。示例性代码如下:
[0073]
manifest-version:1.0
[0074]
agent-class:com.javadocagent
[0075]
can-redefine-classes:true
[0076]
can-retransform-classes:true
[0077]
利用打包工具,如maven,将项目打包成java-doc-agent.jar上传到maven仓库。
[0078]
7)新建一个项目,通过maven的pom文件并将java-doc-agent.jar引入到该项目中。在该项目中新建一个具有main方法的agentlaunch类,在该main方法中,通过jdk提供的virtualmachine类获取当前的jvm列表,遍历该列表并根据传入的项目名称获取进程id。通过virtualmachine.attach方法绑定改进程id,然后调用loadagent方法,该方法需要传入java-doc-agent.jar的路径和项目名称。利用打包工具将该项目打包成api-doc-main.jar并上传到maven仓库。
[0079]
8)接口文档平台为一个后台管理系统,主要提供团队粒度的权限划分、元字段管理、项目管理、接口信息管理。
[0080]
9)项目管理可以定义要部署的项目属性,如项目id、项目名称、项目描述及对应的
生产域名、测试域名等。项目基本信息表的表结构示例如下(每个项目在表中有一个条目):
[0081][0082]
数据示例如下表:
[0083][0084][0085]
10)在元字段管理中,每个团队负责人可以在接口文档平台创建自己团队的元字段库。元字段表结构示例如下:
[0086][0087]
数据示例如下
[0088]
idparam_nameparam_descteam_idteam_nameis_del1userid用户名称1测试团队02payamount支付金额1测试团队03source来源1测试团队0
[0089]
开发人员在开发接口的过程中,参数均从元字段中表获取,保证参数定义统一,无歧义。若元字段有缺失,则新增。
[0090]
11)接口信息管理负责维护接口信息。接口基础信息表结构示例如下:
[0091]
[0092][0093]
数据示例如下:
[0094]
idproject_idproject_nameapi_descapi_uriapi_methodis_del11测试项目获取用户选项/tag/optionsget0
[0095]
其中,接口参数表结构示例如下:
[0096][0097]
数据示例如下
[0098]
idapi_idparam_nameparam_descparam_typeis_del11useid用户姓名long021source来源string0
[0099]
12)编写统一的启动脚本,具体逻辑:在启动目标项目后,将当前目标项目的名称
例如test-api作为参数传入api-doc-main.jar,并启动api-doc-main.jar。
[0100]
13)开发人员通过pom文件将api-doc-main.jar以及启动脚本引用到目标项目中,部署、启动。则会执行java-doc-agent.jar中的逻辑,接口文档平台中消费的kakfa信息,根据json串的项目名称项目基本信息表,然后根据查询到的项目id和json串中context、uri参数和接口基础信息表、接口参数表做增量对比,若有不同则更新。
[0101]
可以将未命中的参数额外发送给项目管理平台,确认是新字段还是开发人员命名错误。
[0102]
14)从接口基础信息表和接口参数表中读取相关数据,解析自动生成对应的接口信息描述,并提供可视化页面,如图4所示。
[0103]
在图4中,接口信息具体如下:
[0104]
所述项目:测试项目
[0105]
当前接口:/tag/options
[0106]
生产环境url:product.api.com/tag/options
[0107]
测试环境url:test.api.com/tag/options
[0108]
请求方法类型:[get]
[0109]
参数名称
ꢀꢀꢀꢀ
参数类型
ꢀꢀꢀ
中文含义(参数描述)
[0110]
source
ꢀꢀꢀꢀꢀꢀꢀ
string
ꢀꢀꢀꢀꢀ
来源
[0111]
userid
ꢀꢀꢀꢀꢀꢀꢀ
long
ꢀꢀꢀꢀꢀꢀꢀ
用户id
[0112]
15)根据接口基础信息表和接口参数表中的接口信息,生成多种值组合的测试用例(case),如不符合原有的参数类型的case、任意个数参数的case等,自动化mock调用对应的接口url,并将mock后的参数及其对应的结果分类,输出给到测试人员。
[0113]
本方案降低了开发人员对于接口文档的维护工作,通过javaagent技术实现了无侵入式的接口文档自动化生成,同时保证团队内字段名命名一致、无歧义,让开发更加专注于业务逻辑的编写,并提供接口的自动化case生成、mock,让测试更加专注于业务逻辑的测试,对于临界值、合法值等测试由系统自动完成,提高了开发、测试效率。
[0114]
本发明实施例的接口文档生成系统100中的计算设备110、消息服务器系统120中的服务器、接口管理平台130中的相关设备或模块,均可以实现为图2所示的计算设备。
[0115]
图2示出了根据本发明一个实施例的计算设备200的结构图。如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
[0116]
取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μp)、微控制器(μc)、数字信息处理器(dsp)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
[0117]
取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统220、一个或者多个应用222以及程序数据224。应用222实际上是多
条程序指令,其用于指示处理器204执行相应的操作。在一些实施方式中,应用222可以布置为在操作系统上使得处理器204利用程序数据224进行操作。
[0118]
计算设备200还可以包括储存设备232和储存接口总线234,储存设备232包括可移除储存器236和不可移除储存器238,可移除储存器236和不可移除储存器238均与储存接口总线234连接。
[0119]
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个a/v端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个i/o端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
[0120]
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(rf)、微波、红外(ir)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
[0121]
在根据本发明的计算设备200中,应用222包括执行接口文档生成方法300的多条程序指令。
[0122]
图3示出了根据本发明一个实施例的接口文档生成方法300的流程图。方法300适于在接口文档生成系统中100执行。参照图3,方法300可以包括如下步骤:
[0123]
步骤s302,启动目标项目;
[0124]
步骤s304,启动接口信息获取单元,将所述接口信息单元绑定(attach)到所述目标项目;
[0125]
步骤s306,接口信息获取单元加载代理单元;
[0126]
步骤s308,代理单元基于所述目标项目所加载的类,获取所述目标项目中web接口的接口信息,将所述接口信息封装成接口对象后上报到消息队列;
[0127]
步骤s310,接口文档平台从消息队列中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成所述web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目,其中,所述接口基础信息表和所述接口参数表构成所述目标项目的接口文档。
[0128]
步骤s302~s310的具体处理,可参照上文关于接口文档生成系统100的描述,这里不做赘述。
[0129]
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可
移动硬盘、u盘、软盘、cd-rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
[0130]
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的方法。
[0131]
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
[0132]
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的较佳实施方式。
[0133]
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0134]
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。
[0135]
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
[0136]
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0137]
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
[0138]
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行
所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
[0139]
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0140]
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。

技术特征:
1.一种接口文档生成系统,包括接口信息获取单元、消息队列和接口文档平台,所述接口信息获取单元部署在计算设备中,并包括对代理单元的引用,所述计算设备中还部署有目标项目,其中:所述接口信息获取单元适于在所述目标项目启动后启动,并在将自身绑定(attach)到所述目标项目后加载所述代理单元,由所述代理单元基于所述目标项目所加载的类,获取所述目标项目中web接口的接口信息,将所述接口信息封装成接口对象后上报到所述消息队列;所述接口文档平台适于从消息队列中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成所述web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目,其中,所述接口基础信息表和所述接口参数表构成所述目标项目的接口文档。2.如权利要求1所述的系统,其中,所述计算设备中存储有目标项目的启动脚本,所述启动脚本适于:启动目标项目;将所述目标项目的项目名称作为参数传入到接口信息获取单元,并启动所述接口信息获取单元。3.如权利要求2所述的系统,其中,所述接口信息获取单元进一步适于:获取当前的jvm列表;遍历所述jvm列表,根据传入的项目名称获取目标项目的进程id;通过virtualmachine.attach方法绑定该进程id。4.如权利要求1至3中任一项所述的系统,其中,所述web接口的接口信息包括所属项目的项目名称、接口uri、请求类型和请求参数,所述代理单元适于按照如下方式获取目标项目中web接口的接口信息:解析出目标项目的项目名称;从目标项目已加载的类中过滤出含有controller或者restcontroller注解的目标类;获取目标类上通过requestmapping注解的value属性,作为接口uri的第一部分;遍历目标类中具有requestmapping、getmapping、postmapping、putmapping、deletemapping注解的目标方法;解析目标方法的参数名称和参数类型,作为web接口的请求参数的参数名称和参数类型,解析目标方法的注解的value属性作为接口uri的第二部分和method属性作为web接口的请求类型。5.如权利要求1至4中任一项所述的系统,其中,所述接口基础信息表包括如下字段:接口id;项目名称;接口uri;请求类型;和/或,所述接口参数表包括如下字段:接口id;参数名称;参数类型;参数描述;和/或,所述接口文档平台中还包括元字段表,所述元字段表包括如下字段:参数id;参数名称;参数描述。6.如权利要求5所述的系统,其中,所述接口文档平台进一步适于按照如下方式生成接口参数表:从解析的接口信息中得到参数名称和参数类型;
基于参数名称,从元字段表中获取对应的参数描述;将参数名称、参数类型和参数描述添加到web接口的接口参数表中。7.如权利要求1至6中任一项所述的系统,其中,所述目标项目为基于springboot开发的java web应用。8.一种接口文档生成方法,在如权利要求1至7中任一项所述的接口文档生成系统中执行,并包括如下步骤:启动目标项目;启动接口信息获取单元,将所述接口信息单元绑定(attach)到所述目标项目;接口信息获取单元加载代理单元;代理单元基于所述目标项目所加载的类,获取所述目标项目中web接口的接口信息,将所述接口信息封装成接口对象后上报到消息队列;接口文档平台从消息队列中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成所述web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目,其中,所述接口基础信息表和所述接口参数表构成所述目标项目的接口文档。9.一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要8所述方法的指令。10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求8所述的方法。

技术总结
本发明公开了一种接口文档生成方法、系统、计算设备以及存储介质。接口文档生成系统包括接口信息获取单元、消息队列和接口文档平台,接口信息获取单元适于在目标项目启动后启动,并在将自身绑定到目标项目后加载代理单元,由代理单元基于所述目标项目所加载的类,获取目标项目中web接口的接口信息,将所述接口信息封装成接口对象后上报到消息队列;接口文档平台适于从消息队列中获取接口对象,将接口对象解析为接口信息后,基于解析的接口信息生成所述web接口的接口参数表,并在接口基础信息表中添加关于所述web接口的条目。信息表中添加关于所述web接口的条目。信息表中添加关于所述web接口的条目。


技术研发人员:刘标
受保护的技术使用者:车智互联(北京)科技有限公司
技术研发日:2021.12.07
技术公布日:2022/3/8

最新回复(0)