CN111722873A - 代码重构方法、装置、设备及介质 - Google Patents

代码重构方法、装置、设备及介质 Download PDF

Info

Publication number
CN111722873A
CN111722873A CN202010718413.9A CN202010718413A CN111722873A CN 111722873 A CN111722873 A CN 111722873A CN 202010718413 A CN202010718413 A CN 202010718413A CN 111722873 A CN111722873 A CN 111722873A
Authority
CN
China
Prior art keywords
code
target
request
interface
api
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
Application number
CN202010718413.9A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010718413.9A priority Critical patent/CN111722873A/zh
Publication of CN111722873A publication Critical patent/CN111722873A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

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

Abstract

本申请是关于一种代码重构方法、装置、设备及介质,涉及软件工程技术领域。该方法包括:获取请求记录文件,请求记录文件中包含至少一条网络请求;通过解析请求记录文件,筛选出请求记录文件中的目标网络请求,目标网络请求是通过调用目标API发起的网络请求,目标API对应的第一实现代码采用第一代码结构;从目标网络请求中提取目标API对应的目标接口信息;基于目标接口信息和第二代码结构生成目标API对应的第二实现代码,第二代码结构不同于所述第一代码结构。相比于人工分析请求记录文件,确定接口参数,本申请实施例可以自动化提取出目标API对应的目标接口信息,简化了分析请求记录文件的流程,进而提高了代码重构的效率。

Description

