CN112650533A - 接口文档的生成方法、装置和终端设备 - Google Patents

接口文档的生成方法、装置和终端设备 Download PDF

Info

Publication number
CN112650533A
CN112650533A CN202011535639.1A CN202011535639A CN112650533A CN 112650533 A CN112650533 A CN 112650533A CN 202011535639 A CN202011535639 A CN 202011535639A CN 112650533 A CN112650533 A CN 112650533A
Authority
CN
China
Prior art keywords
field
class
request
interface
interface document
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.)
Granted
Application number
CN202011535639.1A
Other languages
English (en)
Other versions
CN112650533B (zh
Inventor
李宗波
张卓韬
杨永帮
邬秋元
陈晓丹
张涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202011535639.1A priority Critical patent/CN112650533B/zh
Publication of CN112650533A publication Critical patent/CN112650533A/zh
Application granted granted Critical
Publication of CN112650533B publication Critical patent/CN112650533B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Library & Information Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种接口文档的生成方法、装置和终端设备,该方法包括:在接收到用于生成接口文档的生成请求后,将根据该生成请求,确定目标程序代码,然后根据目标程序代码,分别确定请求字段和返回字段,并通过Java反射机制,分别获取请求字段和返回字段各自对应的字段名称和字段类型,再根据请求字段和返回字段各自对应的字段名称和字段类型,生成目标程序代码对应的接口文档。本申请提供的接口文档的生成方法、装置和终端设备可以避免用户手动编写接口文档的现象,从而不仅可以提高接口文档生成的效率,而且可以降低软件***开发的成本。

Description

接口文档的生成方法、装置和终端设备
技术领域
本申请涉及计算机技术,尤其涉及一种接口文档的生成方法、装置和终端设备。
背景技术
随着计算机技术的发展,越来越多的技术(大数据、分布式、人工智能等)应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对服务请求技术提出了更高的要求。目前,在金融科技领域,随着计算机技术的不断发展,软件***的复杂度也越来越高,程序代码量也越来越大。
现有技术中,由于软件***可能存在大量的程序代码,往往需要多名开发人员共同协作进行软件***的开发。为了便于不同的开发人员互相了解代码内容,开发人员除了编写代码之外,还需要花费大量时间编写与软件***的程序代码对应的接口文档,从而不仅导致生成接口文档的效率较低,而且造成软件***的开发成本较高。
发明内容
为解决现有技术中存在的问题,本申请提供一种接口文档的生成方法、装置和终端设备,不仅可以提高接口文档的生成效率,而且降低了软件***的开发成本。
第一方面,本申请实施例提供了一种接口文档的生成方法,该接口文档的生成方法可以包括:
接收用于生成接口文档的生成请求。
根据所述生成请求,确定目标程序代码。
根据所述目标程序代码,分别确定请求字段和返回字段。
通过Java反射机制,分别获取所述请求字段和所述返回字段各自对应的字段名称和字段类型。
根据所述请求字段和所述返回字段各自对应的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
在一种可能的实现方式中,所述根据所述请求字段和所述返回字段各自对应的字段名称和字段类型,生成所述目标程序代码对应的接口文档,包括:
针对所述请求字段和所述返回字段中的任一字段,判断所述字段的字段类型是否为普通数据类型,若所述字段的字段类型不为普通数据类型,则根据所述字段的字段类型,确定所述字段中包括的子字段,并获取所述子字段对应的字段名称和字段类型,将所述子字段确定为新的字段,并重复执行此步骤,直至所述字段的字段类型为普通数据类型。
根据所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
在一种可能的实现方式中,所述根据所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,生成所述目标程序代码对应的接口文档,包括:
获取与所述目标程序代码对应的预设模板。
确定所有字段以及所有子字段之间的层级关系。
将所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,按照所述层级关系,导入所述预设模板中,生成所述接口文档。
在一种可能的实现方式中,根据所述目标程序代码,确定请求字段,包括:
获取所述目标程序代码中多个类。
针对每个类,若所述类对应的代码注解中包括第一标识符标识的注解信息,且根据所述第一标识符标识的注解信息确定所述类为请求类,则将所述请求类中的字段确定为所述请求字段。
在一种可能的实现方式中,所述方法还包括:
若所述多个类中每个类对应的代码注解中均不包括所述第一标识符标识的注解信息,则判断各所述类对应的代码注解中是否包括预设方法。
若所述多个类中存在第一类对应的代码注解中包括预设方法,则获取所述预设方法入参中的第二标识符标识的注解信息。
将所述第二标识符标识的注解信息中的字段,确定为所述请求字段。
在一种可能的实现方式中,根据所述目标程序代码,确定返回字段,包括:
获取所述目标程序代码中多个类。
针对每个类,判断所述类对应的代码注解中是否包括第三标识符标识的注解信息。
若所述类对应的代码注解中包括第三标识符标识的注解信息,则判断所述第三标识符标识的注解信息中是否存在预设类。
若存在所述预设类,则将所述预设类中的字段确定为所述返回字段。
在一种可能的实现方式中,所述方法还包括:
若所有所述第三标识符标识的注解信息中均不存在所述预设类,则根据预设规则,对所有类的类名进行匹配。
若匹配成功,则将匹配成功的类中的字段确定为所述返回字段。
若匹配失败,则获取所述所有类中具有第一标识符标识的注解信息的第二类,根据所述第一标识符标识的注解信息确定所述第二类中的请求类,并获取所述请求类对应的接口标识,根据所述第一标识符标识的注解信息确定所述第二类中的非请求类,并将所述非请求类对应的接口标识与所述请求类对应的接口标识相同的非请求类中的字段确定为所述返回字段。
在一种可能的实现方式中,所述方法还包括:
根据所述目标程序代码中多个类所对应的代码注解,获取所述目标程序代码对应的接口信息,所述接口信息包括接口标识、接口名称和接口的描述信息中的至少一种。
将所述接口信息添加在所述接口文档中。
在一种可能的实现方式中,所述方法还包括:
若所述字段中包括有与参数校验相关的注解信息,则获取所述与参数校验相关的注解信息中的属性值。
将所述属性值确定为所述字段的取值描述信息,并将所述字段和所述取值描述信息之间的对应关系添加在所述接口文档中。
在一种可能的实现方式中,所述方法还包括:
根据所述请求字段和返回字段,生成简单的Java对象POJO对应的Java文件。
将所述POJO对应的Java文件发送给云端服务器。
第二方面,本申请实施例还提供了一种接口文档的生成装置,该接口文档的生成装置可以包括:
接收单元,用于接收用于生成接口文档的生成请求。
处理单元,用于根据所述生成请求,确定目标程序代码,并根据所述目标程序代码,分别确定请求字段和返回字段。
获取单元,用于通过Java反射机制,分别获取所述请求字段和所述返回字段各自对应的字段名称和字段类型。
生成单元,用于根据所述请求字段和所述返回字段各自对应的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
在一种可能的实现方式中,所述生成单元,具体用于针对所述请求字段和所述返回字段中的任一字段,判断所述字段的字段类型是否为普通数据类型,若所述字段的字段类型不为普通数据类型,则根据所述字段的字段类型,确定所述字段中包括的子字段,并获取所述子字段对应的字段名称和字段类型,将所述子字段确定为新的字段,并重复执行此步骤,直至所述字段的字段类型为普通数据类型;并根据所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
在一种可能的实现方式中,所述生成单元,具体用于获取与所述目标程序代码对应的预设模板;确定所有字段以及所有子字段之间的层级关系;并将所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,按照所述层级关系,导入所述预设模板中,生成所述接口文档。
在一种可能的实现方式中,所述处理单元,具体用于获取所述目标程序代码中多个类;针对每个类,若所述类对应的代码注解中包括第一标识符标识的注解信息,且根据所述第一标识符标识的注解信息确定所述类为请求类,则将所述请求类中的字段确定为所述请求字段。
在一种可能的实现方式中,所述处理单元,还用于若所述多个类中每个类对应的代码注解中均不包括所述第一标识符标识的注解信息,则判断各所述类对应的代码注解中是否包括预设方法。
所述获取单元,还用于若所述多个类中存在第一类对应的代码注解中包括预设方法,则获取所述预设方法入参中的第二标识符标识的注解信息。
所述处理单元,还用于将所述第二标识符标识的注解信息中的字段,确定为所述请求字段。
在一种可能的实现方式中,所述处理单元,具体用于获取所述目标程序代码中多个类;针对每个类,判断所述类对应的代码注解中是否包括第三标识符标识的注解信息;并若所述类对应的代码注解中包括第三标识符标识的注解信息,则判断所述第三标识符标识的注解信息中是否存在预设类;若存在所述预设类,则将所述预设类中的字段确定为所述返回字段。
在一种可能的实现方式中,所述处理单元,还用于若所有所述第三标识符标识的注解信息中均不存在所述预设类,则根据预设规则,对所有类的类名进行匹配;若匹配成功,则将匹配成功的类中的字段确定为所述返回字段;若匹配失败,则获取所述所有类中具有第一标识符标识的注解信息的第二类,根据所述第一标识符标识的注解信息确定所述第二类中的请求类,并获取所述请求类对应的接口标识,根据所述第一标识符标识的注解信息确定所述第二类中的非请求类,并将所述非请求类对应的接口标识与所述请求类对应的接口标识相同的非请求类中的字段确定为所述返回字段。
在一种可能的实现方式中,所述获取单元,还用于根据所述目标程序代码中多个类所对应的代码注解,获取所述目标程序代码对应的接口信息,所述接口信息包括接口标识、接口名称和接口的描述信息中的至少一种。
所述处理单元,还用于将所述接口信息添加在所述接口文档中。
在一种可能的实现方式中,所述获取单元,还用于若所述字段中包括有与参数校验相关的注解信息,则获取所述与参数校验相关的注解信息中的属性值。
所述处理单元,还用于将所述属性值确定为所述字段的取值描述信息,并将所述字段和所述取值描述信息之间的对应关系添加在所述接口文档中。
在一种可能的实现方式中,所述装置还包括发送单元。
所述生成单元,还用于根据所述请求字段和返回字段,生成简单的Java对象POJO对应的Java文件。
所述发送单元,用于将所述POJO对应的Java文件发送给云端服务器。
第三方面,本申请实施例还提供了一种终端设备,该终端设备可以包括处理器和存储器;其中,
所述存储器,用于存储计算机程序。
所述处理器,用于读取所述存储器存储的计算机程序,并根据所述存储器中的计算机程序执行上述第一方面任一种可能的实现方式中所述的接口文档的生成方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述第一方面任一种可能的实现方式中所述的接口文档的生成方法。
第五方面,本申请实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述第一方面任一种可能的实现方式所述的接口文档的生成方法。
本申请提供的接口文档的生成方法、装置和终端设备,在接收到用于生成接口文档的生成请求后,将根据该生成请求,确定目标程序代码,然后根据目标程序代码,分别确定请求字段和返回字段,并通过Java反射机制,分别获取请求字段和返回字段各自对应的字段名称和字段类型,再根据请求字段和返回字段各自对应的字段名称和字段类型,生成目标程序代码对应的接口文档。一方面,可以避免用户手动编写接口文档的现象,从而不仅可以提高接口文档生成的效率,而且可以降低软件***开发的成本。另一方面,由于通过Java反射机制,通过对字段的深度遍历,可以获取到请求字段和返回字段各自对应的字段名称和字段类型,可以支持泛型、列表以及对象嵌套等多种场景下生成接口文档,从而在某些字段中不存在注解信息时也可以生成接口文档,可以极大减少人工干预成本,避免了生成接口文档时需要强依赖于注解信息的现象。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的接口文档的生成方法的***架构图;
图2为本申请实施例提供的一种接口文档的生成方法的流程示意图;
图3为接口文档的结构示意图;
图4为本申请实施例提供的一种接口文档的生成装置的结构示意图;
图5为本申请实施例提供的一种终端设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”及“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了帮助本领域技术人员更好地理解本申请的技术方案,下面将对本申请技术方案涉及的相关内容进行介绍。
(1)注解(Annotation),是JDK5.0中引入的一种注释机制,其可被标记于类、方法、变量、参数和包等领域。
(2)Java反射机制,是指在运行状态中,对任意一个类,都能够知道该类的所有属性和方法,对任何一个对象,都能够调用该对象的任意方法和属性。
(3)泛型,是指Java语言中一种参数化类型的机制。
本申请实施例提供的接口文档的生成方法,可以应用于需要使用接口文档对***软件进行开发或者维护的场景中。例如,目前,软件***的复杂度越来越高,对应的程序代码量也越来越大,很多软件***可能会有几十万,甚至是上百万行的代码,这就需要多名开发人员共同协作进行开发。但是不同***间的对接可能需要双方约定参数,若依靠开发人员阅读代码获取相关参数,会造成开发效率较低。为了方便***间的对接,因此,就需要编写接口文档。又例如,在项目的开发过程中,web项目的调用方和服务方通常是分离开发,而且一些应用程序的开发,也是需要调用方和服务方的开发人员共同定义接口,并通过编写接口文档,之后调用方和服务方的开发人员将根据该接口文档进行开发,以达到调用方和服务方接口的一致。
在现有技术中,一种实现方式是,用户通过Excel或MarkDown工具,手动编写接口文档,并在编写完成后,通过线下发送给其他开发人员或者手动上传到云端服务器进行保存。另一种实现方式是,用户通过ApiPost或PostMan等工具,手动编写接口文档后,可以通过该工具自动上传到云端服务器进行保存维护。
然而,在上述第一种实现方式中,测试人员除了要编写程序代码之外,还需要花费大量的时间和精力编写接口文档,不仅造成接口文档的生成效率较低,而且使得***软件开发的成本较高,而且还容易造成不同开发人员所维护的接口文档版本不一致等问题。另外,编写完成之后,还需要用户手动上传到云端进行保存,不仅造成用户的操作较为繁琐,而且容易出错。
在上述第二种实现方式中,虽然可以实现自动将接口文档发送到云端服务器进行保存,但是,测试人员还是需要手动编写接口文档,造成接口文档的生成效率较低,***软件开发的成本较高。
本申请实施例中考虑到上述问题,提出一种接口文档的生成方法,该方法的基本构思在于,由于Java反射机制,能够在程序运行状态中,对任意一个类,都能够知道该类的所有属性和方法,而且对任何一个对象,都能够调用该对象的任意方法和属性,另外,通常接口文档的格式相对固定,在接口文档中均会包括请求字段和返回字段各自对应的字段名称和字段类型,因此,终端设备可以通过遍历软件***所对应的目标程序代码,以获取该目标程序代码中所包括的请求字段和返回字段,并通过Java反射机制,获取到请求字段对应的字段名称和字段类型,以及返回字段对应的字段名称和字段类型,从而生成目标程度代码对应的接口文档。这样,可以避免用户手动编写接口文档的现象,从而不仅可以提高接口文档生成的效率,而且可以降低软件***开发的成本。另外,本申请可以利用Java自定义注解(Annotation)标记接口、类、属性的方式实现在代码中编写接口文档的功能。
在描述本申请的接口文档的生成方法的方案之前,先根据图1来了解下本申请的***架构。
图1为本申请实施例提供的接口文档的生成方法的***架构图。如图1所示,该***包括:终端设备101-103以及服务器104。不同的开发人员可以通过不同终端设备协同开发软件***。另外,开发人员通过终端设备101-103编写的程序代码可以保存在本地,也可以通过网络传输到服务器104进行保存。需要说明的是,服务器104可以为一台服务器,可以为多台服务器组成的服务器集群。
终端设备101-103中的任意一台均可以生成接口文档,以终端设备101为例,终端设备101在接收到用于生成接口文档的生成请求时,将会确定目标程序代码,该目标程序代码可以是从本地获取,也可以是从服务器104获取,通过对该目标程序代码进行遍历,以生成接口文档。
另外,终端设备101在生成接口文档后,会根据接口文档中的请求类和返回类的相关信息,生成简单Java对象(Plain Ordinary Java object,POJO)对应的Java文件,并通过网络将该接口文档和Java文件发送到服务器104进行保存,以供其他开发人员从服务器104调用接口文档,以进行查看,从而可以方便用户操作。另外,其他开发人员也可以从服务器104下载Java文件以应用到程序代码中,从而实现了代码和文档的统一,保证了接口代码的一致性。
应该理解,在图1所示的***架构中,终端设备101-103以及服务器104的数目仅仅是示例性的,更多或更少的数量都属于本申请的保护范畴。并且,在上述示例运行场景中,终端设备例如可以是个人计算机、服务器、平板、手机、掌上电脑(Personal DigitalAssistant,PDA)、笔记本或其它任何具有联网功能的计算设备。终端设备和服务器之间通信的网络可以包括各种类型的有线和无线网络,例如但不局限于:互联网、局域网、无线保真(Wireless Fidelity,WIFI)、无线局域网(Wireless Local Area Networks,WLAN)、蜂窝通信网络(通用分组无线服务技术(General Packet Radio Service,GPRS)、码分多址(Code Division Multiple Access,CDMA)、2G/3G/4G/5G蜂窝网络)、卫星通信网络等等。
在了解了本申请的***架构后,结合图2对本申请的接口文档的生成方法的方案进行详细说明。
图2为本申请实施例提供的一种接口文档的生成方法的流程示意图,本申请实施例提供了一种接口文档的生成方法,该方法可以由任意执行接口文档的生成方法的装置来执行,该装置可以通过软件和/或硬件实现。本实施例中,该装置可以集成在如图1所示的终端设备中。如图2所示,本申请实施例提供的接口文档的生成方法包括如下步骤:
步骤201:接收用于生成接口文档的生成请求。
在本步骤中,在***软件的开发过程中,可以在终端设备中开发接口文档导出界面,因此,该生成请求可以是用户通过点击接口文档导出界面上的某个控件所触发,也可以是通过输入某个命令所触发,如通过Gradle命令触发等。另外,该生成请求也可以是由终端设备自动触发,如可以定时触发该生成请求。
步骤202:根据生成请求,确定目标程序代码。
在本步骤中,终端设备在接收到生成请求后,可以根据该生成请求,确定需要生成接口文档的目标程序代码。示例性的,在上述生成请求中,会包括有方法名或者类名,终端设备可以根据该方法名或者类名,确定出对应的目标程序代码。
步骤203:根据目标程序代码,分别确定请求字段和返回字段。
示例性的,在确定请求字段时,可以获取目标程序代码中多个类,针对每个类,若该类对应的代码注解中包括第一标识符标识的注解信息,且根据该第一标识符标识的注解信息确定该类为请求类,则将请求类中的字段确定为请求字段。
具体的,第一标识符可以为@Message,在@Message中维护有接口标识(Identitydocument,ID)、接口名称和接口的描述信息以及是否请求类。
可以理解,在目标程序代码中包括有相关注解,以用于标注目标程序代码中的类与方法,以供开发人员批注文档,该方式一方面对业务逻辑无侵入,另一方面,便于对目标程序代码进行扫描,以确定出该目标程序代码中的类。基于此,终端设备对目标程序代码进行扫描,从而得到目标程序代码中的所有类。若所有类中存在某个类对应的代码注解中包括第一标识符标识的注解信息,则可以根据该第一标识符标识的注解信息确定该类是否为请求类,若确定出该类为请求类,则可以将该类中的字段确定为请求字段。
在该方式中,若目标程序代码中的某个类对应的代码注解中包括有第一标识符标识的注解信息,且根据该第一标识符标识的注解信息确定类为请求类时,可以直接将该请求类中的字段确定为请求字段,从而可以提高请求字段确定的效率。
示例性的,若多个类中每个类对应的代码注解中均不包括第一标识符标识的注解信息,则判断各类对应的代码注解中是否包括预设方法,若多个类中存在第一类对应的代码注解中包括预设方法,则获取预设方法入参中的第二标识符标识的注解信息,将第二标识符标识的注解信息中的字段,确定为请求字段。
具体的,预设方法可以为Controller方法,其中,在超文本传输协议(Hyper TextTransfer Protocol,Http)接口的场景中,某些类会标注于Controller方法。第二标识符可以为@RequestParam或@RequestBody。
若目标程序代码中的所有类对应的代码注解中均不包括第一标识符标识的注解信息,则将判断每个类是否标注于Controller方法。若存在第一类标注于Controller方法,则将获取Controller方法入参中的@RequestParam或@RequestBody。其中,对于@RequestParam,在这种方式中通常会显示定义请求类的实体结构,因此,可以将@RequestParam标注的参数确定为请求字段。对于@RequestBody,可以将@RequestBody标注的参数确定为请求类,通过获取该请求类中的字段,并将获取的字段确定为请求字段。
在该方式中,若多个类中存在第一类对应的代码注解中包括预设方法,则可以获取预设方法入参中的第二标识符标识的注解信息,并将第二标识符标识的注解信息中的字段,确定为请求字段,从而可以保证在多种场景中均可以获取到请求字段,提高了请求字段获取的可靠性。
示例性的,在确定返回字段时,可以获取目标程序代码中多个类,针对每个类,判断该类对应的代码注解中是否包括第三标识符标识的注解信息,若该类对应的代码注解中包括第三标识符标识的注解信息,则判断该第三标识符标识的注解信息中是否存在预设类;若存在预设类,则将预设类中的字段确定为返回字段。
若所有第三标识符标识的注解信息中均不存在预设类,则根据预设规则,对所有类的类名进行匹配;若匹配成功,则将匹配成功的类中的字段确定为返回字段;若匹配失败,则获取所有类中具有第一标识符标识的注解信息的第二类,根据第一标识符标识的注解信息确定第二类中的请求类,并获取请求类对应的接口标识,根据第一标识符标识的注解信息确定第二类中的非请求类,并将非请求类对应的接口标识与请求类对应的接口标识相同的非请求类中的字段确定为返回字段。
其中,第三标识符可以为与@Message同级的@ResponseClass,该方式可以用于返回参数具有泛型的场景,用于给开发人员定义具体的返回实现类。预设类可以包括指定的类(Class)。
对目标程序代码进行扫描,可以得到目标程序代码中的所有类。针对每个类来说,判断该类对应的代码注解中是否包括与@Message同级的@ResponseClass注解信息,若存在某个类对应的代码注解中包括@ResponseClass注解信息,则判断该类的注解信息中是否存在指定的类,若存在指定的类,则可以将@ResponseClass参数中指定的类确定为返回类,并将该返回类中包括的字段确定为返回字段。
在该方式中,在确定出某个类对应的代码注解中包括第三标识符标识的注解信息,且该注解信息中包括预设类时,可以将预设类中的字段确定为返回字段,由此可以提高确定返回字段的效率。
进一步的,若在所有类中,第三标识符标识的注解信息中均不存在预设类,也即没有指定的类时,则将根据预设规则对所有类的类名进行匹配。其中,预设规则可以为对所有类的类名和返回类的类名进行匹配。如若某个类的类名为Req xxx,则该类将会从目标程序代码对应的所有类中与Rsp xxx或Resp xxx进行匹配,若匹配成功,则将匹配成功的类确定为返回类,并将该返回类中的字段确定为返回字段。若匹配失败,则从目标程序代码对应的所有类中,获取具有@message注解信息的类。由于在@Message注解信息中维护有接口标识(ID)、接口名称、接口的描述信息以及是否请求类等信息。因此,根据获取到的@message注解信息,可以确定这些类中的请求类,以及该请求类对应的接口标识(ID)。另外,还可以根据获取到的@message注解信息,确定这些类中的非请求类,以及非请求类对应的接口标识(ID)。终端设备可以将非请求类中,接口标识(ID)与请求类对应的接口标识(ID)相同的类,确定为返回类,因此,可以理解,确定出的返回类为非请求类中的部分或者全部。在确定出返回类后,可以将该返回类中的字段确定为返回字段。
需要进行说明的是,若目标程序代码中的所有类中均不包括@ResponseClass注解信息,则可以输出提示信息,以提醒开发人员按照预设的规则或者返回字段需要加上@message注解信息,并将其指定为返回字段。其中,提示信息是在运行Gradle命令生成接口文档时输出的。
在本方式中,在第三标识符标识的注解信息中均不存在预设类时,可以根据预设规则,对所有类的类名进行匹配,从而确定出返回类,并将该返回类中的字段确定为返回字段,从而可以保证在多种场景中均可以获取到返回字段,提高了返回字段获取的可靠性。
步骤204:通过Java反射机制,分别获取请求字段和返回字段各自对应的字段名称和字段类型。
其中,Java反射机制能够在程序运行状态中,对任意一个类,都能够确定出该类的所有属性和方法,而且对任何一个对象,都能够调用该对象的任意方法和属性。因此,终端设备在确定出请求字段和返回字段后,可以通过Java反射机制,获取到请求字段和返回字段各自对应的字段名称和字段类型。
可以理解,目前通过Swagger工具生成接口文档的方式,协议描述字段与注解信息是强关联的,也即要求开发人员必须给所有字段都标记有注解信息,才可以获取到字段名称和字段类型,才能生成接口文档,这种方式使得开发人员的工作效率较低,而且增加了开发难度。相比之下,本申请实施例中通过Java反射机制,可以不依赖与注解信息,即可获取到字段的字段名称和字段类型,以生成接口文档,从而不仅可以提高接口文档生成的灵活性和兼容性,而且可以提高开发人员的工作效率,降低开发难度。
步骤205:根据请求字段和返回字段各自对应的字段名称和字段类型,生成目标程序代码对应的接口文档。
在本步骤中,可以预先定义接口文档对应的预设模板,例如,该预设模板可以理解为文档描述对象ProtoInfo。图3为接口文档的结构示意图,如图3所示,该文档描述对象ProtoInfo中包括接口标识、接口名称和接口的描述信息、请求字段列表和返回字段列表。另外,还可以定义文档字段描述对象ProtoFieldInfo,以维护请求字段和返回字段,其中,该ProtoFieldInfo中包括有字段ID、字段名称、字段类型、字段描述信息和取值范围。
示例性的,为了便于开发人员使用,并且对接口文档进行区分,通常在接口文档中会包括有接口信息,该接口信息如上述的接口标识、接口名称和接口的描述信息中的至少一种。示例性的,可以根据目标程序代码中多个类所对应的代码注解,获取目标程序代码对应的接口信息,并将该接口信息添加在接口文档中。
具体的,在对目标程序代码进行扫描,确定出该目标程序代码中的所有类后,若存在某个类被第一标识符标识的注解信息,且该类属于请求类,则可以将第一标识符标识的注解信息中的注解实例内容导入到预设模板中,以用于维护接口信息。其中,第一标识符为@message,该@Message为作用于类与方法的注解,其维护有接口标识(ID)、接口名称和接口的描述信息以及是否请求类。
如图3所示,可以将@message的注解实例内容转化为ProtoInfo对象,也即将@Message中维护的接口标识(ID)、接口名称和接口的描述信息填充到图3中的ProtoInfo对象中的ID、名称和描述字段中,以用于维护接口信息。
若目标程序代码中的所有类对应的代码注解中均不包括第一标识符标识的注解信息,则将判断每个类是否标注于Controller方法。若存在第一类标注于Controller方法,且从该第一类中获取Spring自带的Web相关注解,如获取该第一类中被标注@RestController或@RequestMapping等Mapping注解的方法,并将该方法作为接口信息,如该方法具有标记@Message的注解信息,则获取@Message的注解信息中的内容导入预设模板中,也即将@Message的注解信息中的内容填充到如图3所示的ProtoInfo对象中的接口ID、名称和描述字段中,以用于维护接口信息中。如果该方法未标记@Message的注解信息,则将获取@RestControlle或@RequestMapping等注解信息中的统一资源定位符(UniformResource Locator,URL),并填充到如图3所示的ProtoInfo对象中的接口ID。
需要进行说明的是,类标注于Controller方法,可以使Web相关接口能够自动获取该注解信息中配置的URL,并导入到预设模板中。若@Message不支持标注到方法,开发人员需要在请求字段中添加描述或者字段名称等,以手动维护请求的URL。
在本实施例中,通过获取目标程序代码对应的接口信息,并将该接口信息导入预设模板中,从而不仅可以使接口文档更完整,而且可以有效区分不同接口的接口文档,便于开发人员的使用,提高了用户体验。
另外,预设模板中还包括有请求字段的相关信息和返回字段的相关信息。因此,终端设备在确定出请求字段和返回字段各自对应的字段名称和字段类型后,可以将该请求字段和返回字段各自对应的字段名称和字段类型导入到预设模板中,从而生成接口文档。
示例性的,在根据请求字段和返回字段各自对应的字段名称和字段类型,生成目标程序代码对应的接口文档时,可以通过如下方式进行:针对请求字段和返回字段中的任一字段,判断字段的字段类型是否为普通数据类型,若字段的字段类型不为普通数据类型,则根据字段的字段类型,确定字段中包括的子字段,并获取子字段对应的字段名称和字段类型,将子字段确定为新的字段,并重复执行此步骤,直至字段的字段类型为普通数据类型;然后根据字段的字段名称和字段类型,以及字段对应的子字段的字段名称和字段类型,生成目标程序代码对应的接口文档。
示例性的,在生成目标程序代码对应的接口文档时,可以通过获取与目标程序代码对应的预设模板,并确定所有字段以及所有子字段之间的层级关系,然后将字段的字段名称和字段类型,以及字段对应的子字段的字段名称和字段类型,按照该层级关系,导入预设模板中,生成接口文档。
具体的,以请求字段为例来说,为了减少接口文档中的无用信息,提高接口文档的可用性,可以在获取到请求字段后,先从所有的请求字段中,去掉具有static和final标识或者被标注为废弃(@Deprecate)或者忽略(@JsonIgnore)的请求字段。在剩余的请求字段中,对于每个剩余的请求字段,可以通过Java反射机制,获取每个请求字段的字段名称和字段类型。终端设备将判断每个请求字段的字段类型是否为普通数据类型,若某个请求字段的字段类型为普通数据类型,则直接将该请求字段的字段名称以及字段类型导入到预设模板中即可。其中,普通数据类型例如可以包括string、char、int或float等等。
若判断出某个请求字段的字段类型不为普通数据类型,则可以根据字段的字段类型,确定请求字段中包括的子字段。例如,若该请求字段的字段类型为类,则可以获取该类中包括的字段,并将该类中包括的字段确定为子字段,然后通过Java反射机制获取该子字段的字段名称和字段类型,并判断子字段的字段类型是否为普通数据类型,若为普通数据类型,则将请求字段的字段名称和字段类型,以及子字段的字段名称和字段类型,按照层级关系导入到预设模板中,从而生成接口文档。若子字段的字段类型不为普通数据类型,且该子字段的字段类型为类,那么将重复上面的步骤,继续获取该类中的字段,以此类推,直至获取到的字段类型为普通数据类型。
终端设备根据各请求字段以及所有的子字段,确定出层级关系。例如,若请求字段为User,请求字段对应的子字段为Name和MobileNumber,则User为第一级,Name和MobileNumber为第二级。确定出层级关系后,可以将请求字段的字段名称和字段类型,以及各层级的子字段的字段名称和字段类型,按照层级关系导入到预设模板中,以生成接口文档。
若该请求字段的字段类型为列表或者数组,则获取该列表或者数组的实际类型,若该实际类型属于基本数据类型,则直接将列表或者数组的名称和实际类型导入到预设模板中,以生成接口文档。若该实际类型不属于基本数据类型,则将获取该列表或者数组中包括的字段作为子字段,并通过Java反射机制获取该子字段的字段名称和字段类型,并判断子字段的字段类型是否为普通数据类型,若为普通数据类型,则将请求字段的字段名称和字段类型,以及子字段的字段名称和字段类型,按照层级关系导入到预设模板中,从而生成接口文档。若子字段的字段类型不为普通数据类型,则根据该子字段的字段类型,确定其中包括的字段,例如若该子字段的字段类型为类,那么将获取该类中包括的字段,若该子字段的字段类型为数组或者列表,则将重复上面的步骤,以此类推,直至获取到的字段类型为普通数据类型。
终端设备根据各请求字段以及所有的子字段,确定出层级关系。然后将请求字段的字段名称和字段类型,以及各层级的子字段的字段名称和字段类型,按照层级关系导入到预设模板中,以生成接口文档。
举例来说,若请求字段的字段类型为列表,且为List<String>,该列表的实际类型为String,其为基本数据类型,则将不会继续获取列表的子字段,而是直接将列表的字段名称和实际类型导入到预设模板中,以生成接口文档。假设列表为List<User>,该列表的实际类型为User,其不为基本数据类型,因此,需要继续遍历以确定User中的子字段,并确定该User中的子字段的字段名称和字段类型。
若该请求字段的字段类型为泛型或者是泛型表达的实体类,则可以通过Java反射机制获取所声明的泛型的实际类型。具体的,可以通过该类父类的get Actual TypeArguments方法获取其声明的实际类型,若获取不到,则从该类继承链中的类通过递归的方式获取对应字段的实际类型。在获取到实际类型后,将判断该实际类型是否属于基本数据类型,若该实际类型属于基本数据类型,则直接将请求字段的字段名称和实际类型导入到预设模板中,以生成接口文档。若该实际类型不属于基本数据类型,则将获取该泛型或者是泛型表达的实体类中包括的字段作为子字段,并通过Java反射机制获取该子字段的字段名称和字段类型,并判断子字段的字段类型是否为普通数据类型,若为普通数据类型,则将请求字段的字段名称和字段类型,以及子字段的字段名称和字段类型,按照层级关系导入到预设模板中,从而生成接口文档。若子字段的字段类型不为普通数据类型,则按照前述的递归方式,根据该子字段的字段类型,确定其中包括的字段,例如可以按照该子字段的字段类型为类、数组、列表、泛型或者泛型表达的实体类,分别按照前述的方式确定子字段,并重复上面的步骤,以此类推,直至获取到的字段类型为普通数据类型。
终端设备根据各请求字段以及所有的子字段,确定出层级关系。然后将请求字段的字段名称和字段类型,以及各层级的子字段的字段名称和字段类型,按照层级关系导入到预设模板中,以生成接口文档。
需要进行说明的是,对于请求字段的字段类型为Object类时,可以采用与泛型相同的处理方式,此处不再赘述。
另外,在前述描述中,若从继承链中的类通过递归的方式仍然获取不到对应字段的实际类型,则将会在接口文档的描述信息中添加提示信息,以提醒开发人员补充声明泛型的实际类型。
进一步的,针对返回字段,确定返回字段的字段名称和字段类型,以导入到预设模板中生成接口文档的方式,与请求字段类似,具体可以参照前述描述,本申请实施例不再赘述。
举例来说,如下表1为图3中请求字段列表ProtoFieldInfo的相关信息,表2为图3中返回字段列表ProtoFieldInfo的相关信息。
表1
字段ID 字段类型 字段名称 字段描述 取值范围
1 String Token 令牌 非空,长度32
表2
Figure BDA0002853003680000181
如表1所示,终端设备获取到的请求字段为Token,其字段类型为String,则可以直接将该请求字段的字段名称Token和字段类型String导入到预设模板中。
如表2所示,终端设备获取到的返回字段为User和Cards,其中,User的字段类型为Object,则终端设备将继续遍历Object中的子字段,如Name和Mobile Number,则根据Java反射机制确定该Name和Mobile Number的字段类型,由于Name和Mobile Number的字段类型均为String,则将按照层级关系,将User、Name和Mobile Number的字段名称和字段类型导入到预设模板中。另外,Cards的字段类型为List,则终端设备将继续遍历List中的子字段,如Bank Name和Card Number,则根据Java反射机制确定该Bank Name和Card Number的字段类型,由于Bank Name和Card Number的字段类型均为String,则将按照层级关系,将Cards、Bank Name和Card Number的字段名称和字段类型导入到预设模板中,以生成接口文档。
应理解,如表2所示,在字段ID中可以呈现出上述的层级关系,如User和Cards的字段ID分别为1和2,User对应的子字段Name和Mobile Number的字段ID分别为1.1和1.2,Cards对应的子字段Bank Name和Card Number的字段ID分别为2.1和2.2。
在本实施例中,针对请求字段和返回字段中的任一字段,在确定出该字段的字段类型为普通数据类型时,可以根据该字段的字段类型,继续确定该字段中包括的子字段,以获取子字段的字段名称和字段类型,按照该方式递交并遍历所有的字段,直至最终得到的字段类型为基础数据类型,从而根据字段的字段名称和字段类型以及子字段的字段名称和字段类型,生成接口文档,从而在字段中不具备标注信息时,也可以生成接口文档,由此不仅提高了接口文档生成的灵活性和效率,而且可以降低开发人员的工作量以及开发难度。
进一步的,可以通过获取与目标程序代码对应的预设模板,并确定出所有字段以及子字段之间的层级关系,然后将字段的字段名称和字段类型以及子字段的字段名称和字段类型按照确定出的层级关系,导入预设模板中,从而生成目标程序代码对应的接口文档,从而可以提高接口文档的生成效率和准确性。
另外,为了便于开发人员使用,通常在接口文档中还需要对某些字段的取值范围进行定义。示例性的,若字段中包括有与参数校验相关的注解信息,则获取该与参数校验相关的注解信息中的属性值,并将该属性值确定为字段的取值描述信息,并将该字段和取值描述信息之间的对应关系添加在接口文档中。
具体的,在对请求字段和返回字段进行遍历时,若某个字段中包含有与参数校验相关的注解信息,则将获取注解信息的属性值,并将该属性值转换为描述信息后,将该描述信息添加到接口文档中。例如,可以将属性值添加到表1或表2中的取值范围的描述信息中,如User对应的取值范围为非空、Name对应的取值范围为长度2-10等。
在该方式中,若字段中包括有与参数校验相关的注解信息,则获取该与参数校验相关的注解信息中的属性值,并将该属性值确定为字段的取值描述信息,并将该取值描述信息添加在接口文档中,从而不仅可以使得接口文档更加完整,而且可以方便开发人员的使用,提高用户的体验。
另外,由于@Field为作用于字段属性的注解,@Field注解信息中维护有字段标识、字段名称和字段的描述信息,因此,在对字段进行遍历时,还可以获取字段上的@Field注解信息,若某个字段中存在@Field注解信息,则将根据该@Field注解信息,确定字段的描述信息,并将该描述信息导入到预设模板中,例如可以填充到如表1或表2中的字段描述中,如Token对应的描述信息为令牌,User对应的描述信息为用户等。
由上述描述可知,在本申请实施例中,由于通过Java反射机制,因此,就算不标注属性描述注解信息,也可以保证字段类型、字段名称和取值范围等信息导入到预设模板中,从而生成接口文档。
进一步的,为了方便开发人员的调用,在生成接口文档时,还可以根据请求字段和返回字段,生成POJO对应的Java文件,并将该POJO对应的Java文件发送给云端服务器。
具体的,在生成接口文档时,还会根据请求字段和返回字段的内容,生成POJO对应的Java文件,在生成过程中,通常会将目标程序代码中原有的注解信息删除,并将描述信息修改为注释方式。
进一步的,终端设备将生成的POJO对应的Java文件和接口文档上传到云端服务器。另外,开发人员可以提供具体的接口链接给使用者,这样,使用者可以根据该接口链接直接从云端服务器下载POJO对应的Java文件,以应用到代码中。由此可以实现接口文档和代码的统一,解决了软件***开发流程中接口代码无法保持一致的问题。
另外,本申请中由于定义了统一的文档描述对象,在其基础上可以生成多种格式的本地接口文档,如Excel、Mardown、Html等格式的本地接口文档,从而可以方便开发人员渐进式切换生成接口文档的方案。
本申请实施例提供的接口文档的生成方法,在接收到用于生成接口文档的生成请求后,将根据该生成请求,确定目标程序代码,然后根据目标程序代码,分别确定请求字段和返回字段,并通过Java反射机制,分别获取请求字段和返回字段各自对应的字段名称和字段类型,再根据请求字段和返回字段各自对应的字段名称和字段类型,生成目标程序代码对应的接口文档。一方面,可以避免用户手动编写接口文档的现象,从而不仅可以提高接口文档生成的效率,而且可以降低软件***开发的成本。另一方面,由于通过Java反射机制,通过对字段的深度遍历,可以获取到请求字段和返回字段各自对应的字段名称和字段类型,可以支持泛型、列表以及对象嵌套等多种场景下生成接口文档,从而在某些字段中不存在注解信息时也可以生成接口文档,可以极大减少人工干预成本,避免了生成接口文档时需要强依赖于注解信息的现象。
图4为本申请实施例提供的一种接口文档的生成装置40的结构示意图,示例的,请参见图4所示,该接口文档的生成装置40可以包括:
接收单元401,用于接收用于生成接口文档的生成请求。
处理单元402,用于根据生成请求,确定目标程序代码,并根据目标程序代码,分别确定请求字段和返回字段。
获取单元403,用于通过Java反射机制,分别获取请求字段和返回字段各自对应的字段名称和字段类型。
生成单元404,用于根据请求字段和返回字段各自对应的字段名称和字段类型,生成目标程序代码对应的接口文档。
可选的,生成单元404,具体用于针对请求字段和返回字段中的任一字段,判断字段的字段类型是否为普通数据类型,若字段的字段类型不为普通数据类型,则根据字段的字段类型,确定字段中包括的子字段,并获取子字段对应的字段名称和字段类型,将子字段确定为新的字段,并重复执行此步骤,直至字段的字段类型为普通数据类型;并根据字段的字段名称和字段类型,以及字段对应的子字段的字段名称和字段类型,生成目标程序代码对应的接口文档。
可选的,生成单元404,具体用于获取与目标程序代码对应的预设模板;确定所有字段以及所有子字段之间的层级关系;并将字段的字段名称和字段类型,以及字段对应的子字段的字段名称和字段类型,按照层级关系,导入预设模板中,生成接口文档。
可选的,处理单元402,具体用于获取目标程序代码中多个类;针对每个类,若类对应的代码注解中包括第一标识符标识的注解信息,且根据第一标识符标识的注解信息确定类为请求类,则将请求类中的字段确定为请求字段。
可选的,处理单元402,还用于若多个类中每个类对应的代码注解中均不包括第一标识符标识的注解信息,则判断各类对应的代码注解中是否包括预设方法。
获取单元403,还用于若多个类中存在第一类对应的代码注解中包括预设方法,则获取预设方法入参中的第二标识符标识的注解信息。
处理单元402,还用于将第二标识符标识的注解信息中的字段,确定为请求字段。
可选的,处理单元402,具体用于获取目标程序代码中多个类;针对每个类,判断类对应的代码注解中是否包括第三标识符标识的注解信息;并若类对应的代码注解中包括第三标识符标识的注解信息,则判断第三标识符标识的注解信息中是否存在预设类;若存在预设类,则将预设类中的字段确定为返回字段。
可选的,处理单元402,还用于若所有第三标识符标识的注解信息中均不存在预设类,则根据预设规则,对所有类的类名进行匹配;若匹配成功,则将匹配成功的类中的字段确定为返回字段;若匹配失败,则获取所有类中具有第一标识符标识的注解信息的第二类,根据第一标识符标识的注解信息确定第二类中的请求类,并获取请求类对应的接口标识,根据第一标识符标识的注解信息确定第二类中的非请求类,并将非请求类对应的接口标识与请求类对应的接口标识相同的非请求类中的字段确定为返回字段。
可选的,获取单元403,还用于根据目标程序代码中多个类所对应的代码注解,获取目标程序代码对应的接口信息,接口信息包括接口标识、接口名称和接口的描述信息中的至少一种。
处理单元402,还用于将接口信息添加在接口文档中。
可选的,获取单元403,还用于若字段中包括有与参数校验相关的注解信息,则获取与参数校验相关的注解信息中的属性值。
处理单元402,还用于将属性值确定为字段的取值描述信息,并将字段和取值描述信息之间的对应关系添加在接口文档中。
可选的,该接口文档的生成装置40还包括发送单元405。
生成单元404,还用于根据请求字段和返回字段,生成简单的Java对象POJO对应的Java文件。
发送单元405,用于将POJO对应的Java文件发送给云端服务器。
本申请实施例提供的接口文档的生成装置40,可以执行上述任一实施例中的接口文档的生成方法的技术方案,其实现原理以及有益效果与接口文档的生成方法的实现原理及有益效果类似,可参见接口文档的生成方法的实现原理及有益效果,此处不再进行赘述。
图5为本申请实施例提供的一种终端设备50的结构示意图,示例的,请参见图5所示,该终端设备可以包括处理器501和存储器502;其中,
所述存储器502,用于存储计算机程序。
所述处理器501,用于读取所述存储器502存储的计算机程序,并根据所述存储器502中的计算机程序执行上述任一实施例中的接口文档的生成方法的技术方案。
可选地,存储器502既可以是独立的,也可以跟处理器501集成在一起。当存储器502是独立于处理器501之外的器件时,终端设备还可以包括:总线,用于连接存储器502和处理器501。
可选地,本实施例还包括:通信接口,该通信接口可以通过总线与处理器501连接。处理器501可以控制通信接口来实现上述终端设备的获取和发送的功能。
本申请实施例所示的终端设备,可以执行上述任一实施例中的接口文档的生成方法的技术方案,其实现原理以及有益效果与接口文档的生成方法的实现原理及有益效果类似,可参见接口文档的生成方法的实现原理及有益效果,此处不再进行赘述。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述任一实施例中的接口文档的生成方法的技术方案,其实现原理以及有益效果与接口文档的生成方法的实现原理及有益效果类似,可参见接口文档的生成方法的实现原理及有益效果,此处不再进行赘述。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述任一实施例中的接口文档的生成方法的技术方案,其实现原理以及有益效果与接口文档的生成方法的实现原理及有益效果类似,可参见接口文档的生成方法的实现原理及有益效果,此处不再进行赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所展示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元展示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例方法的部分步骤。
应理解的是,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital SignalProcessor,简称:DSP)、专用集成电路(英文:Application Specific IntegratedCircuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述计算机可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (14)

1.一种接口文档的生成方法,其特征在于,包括:
接收用于生成接口文档的生成请求;
根据所述生成请求,确定目标程序代码;
根据所述目标程序代码,分别确定请求字段和返回字段;
通过Java反射机制,分别获取所述请求字段和所述返回字段各自对应的字段名称和字段类型;
根据所述请求字段和所述返回字段各自对应的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
2.根据权利要求1所述的方法,其特征在于,所述根据所述请求字段和所述返回字段各自对应的字段名称和字段类型,生成所述目标程序代码对应的接口文档,包括:
针对所述请求字段和所述返回字段中的任一字段,判断所述字段的字段类型是否为普通数据类型,若所述字段的字段类型不为普通数据类型,则根据所述字段的字段类型,确定所述字段中包括的子字段,并获取所述子字段对应的字段名称和字段类型,将所述子字段确定为新的字段,并重复执行此步骤,直至所述字段的字段类型为普通数据类型;
根据所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
3.根据权利要求2所述的方法,其特征在于,所述根据所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,生成所述目标程序代码对应的接口文档,包括:
获取与所述目标程序代码对应的预设模板;
确定所有字段以及所有子字段之间的层级关系;
将所述字段的字段名称和字段类型,以及所述字段对应的子字段的字段名称和字段类型,按照所述层级关系,导入所述预设模板中,生成所述接口文档。
4.根据权利要求1-3任一项所述的方法,其特征在于,根据所述目标程序代码,确定请求字段,包括:
获取所述目标程序代码中多个类;
针对每个类,若所述类对应的代码注解中包括第一标识符标识的注解信息,且根据所述第一标识符标识的注解信息确定所述类为请求类,则将所述请求类中的字段确定为所述请求字段。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所述多个类中每个类对应的代码注解中均不包括所述第一标识符标识的注解信息,则判断各所述类对应的代码注解中是否包括预设方法;
若所述多个类中存在第一类对应的代码注解中包括预设方法,则获取所述预设方法入参中的第二标识符标识的注解信息;
将所述第二标识符标识的注解信息中的字段,确定为所述请求字段。
6.根据权利要求1-3任一项所述的方法,其特征在于,根据所述目标程序代码,确定返回字段,包括:
获取所述目标程序代码中多个类;
针对每个类,判断所述类对应的代码注解中是否包括第三标识符标识的注解信息;
若所述类对应的代码注解中包括第三标识符标识的注解信息,则判断所述第三标识符标识的注解信息中是否存在预设类;
若存在所述预设类,则将所述预设类中的字段确定为所述返回字段。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
若所有所述第三标识符标识的注解信息中均不存在所述预设类,则根据预设规则,对所有类的类名进行匹配;
若匹配成功,则将匹配成功的类中的字段确定为所述返回字段;
若匹配失败,则获取所述所有类中具有第一标识符标识的注解信息的第二类,根据所述第一标识符标识的注解信息确定所述第二类中的请求类,并获取所述请求类对应的接口标识,根据所述第一标识符标识的注解信息确定所述第二类中的非请求类,并将所述非请求类对应的接口标识与所述请求类对应的接口标识相同的非请求类中的字段确定为所述返回字段。
8.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
根据所述目标程序代码中多个类所对应的代码注解,获取所述目标程序代码对应的接口信息,所述接口信息包括接口标识、接口名称和接口的描述信息中的至少一种;
将所述接口信息添加在所述接口文档中。
9.根据权利要求2或3所述的方法,其特征在于,所述方法还包括:
若所述字段中包括有与参数校验相关的注解信息,则获取所述与参数校验相关的注解信息中的属性值;
将所述属性值确定为所述字段的取值描述信息,并将所述字段和所述取值描述信息之间的对应关系添加在所述接口文档中。
10.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
根据所述请求字段和返回字段,生成简单的Java对象POJO对应的Java文件;
将所述POJO对应的Java文件发送给云端服务器。
11.一种接口文档的生成装置,其特征在于,包括:
接收单元,用于接收用于生成接口文档的生成请求;
处理单元,用于根据所述生成请求,确定目标程序代码,并根据所述目标程序代码,分别确定请求字段和返回字段;
获取单元,用于通过Java反射机制,分别获取所述请求字段和所述返回字段各自对应的字段名称和字段类型;
生成单元,用于根据所述请求字段和所述返回字段各自对应的字段名称和字段类型,生成所述目标程序代码对应的接口文档。
12.一种终端设备,其特征在于,包括处理器和存储器;其中,
所述存储器,用于存储计算机程序;
所述处理器,用于读取所述存储器存储的计算机程序,并根据所述存储器中的计算机程序执行上述权利要求1-10任一项所述的接口文档的生成方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述权利要求1-10任一项所述的接口文档的生成方法。
14.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时,实现上述权利要求1-10任一项所述的接口文档的生成方法。
CN202011535639.1A 2020-12-22 2020-12-22 接口文档的生成方法、装置和终端设备 Active CN112650533B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011535639.1A CN112650533B (zh) 2020-12-22 2020-12-22 接口文档的生成方法、装置和终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011535639.1A CN112650533B (zh) 2020-12-22 2020-12-22 接口文档的生成方法、装置和终端设备

Publications (2)

Publication Number Publication Date
CN112650533A true CN112650533A (zh) 2021-04-13
CN112650533B CN112650533B (zh) 2024-03-19

Family

ID=75359363

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011535639.1A Active CN112650533B (zh) 2020-12-22 2020-12-22 接口文档的生成方法、装置和终端设备

Country Status (1)

Country Link
CN (1) CN112650533B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113535832A (zh) * 2021-06-10 2021-10-22 杭州未名信科科技有限公司 云服务数据的获取方法、装置、电子设备及介质
CN113590120A (zh) * 2021-07-30 2021-11-02 北京有竹居网络技术有限公司 状态管理器的生成方法、装置、电子设备及存储介质
CN113626074A (zh) * 2021-06-30 2021-11-09 北京三快在线科技有限公司 接口文档生成方法及装置、电子设备及可读存储介质
CN113641747A (zh) * 2021-10-15 2021-11-12 北京新氧科技有限公司 一种postman工具接入数据库方法、装置及***
CN113778423A (zh) * 2021-09-10 2021-12-10 上海幻电信息科技有限公司 接口文档生成方法及***
CN114942750A (zh) * 2022-05-19 2022-08-26 北京金堤科技有限公司 对外接口的字段处理方法和装置

Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030200348A1 (en) * 2002-04-17 2003-10-23 Marshall Lee Humphries Multi-platform software interface and documentation generator
US20030208720A1 (en) * 2002-03-21 2003-11-06 International Business Machines Corporation Method and apparatus for generating electronic document definitions
CN103473045A (zh) * 2013-08-27 2013-12-25 广州华多网络科技有限公司 一种生成接口文档的方法及装置
US20140040863A1 (en) * 2012-07-31 2014-02-06 Vmware, Inc. Documentation generation for web apis based on byte code analysis
US8856642B1 (en) * 2013-07-22 2014-10-07 Recommind, Inc. Information extraction and annotation systems and methods for documents
US20140372970A1 (en) * 2013-06-13 2014-12-18 International Business Machines Corporation Method to auto generate jax-rs rest service implementation classes from existing interfaces
US20160164953A1 (en) * 2014-12-05 2016-06-09 Vmware, Inc. Runtime generation of application programming interfaces for remote procedure call services
CN105677326A (zh) * 2015-12-28 2016-06-15 国云科技股份有限公司 一种软件接口参数验证方法
US20190155600A1 (en) * 2017-11-21 2019-05-23 International Business Machines Corporation Audiovisual source code documentation
US20190196811A1 (en) * 2017-12-21 2019-06-27 Fujitsu Limited Api specification generation
CN110134400A (zh) * 2019-04-02 2019-08-16 北京奇艺世纪科技有限公司 数据获取方法、装置、电子设备及计算机可读存储介质
CN110222286A (zh) * 2019-05-21 2019-09-10 平安普惠企业管理有限公司 信息获取方法、装置、终端和计算机可读存储介质
CN110221858A (zh) * 2019-06-17 2019-09-10 深圳前海微众银行股份有限公司 模拟数据生成方法、装置、设备及计算机可读存储介质
US20190325074A1 (en) * 2018-04-18 2019-10-24 International Business Machines Corporation Application programing interface document generator
CN110381135A (zh) * 2019-07-18 2019-10-25 北京奇艺世纪科技有限公司 接口创建方法、服务请求方法、装置、计算机设备和介质
CN110471698A (zh) * 2019-07-29 2019-11-19 深圳数位传媒科技有限公司 Api文档的生成方法与装置、存储介质及计算机设备
CN110781082A (zh) * 2019-10-14 2020-02-11 腾讯科技(深圳)有限公司 接口的测试用例的生成方法及装置、介质和设备
CN110806863A (zh) * 2019-11-05 2020-02-18 泰康保险集团股份有限公司 接口文档生成方法及装置、电子设备、存储介质
CN110955416A (zh) * 2019-10-12 2020-04-03 平安普惠企业管理有限公司 接口文档生成方法、装置、设备和计算机存储介质
US20200226002A1 (en) * 2018-10-30 2020-07-16 Stoplight, Inc. Distillation of various application interface data structures distributed over distinctive repositories to form a data source of consolidated application interface data components
CN111984228A (zh) * 2020-07-09 2020-11-24 招联消费金融有限公司 一种接口文档的处理方法、装置、计算机设备和存储介质

Patent Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030208720A1 (en) * 2002-03-21 2003-11-06 International Business Machines Corporation Method and apparatus for generating electronic document definitions
US20030200348A1 (en) * 2002-04-17 2003-10-23 Marshall Lee Humphries Multi-platform software interface and documentation generator
US20140040863A1 (en) * 2012-07-31 2014-02-06 Vmware, Inc. Documentation generation for web apis based on byte code analysis
US20140372970A1 (en) * 2013-06-13 2014-12-18 International Business Machines Corporation Method to auto generate jax-rs rest service implementation classes from existing interfaces
US8856642B1 (en) * 2013-07-22 2014-10-07 Recommind, Inc. Information extraction and annotation systems and methods for documents
CN103473045A (zh) * 2013-08-27 2013-12-25 广州华多网络科技有限公司 一种生成接口文档的方法及装置
US20160164953A1 (en) * 2014-12-05 2016-06-09 Vmware, Inc. Runtime generation of application programming interfaces for remote procedure call services
CN105677326A (zh) * 2015-12-28 2016-06-15 国云科技股份有限公司 一种软件接口参数验证方法
US20190155600A1 (en) * 2017-11-21 2019-05-23 International Business Machines Corporation Audiovisual source code documentation
US20190196811A1 (en) * 2017-12-21 2019-06-27 Fujitsu Limited Api specification generation
US20190325074A1 (en) * 2018-04-18 2019-10-24 International Business Machines Corporation Application programing interface document generator
US20200226002A1 (en) * 2018-10-30 2020-07-16 Stoplight, Inc. Distillation of various application interface data structures distributed over distinctive repositories to form a data source of consolidated application interface data components
CN110134400A (zh) * 2019-04-02 2019-08-16 北京奇艺世纪科技有限公司 数据获取方法、装置、电子设备及计算机可读存储介质
CN110222286A (zh) * 2019-05-21 2019-09-10 平安普惠企业管理有限公司 信息获取方法、装置、终端和计算机可读存储介质
CN110221858A (zh) * 2019-06-17 2019-09-10 深圳前海微众银行股份有限公司 模拟数据生成方法、装置、设备及计算机可读存储介质
CN110381135A (zh) * 2019-07-18 2019-10-25 北京奇艺世纪科技有限公司 接口创建方法、服务请求方法、装置、计算机设备和介质
CN110471698A (zh) * 2019-07-29 2019-11-19 深圳数位传媒科技有限公司 Api文档的生成方法与装置、存储介质及计算机设备
CN110955416A (zh) * 2019-10-12 2020-04-03 平安普惠企业管理有限公司 接口文档生成方法、装置、设备和计算机存储介质
CN110781082A (zh) * 2019-10-14 2020-02-11 腾讯科技(深圳)有限公司 接口的测试用例的生成方法及装置、介质和设备
CN110806863A (zh) * 2019-11-05 2020-02-18 泰康保险集团股份有限公司 接口文档生成方法及装置、电子设备、存储介质
CN111984228A (zh) * 2020-07-09 2020-11-24 招联消费金融有限公司 一种接口文档的处理方法、装置、计算机设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HIBOYLJW: "超详细 swagger api注解", pages 101 - 102, Retrieved from the Internet <URL:https://blog.csdn.net/HiBoyljw/article/details/81110553> *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113535832A (zh) * 2021-06-10 2021-10-22 杭州未名信科科技有限公司 云服务数据的获取方法、装置、电子设备及介质
CN113626074A (zh) * 2021-06-30 2021-11-09 北京三快在线科技有限公司 接口文档生成方法及装置、电子设备及可读存储介质
CN113590120A (zh) * 2021-07-30 2021-11-02 北京有竹居网络技术有限公司 状态管理器的生成方法、装置、电子设备及存储介质
CN113778423A (zh) * 2021-09-10 2021-12-10 上海幻电信息科技有限公司 接口文档生成方法及***
CN113778423B (zh) * 2021-09-10 2024-03-01 上海幻电信息科技有限公司 接口文档生成方法及***
CN113641747A (zh) * 2021-10-15 2021-11-12 北京新氧科技有限公司 一种postman工具接入数据库方法、装置及***
CN113641747B (zh) * 2021-10-15 2022-03-18 北京新氧科技有限公司 一种postman工具接入数据库方法、装置及***
CN114942750A (zh) * 2022-05-19 2022-08-26 北京金堤科技有限公司 对外接口的字段处理方法和装置

Also Published As

Publication number Publication date
CN112650533B (zh) 2024-03-19

Similar Documents

Publication Publication Date Title
CN112650533A (zh) 接口文档的生成方法、装置和终端设备
Bruegge et al. Object-oriented software engineering; conquering complex and changing systems
CN111428462A (zh) 通讯协议模板构建的方法及终端设备
CN111290956B (zh) 基于脑图的测试方法、装置、电子设备及存储介质
CN111858376A (zh) 请求报文生成方法和接口测试方法
CN112486490B (zh) 前端代码打包方法、装置、电子设备及存储介质
CN110795697A (zh) 逻辑表达式的获取方法、装置、存储介质以及电子装置
CN105160018A (zh) 一种复制/粘贴图片的方法、装置和***
CN111753140A (zh) Xml文件解析方法及相关设备
CN114138244A (zh) 模型类文件自动生成方法、装置、存储介质及电子设备
CN113312033A (zh) 一种模板化的协议生成、管理方法
CN115599359A (zh) 一种代码生成方法、装置、设备及介质
CN114386853A (zh) 基于通用审核模型的数据审核处理方法、装置及设备
CN113495730A (zh) 资源包的生成及解析方法和装置
CN114385722A (zh) 接口属性的一致性校验方法、装置、电子设备和存储介质
CN117149631A (zh) 一种参数校验方法、装置、设备及介质
CN111124883A (zh) 一种基于树形表格的测试用例库引入方法、***及设备
CN114546410A (zh) 一种基于设计模式的代码优化方法及相关设备
CN115640279A (zh) 一种数据血缘关系的构建方法和装置
CN113590115B (zh) 一种业务***代码自动生成方法及装置
CN115174555A (zh) 文件传输方法、装置、电子设备及存储介质
CN112104544B (zh) 一种基于FreeMarker发送动态邮件的方法及装置
CN114444447A (zh) 一种卡片的处理方法及装置
CN112822190A (zh) 报文维护方法及装置
CN111652747B (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
GR01 Patent grant
GR01 Patent grant