代码重构方法、装置、设备及介质
技术领域
本申请实施例涉及软件工程技术领域,特别涉及一种代码重构方法、装置、设备及介质。
背景技术
当应用客户端或业务服务器访问云平台时,需要调用相应的应用程序接口(Application Programming Interface,API)来向云平台发起访问请求。随着对API功能的不断修改,为了使得API的实现代码可以更适应于当前需要,或当存在需要更改API实现代码的架构时,需要对API的实现代码进行代码重构。
相关技术中,进行代码重构时,通过人工查看和分析请求信息,得到API对应的入参和出参信息后,人工编写重构后的API代码。
显然,采用相关技术中的代码重构方式,代码重构效率较低。
发明内容
本申请实施例提供了一种代码重构方法、装置、设备及介质,可以提高代码重构效率,该技术方案如下:
一方面,提供了一种代码重构方法,所述方法包括:
获取请求记录文件,所述请求记录文件中包含至少一条网络请求;
通过解析所述请求记录文件,筛选出所述请求记录文件中的目标网络请求,所述目标网络请求是通过调用目标API发起的网络请求,所述目标API对应的第一实现代码采用第一代码结构;
从所述目标网络请求中提取所述目标API对应的目标接口信息;
基于所述目标接口信息和第二代码结构生成所述目标API对应的第二实现代码,所述第二代码结构不同于所述第一代码结构。
另一方面,提供了一种代码重构装置,所述装置包括:
获取模块,用于获取请求记录文件,所述请求记录文件中包含至少一条网络请求;
解析模块,用于通过解析所述请求记录文件,筛选出所述请求记录文件中的目标网络请求,所述目标网络请求是通过调用目标API发起的网络请求,所述目标API对应的第一实现代码采用第一代码结构;
提取模块,用于从所述目标网络请求中提取所述目标API对应的目标接口信息;
生成模块,用于基于所述目标接口信息和第二代码结构生成所述目标API对应的第二实现代码,所述第二代码结构不同于所述第一代码结构。
另一方面,提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述方面所述的代码重构方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述方面所述的代码重构方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面的各种可选实现方式中提供的代码重构方法。
本申请提供的技术方案可以包括以下有益效果:
无需人工分析请求记录文件,由计算机设备直接对获取到的请求记录文件进行解析,筛选出其中由目标API发起的网络请求,并根据提取出的目标接口信息和第二代码结构生成重构后的API实现代码,相比于相关技术中人工分析请求记录文件,确定接口参数,本申请实施例可以自动化提取出目标API对应的目标接口信息,从而简化了分析请求记录文件的流程,进而提高了代码重构的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1示出了本申请一个示例性实施例提供的代码重构方法的实施环境的示意图;
图2示出了本申请一个示例性实施例示出的代码重构方法的流程图;
图3示出了本申请另一个示例性实施例示出的代码重构的方法的流程图;
图4示出了本申请另一个示例性实施例示出的代码重构的方法的流程图;
图5示出了本申请另一个示例性实施例示出的代码重构的方法的流程图;
图6示出了本申请另一个示例性实施例示出的代码重构的方法的流程图;
图7示出了本申请一个示例性实施例示出的完整代码重构的方法的流程图;
图8示出了本申请一个示例性实施例示出的代码重构的原理示意图;
图9示出了本申请另一个示例性实施例示出的代码重构方法的流程图;
图10示出了本申请一个示例性实施例示出的代码重构过程的界面图;
图11示出了本申请一个示例性实施例示出的代码重构装置的结构方框图;
图12示出了本申请一个示例性实施例提供的计算机设备的结构框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
为了便于理解,下面对本申请实施例中涉及的名词进行解释。
1)云技术(Cloud technology)
云技术是指基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
2)API
API指应用程序或业务服务器访问云平台时需要对应的API来发起网络请求。在一个示例性的例子中,业务提供方在云平台上存储用户资源,当业务服务器访问云平台时,需要调用对应的API来发起网络请求,从而获取对应的用户资源;其中,不同的业务端对应不同的API,比如,业务租用端对应的API属于租户端,业务提供端对应的API属于运营端。
请参考图1,其示出了本申请一个示例性实施例提供的代码重构方法的实施环境的示意图。如图1所示,该实施环境中包括云平台101、业务服务器102和计算机设备103。
云平台101是云技术领域中的云计算资源池,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。其可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
业务服务器102通过有线或无线通信方式进行直接或间接地连接。
业务服务器102是具有业务数据处理、业务数据访问功能的设备,其是应用程序对应的后台服务器,其可以接收来自应用程序的业务处理请求,并根据该业务处理请求去访问云平台中存储的业务数据资源;其可以是一台服务器,若干台服务器构成的服务器集群或云计算中心。本申请实施例中,业务服务器可以通过调用API向云平台发起网络请求,用于获取用户资源。
上述服务器,可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。
计算机设备103与业务服务器102通过有线或无线通信方式进行直接或间接地连接。
计算机设备103是具有网络访问功能的设备,计算机设备103在通过浏览器实现某一应用功能时,需要通过该应用对应的业务服务器102访问云平台101,其中,业务服务器102需要调用API来访问云平台101。其可以是智能手机、平板电脑、笔记本电脑、台式计算机等,本申请实施例对此不对构成限定。本申请实施例中,计算机设备103还具有代码重构功能,该代码重构功能可以通过代码重构工具实现,在一种可能的实施方式中,计算机设备103首先通过浏览器进行上述云平台访问过程,并在访问云平台101的过程中,浏览器可以获取调用API发起的网络请求,并将其存储在请求记录文件中,以便在完成云平台访问后,代码重构工具可以根据该请求记录文件分析得到API对应的接口信息,并基于该接口信息自动生成API的重构代码。
请参考图2,其示出了本申请一个示例性实施例示出的代码重构方法的流程图,本申请实施例以该方法应用于图1所示的计算机设备为例进行说明,该方法包括:
步骤201,获取请求记录文件,请求记录文件中包含至少一条网络请求。
由于在API使用过程中,开发人员人为多次修改过API的实现代码,比如,修改某个API的业务功能,可能会使得API的实现代码违反最初的设计架构,随着时间的发展,可能使得API的实现代码越来越难以维护,或越容易出现运行错误,因此,为了提高代码的生命力,需要开发人员定期对代码进行代码重构,即在不改变系统外部功能的前提下,对系统内部的结构重新进行整理。
在一种可能的实施方式中,存在请求记录文件,该请求记录文件可以记录某一业务页面的所有请求和响应信息,比如,当安装在用户客户端上的浏览器需要向云服务器(或服务器)上请求某些资源时,就需要调用API来发起该请求,则对应的请求记录文件中记录的网络请求中就包括该API对应的接口信息,比如,接口入参信息、接口出参信息和接口请求函数等信息。因此,可以通过分析该请求记录文件来获取API对应的接口信息。
由于该请求记录文件是在调用API发起请求后生成的文件,因此,在一种可能的实施方式中,开发人员若需要获取请求记录文件,则需要对业务页面进行操作,即试用该业务页面的全部功能,才会使得生成的请求记录文件中包含该业务页面所需调用的所有API对应的网络请求。
其中,请求记录文件可以是Har文件,该Har文件是用来储存超文本传输协议(HyperText Transfer Protocol,HTTP)请求/响应信息的通用文件格式,并且基于JavaScript对象简谱(JavaScript Object Notation,JSON)格式。
在一个示例性的例子中,以需要重构浏览器某一业务页面的API实现代码为例,开发人员需要在开发者调试模式下,使用某个网页的所有功能,使用完成后,可以下载得到对应的Har文件。
在一种可能的实施方式中,开发人员设计有代码重构工具或应用程序,当开发人员需要对某一业务页面的接口进行代码重构时,只需要将下载得到的请求记录文件上传至代码重构工具或应用程序中,相应的,计算机设备获取到对应的请求记录文件。
步骤202,通过解析请求记录文件,筛选出请求记录文件中的目标网络请求,目标网络请求是通过调用目标API发起的网络请求,目标API对应的第一实现代码采用第一代码结构。
不同于相关技术中,开发人员需要人工分析该请求记录文件,即人工分析请求记录文件中的每一条网络请求,来得到每个API对应的接口出入参信息,本申请实施例中,提供有代码重构工具,可以自动分析请求记录文件中的每一条网络请求,自动从网络请求中筛选出代码重构需要的相关接口信息。
由于不是所有的网络请求均需要由API发起的,比如,静态资源请求,因此,为了便于后续可以只针对API发起的网络请求进行接口信息提取,因此,在一种可能的实施方式中,预设有筛选规则,以便从请求记录文件中筛选出由API发起的目标网络请求。
其中,预设筛选规则可以由代码开发人员自行设置,比如,代码开发人员需要对特定API进行代码重构,即可以根据该特定API发起的网络请求的特点来设置筛选规则,以便后续可以直接提取出该特定API对应的接口信息。
步骤203,从目标网络请求中提取目标API对应的目标接口信息。
其中,目标接口信息可以包括接口入参信息、接口出参信息和请求地址。
在一种可能的实施方式中,目标接口信息均记录在请求记录文件中的“log.entries”这个数组中,则对应的,当计算机设备根据预设筛选规则筛选出目标API对应的目标网络请求后,即可以在“log.entries”这个数组中,提取出目标API对应的目标接口信息,以便用于后续的代码重构操作。
步骤204,基于目标接口信息和第二代码结构生成目标API对应的第二实现代码,第二代码结构不同于第一代码结构。
在一种可能的实施方式中,当编程人员在进行代码重构时,会预先设计出新的代码结构,即不同于原有代码结构(第一代码结构)的第二代码结构,预先存储在计算机设备中,以便在获取到目标API对应的目标接口信息后,可以基于该第二代码结构组装各个接口信息,从而形成第二代码结构的目标API的实现代码。
综上所述,本申请实施例中,无需人工分析请求记录文件,由计算机设备直接对获取到的请求记录文件进行解析,筛选出其中由目标API发起的网络请求,并根据提取出的目标接口信息和第二代码结构生成重构后的API实现代码,相比于相关技术中人工分析请求记录文件,确定接口参数,本申请实施例可以自动化提取出目标API对应的目标接口信息,从而简化了分析请求记录文件的流程,进而提高了代码重构的效率。
由于请求记录文件中并非全是目标API对应的网络请求信息,可能存在静态资源请求、重复网络请求(调用同一目标API发起的请求)、请求失败的网络请求,其中,静态资源请求与目标API无关,重复网络请求导致获取到重复的接口信息,请求失败的网络请求不具有分析价值,因此,为了减少计算机设备分析网络请求的压力,尽可能的减少分析的网络请求数量,在一种可能的实施方式中,预设有多重筛选规则,从请求记录文件中筛选出目标网络请求,以便后续进行目标接口信息的提取。
请参考图3,其示出了本申请另一个示例性实施例示出的代码重构的方法的流程图,本申请实施例以该方法应用于图1所示的计算机设备为例进行说明,该方法包括:
步骤301,获取请求记录文件,请求记录文件中包含至少一条网络请求。
步骤301的实施方式可以参考步骤201,本实施例在此不做赘述。
步骤302,根据目标API对应的目标网络请求参数,从请求记录文件中筛选出第一网络请求,目标网络请求参数是调用目标API发起的网络请求中包含的参数。
由于本申请实施例是为了对API的实现代码进行代码重构,因此,在一种可能的实施方式中,在获取目标网络请求时,开发人员需要预先分析由目标API发起的网络请求对应的请求特征,即分析目标API对应的目标网络请求参数,以便作为筛选目标网络请求的筛选条件之一。
在一种可能的实施方式中,开发人员预先将目标网络请求参数作为筛选条件存储在计算机设备中,当计算机设备获取到请求记录文件后,即可以根据该目标网络请求参数遍历请求记录文件,以便从中筛选出符合该目标网络请求参数的第一网络请求。
在一种可能的实施方式中,可以采用目标请求方式和请求出参的目标资源媒体类型作为目标网络请求参数,用于筛选出由目标API发起的目标网络请求,得到第一网络请求。
其中,API对应的请求方式可以包括:“get”、“post”、“delete”、“put”、“head”、“trace”、“options”;API对应的资源媒体类型(mimeType)为application/json。
在一种可能的实施方式中,当编程人员需要重构的目标API对应的请求方式为“post”,mimeType为application/json时,即可以将“post”作为目标请求方式,将“application/json”作为目标资源媒体类型,设置在计算机设备中,用于从请求记录文件中筛选出符合目标网络请求参数的第一网络请求。
其中,标注有请求方式字段的信息位于网络请求中的请求入参部分。
在一个示例性的例子中,下文示出了请求记录文件中一条网络请求的请求入参部分(其中,该网络请求入参字段信息中的“method:POST”即表示该网络请求对应的请求方式):
Figure BDA0002599056560000081
Figure BDA0002599056560000091
其中,标注有资源媒体类型字段的信息位于网络请求中的请求出参部分。
在一个示例性的例子中,下文示出了请求记录文件中一条网络请求的请求出参部分(其中,该网络请求出参字段信息中的“mimeType:application/json”即表示该网络请求对应的资源媒体类型):
Figure BDA0002599056560000092
在一种可能的应用场景下,可以使用JavaScript中的数组的过滤(filter)方法,从请求记录文件中过滤出符合目标网络资源类型的第一网络请求。
在一个示例性的例子中,采用filter方法遍历Har文件中的“log.entries”数组,筛选出符合目标网络请求参数(即目标请求方式为post,目标资源媒体类型为application/json)的代码可以为:
Figure BDA0002599056560000101
在另一种可能的实施方式中,开发人员可以根据自身需求,即需要重构的API对应的目标网络请求类型参数,来确定筛选条件,比如,目标请求方式为“get”,目标资源媒体类型为“application/json”,本申请实施例对此不构成限定。
步骤303,根据目标状态码,从第一网络请求中筛选出第二网络请求,目标状态码表征网络请求的请求状态为请求成功状态。
由于网络请求结果会在网络请求中的“respone.status”这个数组中体现,比如,状态码为“200”表示网络请求成功,成功返回请求网页,状态码为“404”表示请求的网页不存在,状态码为“503”表示服务不可用等,因此,在一种可能的实施方式中,可以将目标状态码(即200)作为第二筛选条件,用于从第一网络请求中筛选出请求成功的网络请求。
在一种可能的应用场景下,也可以使用JavaScript中的数组的filter方法,从第一网络请求中过滤出请求成功的第二网络请求。
在一个示例性的例子中,采用filter方法遍历第二网络请求中的“respone.status”数组,筛选出请求成功的第二网络请求(即目标状态码为200)的代码可以为:
Figure BDA0002599056560000102
Figure BDA0002599056560000111
步骤304,根据接口名称对第二网络请求进行去重,得到目标网络请求。
由于在对业务页面进行操作时,某一API可能会被重复调用,因此,为了避免对接口信息的重复提取,在一种可能的实施方式中,根据网络请求中的接口名对筛选出的第二网络请求进行去重,从而得到筛选后的目标网络请求。
在一个示例性的例子中,若请求记录文件中原本包含20条网络请求,经过第一筛选条件(目标网络请求参数)和第二筛选条件(目标状态码)筛选后的第二网络请求有10条,在这10条网络请求中可能存在调用同一API发起的网络请求,则进行筛选时,可以遍历这10条网络请求,比如,从第一条网络请求中提取出接口名称,再根据该接口名称去第二条网络请求中查找是否存在相同的接口名称,若存在,则过滤第二条网络请求,若不存在,则继续遍历其他的网络请求,并从第二条网络请求中提取出接口名称,继续进行筛选。
在一种可能的应用场景中,可以将接口名作为主键(key),去除第二网络请求中的重复接口。
需要说明的是,对于上述多重筛选规则,可以按照上述步骤302至步骤304的筛选顺序进行筛选,也可以按照目标状态码-目标网络请求参数-接口名称的顺序进行请求筛选;或按照目标状态码-接口名称-目标网络请求参数的顺序进行筛选,本申请实施例对此不构成限定。
步骤305,从目标网络请求中提取目标API对应的目标接口信息。
由于筛选后的网络请求中还包含进行代码重构时不需要的参数,因此,为了准确地从目标网络请求中提取出所需要的目标接口信息,在一种可能的实施方式中,开发人员预先将自己所需的接口信息以一个接口实例的方式编写好,并预先存储在计算机设备中,以便可以准确地提取出所需的目标接口信息。
在一个示例性的例子中,从目标网络请求中提取出的目标接口信息的示例可以为:
Figure BDA0002599056560000112
Figure BDA0002599056560000121
在一个示例性的例子中,提取出的接口信息中可以包括接口入参信息、接口出参信息和请求地址,其中,接口入参信息用于确定实现代码中的接口入参定义,接口出参信息用于确定实现代码中的接口出参定义,请求地址则用来确定实现代码中的接口请求函数。
步骤306,基于目标接口信息和第二代码结构生成目标API对应的第二实现代码,第二代码结构不同于第一代码结构。
本步骤的实施方式可以参考上文实施例,本实施例在此不做赘述。
本实施例中,通过预设多重筛选规则来解析请求记录文件,从中筛选出调用目标API发起的目标网络请求,使得在进行目标接口信息提取时,无需对静态资源请求进行提取,无需对请求失败的网络请求进行提取,无需对重复接口进行提取,可以减少计算机设备的数据处理压力,从而提高提取目标接口信息的效率。
在一种可能的实施方式中,编程人员会预先根据第二代码结构编写出API对应的重构代码模板,其中不包含具体的接口参数,仅包含对接口的定义字段,比如,接口入参定义模板中包含:接口名字段、接口入参的数据类型等,并将该重构代码模板作为代码重构的依据。
请参考图4,其示出了本申请另一个示例性实施例示出的代码重构方法的流程图,本申请实施例以该方法应用于图1所示的计算机设备为例进行说明,该方法包括:
步骤401,获取请求记录文件,请求记录文件中包含至少一条网络请求。
步骤402,通过解析请求记录文件,筛选出请求记录文件中的目标网络请求,目标网络请求是通过调用目标API发起的网络请求,目标API对应的第一实现代码采用第一代码结构。
步骤403,从目标网络请求中提取目标API对应的目标接口信息。
步骤401至步骤403的实施方式可以参考上文实施例,本实施例在此不做赘述。
步骤404,获取重构代码模板,重构代码模板采用第二代码结构定义目标API。
其中,重构代码模板是由编程人员根据API对应的重构代码结构预先编写的基础模板,用来定义该目标API。
由于重构代码模板不包含具体的接口参数,比如,具体的接口名,具体传输的参数等,因此,对于不同的目标API,均可以采用相同的重构代码模板。
在一种可能的实施方式中,重构代码模板可以包括三部分结构:接口入参定义模板、接口出参定义模板和接口请求函数定义模板。
针对编写接口请求函数定义模板,在一种可能的实施方式中,编程人员根据提取出的目标接口信息中的请求地址来确定请求函数,从而编写对应的接口请求函数定义模板。
由于接口的请求地址可能存在差异,则对应的请求访问的业务端(或业务平台)可能存在差异,而业务端的不同可能导致采用的请求方式存在差异,因此,在一种可能的实施方式中,编程人员根据不同业务端来编写不同的接口请求函数定义模板,并将不同重构代码模板输入计算机设备中,用于后续生成重构代码。相应的,在计算机设备确定重构代码模板时,也需要根据请求地址来确定。
在一种可能的实施方式中,获取重构代码的过程可以包括以下步骤:
一、根据目标接口信息中的请求地址,确定目标API所属的目标业务端。
其中,请求地址可以由目标网络请求接口入参字段中的“统一资源定位符(Uniform Resource Locator,URL)”来确定。
在一种可能的实施方式中,在客户端访问业务平台时,不同的业务平台对应不同的URL,则可以根据该URL来确定目标API所属的目标业务端(或目标业务平台)。
可选的,计算机设备中可以预先存储有URL与业务端之间的对应关系,以便从目标网络请求中提取出对应的请求地址(URL)后,可以根据该请求地址去关系表中查找对应的目标业务端。
其中,业务端可以包括业务租用端(即租户端)和业务提供端(即运营端)。
在一个示例性的例子中,URL与目标业务端之间的对应关系表可以如表一所示。
表一
请求地址 业务端
urlA 租户端
urlB 运营端
…… ……
二、根据目标业务端确定目标API对应的重构代码模板,其中,不同业务端对应不同重构代码模板。
由于不同目标业务端可以对应不同请求方式(即接口请求函数),则对应的重构代码模板中的接口请求函数定义存在差异,因此,在一种可能的实施方式中,针对不同业务端设置有不同的重构代码模板,当计算机设备在确定出目标API所属的目标业务端后,则可以根据该目标业务端来确定所使用的重构代码模板。
在一种可能的实施方式中,计算机设备中预存储有业务端和重构代码模板之间的对应关系,以便计算机设备在确定出目标API所属的目标业务端后,可以确定重构API实现代码时,所需要使用的重构代码模板。
在一个示例性的例子中,重构代码模板和业务端之间的对应关系表可以如表二所示。
表二
业务端 重构代码模板
租户端 模板A
运营端 模板B
…… ……
步骤405,根据目标接口信息和重构代码模板,生成目标API对应的第二实现代码。
在一种可能的实施方式中,当获取到重构代码模板后,编程人员可以根据重构代码模板中的各个定义字段,人工分析并编写重构代码模板对应的语法结构,并根据计算机设备预先提取出的目标接口信息和该重构代码模板,编写目标API对应的第二实现代码。
在另一种可能的实施方式中,为了避免编程人员需要人工分析语法结构,可以引入抽象语法树,即将重构代码模板输入编译器中,可以直接得到该重构代码模板对应的语法结构。
本实施例中,在代码重构过程中,引入重构代码模板,以便实现基于第二代码结构重构API的实现代码;此外,通过从目标网络请求中获取的URL来确定该目标API对应的业务端,由于不同业务端对应不同重构代码模板,因此,可以实现自动确定目标API对应的重构代码模板的过程。
在一种可能的实施方式中,在生成重构代码的过程中,采用抽象语法树来分析重构代码模板对应的语法结构,无需人工进行编写,可以进一步提高重构代码的生成效率。
在一个示例性的例子中,在图4的基础上,如图5所示,步骤405可以被替换为步骤501、步骤502和步骤503。
步骤501,将重构代码模板输入编译器,得到编译器输出的抽象语法树,抽象语法树中包含的各个节点用于表示重构代码模板对应的语法结构。
在一种可能的实施方式中,计算机设备中预设有编译器,该编译器可以将输入的重构代码模板,生成其对应的抽象语法树,以便开发人员可以直接根据该抽象语法树来获取对应的语法结构,无需人工分析重构代码模板对应的语法结构,可以提高生成重构代码的效率。
在一种可能的实施方式中,由于重构代码模板包括接口入参定义模板、接口出参定义模板和接口请求函数定义模板,则对应的,在根据编译器生成抽象语法树的同时,也需要针对不同的部分定义模板来编译对应的抽象语法树。
在一个示例性的例子中,在图5的基础上,如图6所示,步骤501可以包括:步骤501A、步骤501B和步骤501C。
步骤501A,将接口入参定义模板输入编译器,得到编译器输出的第一抽象语法树。
在一种可能的实施方式中,编程人员预先根据接口实现代码所需要的字段信息,编写对应的接口入参定义,即规定接口入参定义需要的接口入参字段,比如,接口名、接口入参数据类型等。
其中,接口入参数据类型可以由网络请求信息中的接口传输参数对应的数据类型来确定,比如,接口传输的参数类型为数字,则对应的接口入参数据类型为“number”,若接口传输的参数类型为字符串,则对应的接口入参数据类型为“string”,当然还存在其他的数据类型,本申请实施例对此不构成限定。
在一个示例性的例子中,重构代码模板中的接口入参定义模板可以为:
export interface GetTagsReq{//接口入参定义
Id:number;//接口参数类型为数字
}
在一种可能的实施方式中,将接口入参定义模板输入编译器中,可以得到编译器输出的第一抽象语法树,该第一抽象语法树中的各个节点表示该接口入参定义模板中的第一语法结构。
在一个示例性的例子中,接口入参定义模板对应的第一抽象语法树可以为(下文仅示出了部分第一抽象语法树):
Figure BDA0002599056560000161
Figure BDA0002599056560000171
步骤501B,将接口出参定义模板输入编译器,得到编译器输出的第二抽象语法树。
在一种可能的实施方式中,编程人员预先根据接口实现代码所需要的字段信息,编写对应的接口出参定义模板,并将编写好的接口出参定义模板输入编译器,得到接口出参定义模板对应的第二抽象语法树,该第二抽象语法树中的各个节点用于表示接口出参定义模板对应的语法结构。
在一个示例性的例子中,该接口出参定义模板与接口入参定义模板之间的格式相同,接口出参定义模板可以参考上文接口入参定义模板,本申请实施例在此不做赘述。
步骤501C,将接口请求函数定义模板输入编译器,得到编译器输出的第三抽象语法树。
其中,接口请求函数由目标API所属的业务端所决定。
针对确定目标API所属业务端的方式,可以参考上文实施例,本实施例在此不做赘述。
在一种可能的实施方式中,编程人员预先根据接口请求实现代码所需要的字段信息,编写对应的接口请求函数定义模板,并将接口请求函数定义模板输入编译器,得到编译器输出的第三抽象语法树,该第三抽象语法树中的各个节点表示该接口请求函数定义模板对应的语法结构。
在一个示例性的例子中,重构代码模板中的接口请求函数定义模板可以为:
Figure BDA0002599056560000172
Figure BDA0002599056560000181
步骤502,根据目标抽象语法树中的各个节点,从目标编程库中查找语法结构对应的语法实现代码。
由于抽象语法树中的各个节点表示抽象语法树对应重构代码模板中的语法结构,因此,在生成重构代码的过程中,可以根据该各个节点对应的关键字去编程库中查找语法结构对应的语法实现代码,以便后续根据该语法实现代码来填入对应的目标接口信息。
在一个示例性的例子中,以上文中的接口函数定义模板对应的第三抽象语法树为例,根据该第三抽象语法树中各个节点去对应的TypeScript中查找对应的生成实际代码的方法,比如“FunctionDeclaration”这一关键词对应的创建function代码的函数为:ts.createFunctionDeclaration(),依次类推,可以查找到各个语法结构对应的语法实现代码。
步骤503,根据语法实现代码和目标接口信息,生成目标API对应的第二实现代码。
在一种可能的实施方式中,由于语法实现代码中并未包含接口的具体参数,因此,在获取到对应的语法实现代码后,还需要将目标接口信息填入对应的语法实现代码中,才可以最终生成目标API对应的第二实现代码。
在一个示例性的例子中,一个目标API对应的第二实现代码可以为:
Figure BDA0002599056560000182
Figure BDA0002599056560000191
由于上文中重构代码模板分为三个部分,且对应的生成的抽象语法树也可以分为三部分,则对应的在生成第二实现代码的过程中,也可以分别生成各个部分对应的实现代码。
在一个示例性的例子中,在图5的基础上,如图6所示,步骤503可以包括步骤503A至步骤503D。
步骤503A,根据接口入参定义模板对应的第一语法实现代码,以及目标接口信息中的接口入参信息,生成目标API对应的接口入参定义代码。
在一种可能的实施方式中,计算机设备输出接口入参定义模板对应的第一抽象语法树后,编程人员可以根据该第一抽象语法树编写对应的调用目标编程库中语法实现代码的程序,并输入计算机设备中,相应的计算机设备运行该调用程序,得到接口入参定义模板对应的第一语法实现代码,即可以将预先获取到的接口入参信息填入该第一语法实现代码中,从而生成目标API对应的接口入参定义代码。
步骤503B,根据接口出参定义模板对应的第二语法实现代码,以及目标接口信息中的接口出参信息,生成目标API对应的接口出参定义代码。
在一种可能的实施方式中,计算机设备输出接口出参定义模板对应的第二抽象语法树后,编程人员可以根据该第二抽象语法树编写对应的调用目标编程库中语法实现代码的程序,并输入计算机设备中,相应的计算机设备运行该调用程序,得到接口出参定义模板对应的第二语法实现代码,即可以将预先获取到的接口出参信息填入该第二语法实现代码中,从而生成目标API对应的接口出参定义代码。
步骤503C,根据接口请求函数定义模板对应的第三语法实现代码,以及接口入参信息和接口出参信息,生成目标API对应的接口请求代码。
在一种可能的实施方式中,计算机设备输出接口请求函数定义模板对应的第三抽象语法树后,编程人员可以根据该第三抽象语法树编写对应的调用目标编程库中语法实现代码的程序,并输入计算机设备中,相应的计算机设备运行该调用程序,得到接口请求函数定义模板对应的第三语法实现代码,即可以将预先获取到的接口入参信息和接口出参信息填入该第三语法实现代码中,从而生成目标API对应的接口请求代码。
步骤503D,将接口入参定义代码、接口出参定义代码和接口请求代码确定为第二实现代码。
在一种可能的实施方式中,将生成的接口入参定义代码、接口出参定义代码和接口请求代码组合,即可以得到目标API对应的第二实现代码。
需要说明的是,上文实施例仅以目标API包含接口入参、接口出参和接口请求函数为例介绍了对应的重构代码生成过程,在其他可能的实施方式中,存在接口仅包含接口出参和接口请求函数,生成重构代码的过程与上文实施例类似,本实施例在此不做赘述。
本实施例中,通过引入抽象语法树来分析重构代码模板对应的语法结构,使得无需人工拼接各个接口定义字段,进一步提高生成重构代码的效率;此外,重构代码模板可以分为接口入参定义模板、接口出参定义模板和接口请求函数定义模板,通过对三个部分分别通过抽象语法树进行代码定义,得到接口入参定义代码、接口出参定义代码和接口请求代码,组合即可得到目标API对应的实现代码。
请参考图7,其示出了本申请一个示例性实施例示出的完整代码重构的方法的流程图,该方法包括:
步骤701,操作需要导出接口的业务页面,生成Har文件。
当编程人员需要对某个业务页面对应的API进行代码重构时,则需要人为操作对应的业务页面,以便得到包含调用API实现的网络请求对应的Har文件。
步骤702,点击浏览器页面的Har文件下载控件。
在开发者调试界面中提供有Har文件下载控件。
步骤703,获取业务页面所有请求的Har文件。
将下载得到的Har文件上传至代码重构工具中,用于解析该Har文件。
步骤704,解析Har文件。
其中,解析Har文件可以包括以下步骤(步骤704A至步骤704C):
步骤704A,从Har文件中筛选出请求方式为“POST”,请求出参的mimeType为application/json的网络请求。
步骤704B,从Har文件中筛选出respone.status为“200”的网络请求。
步骤704C,根据接口名称对网络请求去重。
步骤705,从解析Har文件后得到的目标网络请求中提取出接口入参信息、接口出参信息和请求地址。
步骤706,获取重构代码模板。
其中,获取重构代码模板的过程包括步骤706A和步骤706B:
步骤706A,确定接口入参定义模板、接口出参定义模板。
步骤706B,根据请求地址确定接口请求函数定义模板。
步骤707,生成抽象语法树。
将重构代码模板输入编译器中,得到抽象语法树。
步骤708,调用语法结构对应的语法实现代码。
根据抽象语法树中的各个节点,确定语法结构,并调用语法结构对应的语法实现代码。
步骤709,生成接口实现代码。
其中,生成接口实现代码的可以包括步骤709A至709C:
步骤709A,根据接口定义模板对应的第一语法实现代码和接口入参信息,生成接口入参定义代码。
步骤709B,根据接口出参定义模板对应的第二语法实现代码和接口出参信息,生成接口出参定义代码。
步骤709C,根据接口请求函数定义模板对应的第三语法实现代码,以及接口入参信息和接口出参信息,生成异步请求代码。
请参考图8,其示出了本申请一个示例性实施例示出的代码重构的原理示意图,如图8所示,计算机设备对上传的请求记录文件801按照预设筛选条件(图8中的1-3)进行解析,得到目标网络请求802,并从目标网络请求802中提取目标API对应的目标接口信息803;将重构代码模板804输入编译器805中,得到重构代码模板804对应的抽象语法树806,根据抽象语法树806中的各个节点,去编程库807中调用语法结构对应的语法实现代码808,将语法实现代码808和目标接口信息803组合,即可以得到目标API对应的API实现代码809。
上文实施例仅描述了重构代码的底层实现过程,在一种可能的应用场景中,开发人员将上述代码重构过程实现为一个代码重构工具或代码重构应用,方便其他编程人员使用该工具实现对任意API的代码重构。
在一个示例性的例子中,如图9所示,其示出了本申请另一个示例性实施例示出的代码重构方法的流程图,本申请实施例以该方法应用于图1所示的计算机设备为例进行说明,该方法包括:
步骤901,显示代码重构界面。
其中,代码重构界面中至少包括上传控件,该上传控件用于上传请求记录文件。
步骤902,响应于接收到对代码重构界面中上传控件的点击操作,获取请求记录文件。
在一种可能的实施方式中,当用户点击代码重构界面中的上传控件后,即可以选择目标请求记录文件上传至计算机设备,相应的,计算机设备获取到对应的请求记录文件。
在一个示例性的例子中,如图10所示,其示出了本申请一个示例性实施例示出的代码重构过程的界面图。当用户点击代码重构界面1000中的上传控件1001后,可以选择对应的请求记录文件上传,则对应的,计算机设备获取到请求记录文件。
步骤903,响应于请求记录文件解析完成,得到目标API对应的目标接口信息,并根据目标接口信息在代码重构界面中显示接口列表。
其中,接口列表中包含至少一个目标API。
在一种可能的实施方式中,当计算机设备在后台依据预先设定的筛选规则对请求记录文件进行解析后,可以得到至少一个目标API对应的目标接口信息,并根据该目标接口信息在代码重构界面中显示至少一个目标API对应的接口信息,比如,接口名、接口所属端、接口版本等,以便用户可以选择任意接口进行代码重构。
在一个示例性的例子中,如图10所示,当计算机设备对请求记录文件解析完成后,即根据获取到的目标接口信息在代码重构界面1000上显示接口列表,该接口列表中包含各个接口对应的接口类型(serviceType)、接口名(action)、接口版本(version)、接口所属端等信息,以便用户根据需求进行接口重构选择。
步骤904,响应于接收到对接口列表中目标API的选择操作,并在接收到对生成代码控件的点击操作后,自动生成目标API对应的重构代码。
在一种可能的实施方式中,当代码重构界面中显示接口列表后,用户可以选择至少一个目标API进行代码重构操作,并点击生成代码控件后,相应的,计算机设备接收到对目标API的代码重构操作,即自动生成目标API对应的重构代码。
其中,生成后的重构代码可以以弹窗的形式显示在代码重构界面上层,也可以在代码重构界面中显示代码下载控件,以便用户点击该下载控件,得到对应的重构代码。
在一个示例性的例子中,如图10所示,当用户点击接口列表中的接口名为“GetTags”和“GreateTag”两个接口后,计算机设备接收到对目标API的选中操作,将其确定为目标API;当用户再次点击生成代码控件1002后,相应的,计算机设备接收到对目标API的代码重构操作,则后台自动生成目标API对应的重构代码;当用户点击代码下载控件1003后,即可以下载目标API对应的重构代码。
可选的,当代码重构完成后,可以在代码重构界面上显示提示信息,用于提示用户代码重构完成。
本实施例中,描述了代码重构过程的界面示意图,用户只需在代码重构界面进行请求记录文件的上传操作、目标API的选择操作,计算机设备后台即可实现对目标API的代码重构,无需人工分析请求记录文件和编写实现代码,从而提高了代码重构的效率。
请参考图11,其示出了本申请一个示例性实施例示出的代码重构装置的结构方框图。该装置可以通过软件、硬件或者两者的结合实现成为计算机设备的全部或一部分。该装置可以包括:
获取模块1101,用于获取请求记录文件,所述请求记录文件中包含至少一条网络请求;
解析模块1102,用于通过解析所述请求记录文件,筛选出所述请求记录文件中的目标网络请求,所述目标网络请求是通过调用目标API发起的网络请求,所述目标API对应的第一实现代码采用第一代码结构;
提取模块1103,用于从所述目标网络请求中提取所述目标API对应的目标接口信息;
生成模块1104,用于基于所述目标接口信息和第二代码结构生成所述目标API对应的第二实现代码,所述第二代码结构不同于所述第一代码结构。
在一种可能的实施方式中,所述解析模块1102,包括:
第一筛选单元,用于根据所述目标API对应的目标网络请求参数,从所述请求记录文件中筛选出第一网络请求,所述目标网络请求参数是调用所述目标API发起的网络请求中包含的参数;
第二筛选单元,用于根据目标状态码,从所述第一网络请求中筛选出第二网络请求,所述目标状态码表征网络请求的请求状态为请求成功状态;
去重单元,用于根据接口名称对所述第二网络请求进行去重,得到所述目标网络请求。
在一种可能的实施方式中,所述目标网络请求参数包括目标请求方式和目标资源媒体类型;
所述第一筛选单元,还用于:
将所述请求记录文件中,请求方式为所述目标请求方式,且请求出参数的资源媒体类型为所述目标资源媒体类型的网络请求确定为所述第一网络请求。
在一种可能的实施方式中,所述生成模块1104,包括:
获取单元,用于获取重构代码模板,所述重构代码模板采用所述第二代码结构定义所述目标API;
生成单元,用于根据所述目标接口信息和所述重构代码模板,生成所述目标API对应的所述第二实现代码。
在一种可能的实施方式中,所述生成单元,还用于:
将所述重构代码模板输入编译器,得到所述编译器输出的抽象语法树,所述抽象语法树中包含的各个节点用于表示所述重构代码模板对应的语法结构;
根据所述目标抽象语法树中的各个节点,从目标编程库中查找所述语法结构对应的语法实现代码;
根据所述语法实现代码和所述目标接口信息,生成所述目标API对应的所述第二实现代码。
在一种可能的实施方式中,所述重构代码模板包括接口入参定义模板、接口出参定义模板和接口请求函数定义模板;
所述生成单元,还用于:
将所述接口入参定义模板输入所述编译器,得到所述编译器输出的第一抽象语法树;
将所述接口出参定义模板输入所述编译器,得到所述编译器输出的第二抽象语法树;
将所述接口请求函数定义模板输入所述编译器,得到所述编译器输出的第三抽象语法树。
在一种可能的实施方式中,所述生成单元,还用于:
根据所述接口入参定义模板对应的第一语法实现代码,以及所述目标接口信息中的接口入参信息,生成所述目标API对应的接口入参定义代码;
根据所述接口出参定义模板对应的第二语法实现代码,以及所述目标接口信息中的接口出参信息,生成所述目标API对应的接口出参定义代码;
根据所述接口请求函数定义模板对应的第三语法实现代码,以及所述接口入参信息和所述接口出参信息,生成所述目标API对应的接口请求代码;
将所述接口入参定义代码、所述接口出参定义代码和所述接口请求代码确定为所述第二实现代码。
在一种可能的实施方式中,所述获取单元,还用于:
根据所述目标接口信息中的请求地址,确定所述目标API所属的目标业务端;
根据所述目标业务端确定所述目标API对应的所述重构代码模板,其中,不同业务端对应不同重构代码模板。
综上所述,本申请实施例中,无需人工分析请求记录文件,由计算机设备直接对获取到的请求记录文件进行解析,筛选出其中由目标API发起的网络请求,并根据提取出的目标接口信息和第二代码结构生成重构后的API实现代码,相比于相关技术中人工分析请求记录文件,确定接口参数,本申请实施例可以自动化提取出目标API对应的目标接口信息,从而简化了分析请求记录文件的流程,进而提高了代码重构的效率。
请参考图12,其示出了本申请一个示例性实施例提供的计算机设备的结构框图。该计算机设备可用于实施上述实施例中提供的代码重构方法,具体来讲:
所述计算机设备1200包括中央处理单元(Central Processing Unit,CPU)1201、包括随机存取存储器(Random Access Memory,RAM)1202和只读存储器(Read-OnlyMemory,ROM)1203的系统存储器1204,以及连接系统存储器1204和中央处理单元1201的系统总线1205。所述计算机设备1200还包括帮助计算机设备内的各个器件之间传输信息的基本输入/输出系统(Input/Output系统,I/O系统)1206,和用于存储操作系统1213、应用程序1214和其他程序模块1215的大容量存储设备1207。
所述基本输入/输出系统1206包括有用于显示信息的显示器1208和用于用户输入信息的诸如鼠标、键盘之类的输入设备1209。其中所述显示器1208和输入设备1209都通过连接到系统总线1205的输入输出控制器1210连接到中央处理单元1201。所述基本输入/输出系统1206还可以包括输入输出控制器1210以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1210还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备1207通过连接到系统总线1205的大容量存储控制器(未示出)连接到中央处理单元1201。所述大容量存储设备1207及其相关联的计算机可读存储介质为计算机设备1200提供非易失性存储。也就是说,所述大容量存储设备1207可以包括诸如硬盘或者只读光盘(Compact Disc Read-Only Memory,CD-ROM)驱动器之类的计算机可读存储介质(未示出)。
不失一般性,所述计算机可读存储介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读存储指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读寄存器(Erasable Programmable Read OnlyMemory,EPROM)、电子抹除式可复写只读存储器(Electrically-Erasable ProgrammableRead-Only Memory,EEPROM)、闪存或其他固态存储其技术,CD-ROM、数字多功能光盘(Digital Versatile Disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1204和大容量存储设备1207可以统称为存储器。
存储器存储有一个或多个程序,一个或多个程序被配置成由一个或多个中央处理单元1201执行,一个或多个程序包含用于实现上述方法实施例的指令,中央处理单元1201执行该一个或多个程序实现上述各个方法实施例提供的方法。
根据本申请的各种实施例,所述计算机设备1200还可以通过诸如因特网等网络连接到网络上的远程服务器运行。也即计算机设备1200可以通过连接在所述系统总线1205上的网络接口单元1211连接到网络1212,或者说,也可以使用网络接口单元1211来连接到其他类型的网络或远程服务器系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的方法中由计算机设备所执行的步骤。
在示例性实施例中,还提供了一种非临时性计算机可读存储介质,所述存储介质中存储有计算机程序,所述计算机程序在被处理器执行时以实现上述各个实施例所述的代码重构方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面的各种可选实现方式中提供的代码重构方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

Claims (11)

1.一种代码重构方法,其特征在于,所述方法包括:
获取请求记录文件,所述请求记录文件中包含至少一条网络请求;
通过解析所述请求记录文件,筛选出所述请求记录文件中的目标网络请求,所述目标网络请求是通过调用目标API发起的网络请求,所述目标API对应的第一实现代码采用第一代码结构;
从所述目标网络请求中提取所述目标API对应的目标接口信息;
基于所述目标接口信息和第二代码结构生成所述目标API对应的第二实现代码,所述第二代码结构不同于所述第一代码结构。
2.根据权利要求1所述的方法,其特征在于,所述通过解析所述请求记录文件,筛选出所述请求记录文件中的目标网络请求,包括:
根据所述目标API对应的目标网络请求参数,从所述请求记录文件中筛选出第一网络请求,所述目标网络请求参数是调用所述目标API发起的网络请求中包含的参数;
根据目标状态码,从所述第一网络请求中筛选出第二网络请求,所述目标状态码表征网络请求的请求状态为请求成功状态;
根据接口名称对所述第二网络请求进行去重,得到所述目标网络请求。
3.根据权利要求2所述的方法,其特征在于,所述目标网络请求参数包括目标请求方式和目标资源媒体类型;
所述根据所述目标API对应的目标网络请求参数,从所述请求记录文件中筛选出第一网络请求,包括:
将所述请求记录文件中,请求方式为所述目标请求方式,且请求出参数的资源媒体类型为所述目标资源媒体类型的网络请求确定为所述第一网络请求。
4.根据权利要求1至3任一所述的方法,其特征在于,所述基于所述目标接口信息和第二代码结构生成所述目标API对应的第二实现代码,包括:
获取重构代码模板,所述重构代码模板采用所述第二代码结构定义所述目标API;
根据所述目标接口信息和所述重构代码模板,生成所述目标API对应的所述第二实现代码。
5.根据权利要求4所述的方法,其特征在于,所述根据所述目标接口信息和所述重构代码模板,生成所述目标API对应的所述第二实现代码,包括:
将所述重构代码模板输入编译器,得到所述编译器输出的抽象语法树,所述抽象语法树中包含的各个节点用于表示所述重构代码模板对应的语法结构;
根据所述目标抽象语法树中的各个节点,从目标编程库中查找所述语法结构对应的语法实现代码;
根据所述语法实现代码和所述目标接口信息,生成所述目标API对应的所述第二实现代码。
6.根据权利要求5所述的方法,其特征在于,所述重构代码模板包括接口入参定义模板、接口出参定义模板和接口请求函数定义模板;
所述将所述重构代码模板输入编译器,得到所述编译器输出的抽象语法树,包括:
将所述接口入参定义模板输入所述编译器,得到所述编译器输出的第一抽象语法树;
将所述接口出参定义模板输入所述编译器,得到所述编译器输出的第二抽象语法树;
将所述接口请求函数定义模板输入所述编译器,得到所述编译器输出的第三抽象语法树。
7.根据权利要求6所述的方法,其特征在于,所述根据所述语法实现代码和所述目标接口信息,生成所述目标API对应的所述第二实现代码,包括:
根据所述接口入参定义模板对应的第一语法实现代码,以及所述目标接口信息中的接口入参信息,生成所述目标API对应的接口入参定义代码;
根据所述接口出参定义模板对应的第二语法实现代码,以及所述目标接口信息中的接口出参信息,生成所述目标API对应的接口出参定义代码;
根据所述接口请求函数定义模板对应的第三语法实现代码,以及所述接口入参信息和所述接口出参信息,生成所述目标API对应的接口请求代码;
将所述接口入参定义代码、所述接口出参定义代码和所述接口请求代码确定为所述第二实现代码。
8.根据权利要求1至3任一所述的方法,其特征在于,所述获取重构代码模板,包括:
根据所述目标接口信息中的请求地址,确定所述目标API所属的目标业务端;
根据所述目标业务端确定所述目标API对应的所述重构代码模板,其中,不同业务端对应不同重构代码模板。
9.一种代码重构装置,其特征在于,所述装置包括:
获取模块,用于获取请求记录文件,所述请求记录文件中包含至少一条网络请求;
解析模块,用于通过解析所述请求记录文件,筛选出所述请求记录文件中的目标网络请求,所述目标网络请求是通过调用目标API发起的网络请求,所述目标API对应的第一实现代码采用第一代码结构;
提取模块,用于从所述目标网络请求中提取所述目标API对应的目标接口信息;
生成模块,用于基于所述目标接口信息和第二代码结构生成所述目标API对应的第二实现代码,所述第二代码结构不同于所述第一代码结构。
10.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至8任一所述的代码重构方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至8任一所述的代码重构方法。
CN202010718413.9A 2020-07-23 2020-07-23 代码重构方法、装置、设备及介质 Pending CN111722873A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010718413.9A CN111722873A (zh) 2020-07-23 2020-07-23 代码重构方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010718413.9A CN111722873A (zh) 2020-07-23 2020-07-23 代码重构方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN111722873A true CN111722873A (zh) 2020-09-29

Family

ID=72573422

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010718413.9A Pending CN111722873A (zh) 2020-07-23 2020-07-23 代码重构方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN111722873A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113238796A (zh) * 2021-05-17 2021-08-10 北京京东振世信息技术有限公司 一种代码重构方法、装置、设备及存储介质
CN113254027A (zh) * 2021-05-20 2021-08-13 西安华讯科技有限责任公司 一种半导体设备控制程序转换方法、系统、设备和存储介质
CN113407169A (zh) * 2021-06-29 2021-09-17 北京字节跳动网络技术有限公司 一种软件开发方法及装置
CN116501303A (zh) * 2023-06-25 2023-07-28 北京长亭科技有限公司 Api代码自动生成方法与装置
WO2023155487A1 (zh) * 2022-02-18 2023-08-24 华为云计算技术有限公司 代码重构方法及装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113238796A (zh) * 2021-05-17 2021-08-10 北京京东振世信息技术有限公司 一种代码重构方法、装置、设备及存储介质
CN113254027A (zh) * 2021-05-20 2021-08-13 西安华讯科技有限责任公司 一种半导体设备控制程序转换方法、系统、设备和存储介质
CN113254027B (zh) * 2021-05-20 2024-05-14 西安华讯科技有限责任公司 一种半导体设备控制程序转换方法、系统、设备和存储介质
CN113407169A (zh) * 2021-06-29 2021-09-17 北京字节跳动网络技术有限公司 一种软件开发方法及装置
WO2023155487A1 (zh) * 2022-02-18 2023-08-24 华为云计算技术有限公司 代码重构方法及装置
CN116501303A (zh) * 2023-06-25 2023-07-28 北京长亭科技有限公司 Api代码自动生成方法与装置
CN116501303B (zh) * 2023-06-25 2023-11-14 北京长亭科技有限公司 Api代码自动生成方法与装置

Similar Documents

Publication Publication Date Title
US10705942B1 (en) Simulated testing of API
CN111722873A (zh) 代码重构方法、装置、设备及介质
CN108279932B (zh) 一种移动终端动态配置用户界面方法和装置
US9667704B1 (en) System and method for classifying API requests in API processing systems using a tree configuration
CN109062780B (zh) 自动化测试用例的开发方法及终端设备
CN110944048B (zh) 业务逻辑配置方法及装置
CN107276842B (zh) 接口测试方法、装置及电子设备
CN111125598A (zh) 数据智能查询方法、装置、设备及存储介质
CN108536745B (zh) 基于Shell的数据表提取方法、终端、设备及存储介质
CN106873952B (zh) 移动端网页开发的数据处理系统和方法、及应用装置
CN112988165A (zh) 基于Kubernetes的交互式建模方法、装置、电子设备及存储介质
CN112861059A (zh) 可视化组件生成方法、装置、计算机设备及可读存储介质
CN112835578A (zh) 一种bundle文件生成方法和存储介质
CN113946366A (zh) 代码分析的方法、系统及计算设备
CN117632710A (zh) 测试代码的生成方法、装置、设备及存储介质
US10560524B2 (en) System and method providing local development of executable content pages normally run on a server within a user session
CN111061478A (zh) 一种页面表单修改方法、装置、设备及可读存储介质
CN114139502A (zh) 文档内容处理方法、装置、设备及存储介质
CN117875288A (zh) 一种表单页面生成方法、装置及电子设备
US11669509B2 (en) System and method for achieving optimal change data capture (CDC) on hadoop
CN115599361A (zh) 一种软件的开发方法、装置、设备及介质
CN117897710A (zh) 解决工业数据转换问题的人工智能方法
CN114721930A (zh) 一种数据处理方法、装置、设备及介质
Sharma et al. File Merger
CN111143187A (zh) 用于应用程序接口api测试的方法和设备

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