CN115509514B - 一种前端数据模拟方法、装置、设备及介质 - Google Patents

一种前端数据模拟方法、装置、设备及介质 Download PDF

Info

Publication number
CN115509514B
CN115509514B CN202211470378.9A CN202211470378A CN115509514B CN 115509514 B CN115509514 B CN 115509514B CN 202211470378 A CN202211470378 A CN 202211470378A CN 115509514 B CN115509514 B CN 115509514B
Authority
CN
China
Prior art keywords
data
abstract syntax
syntax tree
simulation
function
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.)
Active
Application number
CN202211470378.9A
Other languages
English (en)
Other versions
CN115509514A (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.)
Inspur Jinan data Technology Co ltd
Original Assignee
Inspur Jinan data Technology 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 Inspur Jinan data Technology Co ltd filed Critical Inspur Jinan data Technology Co ltd
Priority to CN202211470378.9A priority Critical patent/CN115509514B/zh
Publication of CN115509514A publication Critical patent/CN115509514A/zh
Application granted granted Critical
Publication of CN115509514B publication Critical patent/CN115509514B/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/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Library & Information Science (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本申请公开了一种前端数据模拟方法、装置、设备及介质,应用于前端数据模拟技术领域,包括:将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。这样,能够提升开发效率,并避免对前端代码侵入。

Description

一种前端数据模拟方法、装置、设备及介质
技术领域
本申请涉及前端数据模拟技术领域,特别涉及一种前端数据模拟方法、装置、设备及介质。
背景技术
在Web开发阶段,前端和后端开发人员会同时进行开发,前端绘制页面的速度一般是快于后台开发人员写接口的速度,此时前端Mock数据会提高开发效率。Mock顾名思义是一种模拟。通常利用相同的接口来模拟出一个对象以代替真实对象,这样能有效隔离外部依赖,便于测试。对于前端开发,Mock作为重要一环,能带来很多好处,比如:前后端并行开发、模拟各种响应值,便于测试、可及早发现一些极端响应值下的页面布局问题等。
目前,一种方案是搭建mock server(模拟服务器)或接口平台,比如yapi,或者使用第三方的API(即Application Programming Interface,应用程序编程接口)管理平台,通常也会带mock功能。前后端协作过程中,后端将接口写入接口平台,前端在接口平台编辑mock(测试)数据,并配置dev server(开发服务器)的proxy代理到接口平台。在前端开发过程中,不同功能对应的接口代理地址是不相同的,每次切换代理接口地址都需要进行重启开发服务器,重启开发服务器快则30秒,慢则几分钟非常影响开发效率。另一种方案是在项目里面根据接口返回的数据进行模拟编写json,请求的时候请求到本地的json文件进行数据处理,这种做法造成了前端代码的侵入性。
发明内容
有鉴于此,本申请的目的在于提供一种前端数据模拟方法、装置、设备及介质,能够提升开发效率,并避免对前端代码侵入。其具体方案如下:
第一方面,本申请公开了一种前端数据模拟方法,包括:
将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;
基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;
将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;
执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
可选的,所述前端代码还包括位于所述数据模板前的注释标记。
可选的,还包括:
基于所述注释标记从所述抽象语法树中获取所述数据模板。
可选的,所述基于所述注释标记从所述抽象语法树中获取所述数据模板,包括:
遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。
可选的,所述获取所述注释标记之后的所述数据模板,包括:
利用正则表达式获取所述注释标记之后的所述数据模板。
可选的,所述将前端代码转换为抽象语法树,包括:
对前端代码进行词法分析以及语法分析,生成抽象语法树。
可选的,所述对前端代码进行词法分析以及语法分析,生成抽象语法树,包括:
利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。
可选的,所述将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,包括:
利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。
可选的,所述基于所述数据模板构建模拟数据生成函数,包括:
基于所述数据模板,并利用Mock.js构建模拟数据生成函数。
可选的,所述数据模板为预先创建的Mock.js能够识别的模板。
可选的,所述执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据,包括:
基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
可选的,所述将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,包括:
查找接口函数调用声明,将所述抽象语法树中该声明的接口函数树节点替换为所述数据生成函数树节点。
第二方面,本申请公开了一种前端数据模拟装置,包括:
前端代码转换模块,用于将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;
树节点替换模块,用于基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;
语法树转换模块,用于将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;
前端数据模拟模块,用于执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
可选的,所述前端代码还包括位于所述数据模板前的注释标记。
可选的,所述装置还包括数据模板获取模块,用于基于所述注释标记从所述抽象语法树中获取所述数据模板。
可选的,数据模板获取模块,具体用于遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。
可选的,前端代码转换模块,具体用于对前端代码进行词法分析以及语法分析,生成抽象语法树。
可选的,前端代码转换模块,具体用于利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。
可选的,语法树转换模块,具体用于利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。
可选的,所述数据模板为预先创建的Mock.js能够识别的模板。
可选的,前端数据模拟模块,具体用于基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
第三方面,本申请公开了一种电子设备,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现前述的前端数据模拟方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述的前端数据模拟方法。
可见,本申请先将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板,之后基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,然后将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,最后执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。也即,本申请实施例在进行前端开发时,先将前端代码转换为抽象语法树,之后基于根据接口函数的返回值创建的数据模板构建模拟数据生成函数,并转化为数据生成函数树节点,替换掉抽象语法树中接口函数树节点,再转换回源码形式,得到目标前端代码,执行该目标前端代码,在调用接口函数时,即基于模拟数据生成函数生成并返回模拟数据,这样,无需搭建代理服务器,避免了因切换接口代理地址重启代理服务器浪费开发时间的问题,并且,避免了对前端代码侵入。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种前端数据模拟方法流程图;
图2为现有技术中的一种传统数据模拟方案流程图;
图3为本申请实施例提供的一种基于抽象语法树的数据模拟方案流程图;
图4为本申请实施例提供的一种接口函数转换示意图;
图5为本申请实施例提供的一种抽象语法树转换示意图;
图6为本申请实施例提供的一种具体的抽象语法树转换示意图;
图7为本申请实施例提供的一种前端数据模拟装置结构示意图;
图8为本申请实施例提供的一种电子设备原理结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,进行前端数据模拟时,一种方案是搭建mock server(模拟服务器)或接口平台,比如yapi,或者使用第三方的API管理平台,通常也会带mock功能。前后端协作过程中,后端将接口写入接口平台,前端在接口平台编辑mock(测试)数据,并配置dev server(开发服务器)的proxy代理到接口平台。在前端开发过程中,不同功能对应的接口代理地址是不相同的,每次切换代理接口地址都需要进行重启开发服务器,重启开发服务器快则30秒,慢则几分钟非常影响开发效率。另一种方案是在项目里面根据接口返回的数据进行模拟编写json,请求的时候请求到本地的json文件进行数据处理,这种做法造成了前端代码的侵入性。为此,本申请提供了一种前端数据模拟方案,能够提升开发效率,并避免对前端代码侵入。
参见图1所示,本申请实施例公开了一种前端数据模拟方法,包括:
步骤S11:将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板。
在一种实施方式中,本申请实施例可以对前端代码进行词法分析以及语法分析,生成抽象语法树。进一步的,本申请实施例利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。具体的,使用Babel-parser库对前端代码进行词法分析以及语法分析,生成抽象语法树。
需要指出的是,抽象语法树是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。并且,抽象语法树不是某一种编程语言独有的,JavaScript、Python、Java、Golang等几乎所有编程语言都有语法树。例如,本申请实施例可以利用Babel编译器对前端JavaScript代码进行词法分析以及语法分析,生成抽象语法树。其中,Babel是一个JavaScript 编译器,也可以说是一个解析库,Babel内置了很多分析JavaScript代码的方法,可以利用Babel将JavaScript代码转换成AST(即Abstract SyntaxTree,抽象语法树)。词法分析:即“Lexical Analysis”,编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符地读入源程序,然后根据构词规则识别单词,生成token(词)符号流。语法分析:即“Syntax Analysis”,编译过程的一个逻辑阶段,语法分析的任务是在词法分析的基础上将token符号流序列组合成各类语法短语,比如“程序”,“语句”,“表达式”等。
步骤S12:基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点。
在具体的实施方式中,所述前端代码还包括位于所述数据模板前的注释标记。比如,注释标记为@mock,进一步的,本申请实施例可以基于所述注释标记从所述抽象语法树中获取所述数据模板。并且,本申请实施例可以遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。其中,本申请实施例可以利用正则表达式获取所述注释标记之后的所述数据模板。
可以理解的是,本申请实施例可以封装接口函数,在该封装函数内部调用接口函数,并接口函数上方以代码注释的形式增加注释标记以及数据模板。这样,以注释的形式定义数据模板,该注释以@mock符号开头,能够方便的找到该数据模板。
在一种实施方式中,本申请实施例可以基于所述数据模板,并利用Mock.js构建模拟数据生成函数。并且,所述数据模板为预先创建的Mock.js能够识别的模板。其中,Mock.js是一款优秀的生成模拟数据的JavaScript库,本申请实施例可以基于Mock.js构建用于生成模拟数据的模拟数据生成函数,并基于模拟数据生成函数生成模拟数据。也即,获取@mock后面的数据模板,基于数据模板,使用Mock.js库中的方法构造生成模拟数据的函数,并将该函数转换为抽象语法树节点片段,将与API请求获取数据相关的抽象语法树节点替换成数据生成函数的树节点。
进一步的,所述将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,具体过程为:查找接口函数调用声明,将所述抽象语法树中该声明的接口函数树节点替换为所述数据生成函数树节点。具体的,在将所述抽象语法树中该声明的接口函数树节点***数据生成函数树节点。
也即,本申请实施例在JavaScript代码编译阶段更改代码内容,操纵抽象语法树,将原本通过调用API请求获取模拟数据的方式替换为通过Mock.js生成模拟数据的方式。并且,通过替换抽象语法树节点的方式达到更改代码的目的。
步骤S13:将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。
在一种实施方式中,本申请实施例可以利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。具体的,利用Babel-generator库将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。比如,源码形式为JavaScript代码,本申请实施例利用Babel-generator库将节点替换后的抽象语法树转换为JavaScript代码以得到目标前端代码。
也即,本申请实施例可以遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板,基于遍历到的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,之后将遍历结束后的抽象语法树转换为代码形式以得到目标前端代码。
步骤S14:执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
例如,参见图2所示,图2为现有技术中的一种传统数据模拟方案流程图,由图2可见,传统数据模拟方案是有模拟服务器的,浏览器发起的API请求会经过模拟服务器,模拟数据是在模拟服务器端进行生成,最后返回到浏览器端,这就要求API请求地址配置必须正确。而本申请实施例不采用传统的mock server模式,去掉mock server这一环节,即跳过接口模拟服务器,不走模拟请求,同时也不在代码里面写固定的模拟数据。而是在编译器对JavaScript代码进行词法分析、语法分析之后,直接操作抽象语法树,将原始的接口请求的代码直接替换成接口返回的数据。例如,参见图3所示,图3为本申请实施例提供的一种基于抽象语法树的数据模拟方案流程图,由图3可见,本申请实施例去掉了模拟服务器,在指定接口阶段做一些特殊的处理,在JavaScript编译器进行词法分析、语法分析生成抽象语法树之后,将接口请求(即接口函数)对应的抽象语法树节点替换为数据生成函数树节点,在浏览器调用接口时直接返回模拟数据。本方案只在开发环境中有效,提高了开发效率,在正式环境中仍然走合法的API请求以获取真实的数据。其中,本方案采用的方包括:封装接口函数,在该封装函数内部调用API接口,并将接口的返回值返回到函数外部,在接口函数上方以代码注释的形式新增@mock符号,在@mock符号后面根据该接口函数的返回值定义Mock.js所能识别的数据模板,该对象经Mock.js库中方法转化为用于浏览器渲染的模拟数据。进一步的,使用babel将接口函数转化为抽象语法树,AST抽象语法树,找到@mock标记,使用正则表达式获取@mock标记后面的内容,基于@mock符号后面的数据模板构建为生成模拟数据的函数。例如,参见图4所示,图4为本申请实施例公开了一种接口函数转换示意图。由图4可以看出,本申请实施例去除了API接口调用方法。因此调用API接口势必会触发浏览器的XHR(即XMLHttpRequest)请求,接下来就是走一连串的请求逻辑,本申请实施例舍弃了这一点,将API接口调用方法在JavaScript代码预编译阶段,即在代码词法分析、语法分析生成抽象语法树后,直接操纵语法树,参见图5所示,图5为本申请实施例提供的一种抽象语法树转换示意图。在语法树场景下,引入mock.js方法即基于数据模板,并利用Mock.js构建的模拟数据生成函数,利用该函数即可生成模拟数据。
进一步的,参见图6所示,图6为本申请实施例公开的一种具体的抽象语法树转换示意图。封装接口函数,将接口函数上方添加一行JavaScript注释,该注释以@mock符号开头,在@mock后面定义数据模板;使用babel-parser库将JavaScript代码转换为抽象语法树;遍历抽象语法树,判断是否有@mock符号开头的注释,若没有则继续下一个循环即遍历下一个树杈,若有,则使用正则表达式匹配获取@mock符号后面的数据模板,若未获取到数据模板则跳出当前循环继续下一次循环,若获取到则基于数据模板以及mockjs,构建生成模拟数据的函数,并将该函数转为抽象语法树节点,得到数据生成函数树节点。找到API接口调用声明,移出该接口声明的抽象树节点,在该位置上***数据生成函数树节点,也即,利用数据生成函数树节点替换接口函数树节点。遍历完毕后,使用babel-generator库将抽象语法树反转为JavaScript代码。这样,舍弃了传统的mock server模式,在获取模拟数据的过程中,不经API请求,不走模拟服务器。而是在JavaScript预编译阶段,操纵抽象语法树,将API请求代码替换成模拟数据生成函数。也就是说在项目中仍然书写API请求函数,但是在JavaScript代码编译阶段,根据该函数上方@mock符号后的数据模板,将该请求函数替换成了模拟数据生成函数。本方案仅在开发环境中有效,在正式环境中仍然走合法的API请求以获取真实的数据。相比于API接口请求模拟数据的方式,本申请实施例不经过浏览器的XHR接口请求,开发人员也不必关心XHR接口地址的配置,在开发阶段省去了频繁重启开发服务器的时间。相比于在项目中写死固定的模拟数据的方式,本申请实施例不对项目中的前端代码造成侵入性。通过本申请提供的方案,前端数据模拟更加方便快捷,提高了开发效率。
可见,本申请实施例先将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板,之后基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,然后将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,最后执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。也即,本申请实施例在进行前端开发时,先将前端代码转换为抽象语法树,之后基于根据接口函数的返回值创建的数据模板构建模拟数据生成函数,并转化为数据生成函数树节点,替换掉抽象语法树中接口函数树节点,再转换回源码形式,得到目标前端代码,执行该目标前端代码,在调用接口函数时,即基于模拟数据生成函数生成并返回模拟数据,这样,无需搭建代理服务器,避免了因切换接口代理地址重启代理服务器浪费开发时间的问题,并且,避免了对前端代码侵入。
参见图7所示,本申请实施例公开了一种前端数据模拟装置,包括:
前端代码转换模块11,用于将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;
树节点替换模块12,用于基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;
语法树转换模块13,用于将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;
前端数据模拟模块14,用于执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
可见,本申请实施例先将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板,之后基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,然后将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,最后执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。也即,本申请实施例在进行前端开发时,先将前端代码转换为抽象语法树,之后基于根据接口函数的返回值创建的数据模板构建模拟数据生成函数,并转化为数据生成函数树节点,替换掉抽象语法树中接口函数树节点,再转换回源码形式,得到目标前端代码,执行该目标前端代码,在调用接口函数时,即基于模拟数据生成函数生成并返回模拟数据,这样,无需搭建代理服务器,避免了因切换接口代理地址重启代理服务器浪费开发时间的问题,并且,避免了对前端代码侵入。
在一种实施方式中,所述前端代码还包括位于所述数据模板前的注释标记。比如,注释标记为@mock。
可选的,所述装置还包括数据模板获取模块,用于基于所述注释标记从所述抽象语法树中获取所述数据模板。
进一步的,数据模板获取模块,具体用于遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。其中,所述获取所述注释标记之后的所述数据模板,包括:利用正则表达式获取所述注释标记之后的所述数据模板。
在一种实施方式中,前端代码转换模块11,具体用于对前端代码进行词法分析以及语法分析,生成抽象语法树。
进一步的,前端代码转换模块11,具体用于利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。具体的,使用Babel-parser库对前端代码进行词法分析以及语法分析,生成抽象语法树。
在一种实施方式中,语法树转换模块13,具体用于利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。具体的,利用Babel-generator库将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。比如,源码形式为JavaScript代码,本申请实施例利用Babel-generator库将节点替换后的抽象语法树转换为JavaScript代码以得到目标前端代码。
其中,所述基于所述数据模板构建模拟数据生成函数,包括:基于所述数据模板,并利用Mock.js构建模拟数据生成函数。并且,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,包括:查找接口函数调用声明,将所述抽象语法树中该声明的接口函数树节点替换为所述数据生成函数树节点。也即,获取@mock后面的数据模板,基于数据模板,使用Mock.js库中的方法构造生成模拟数据的函数,并将该函数转换为抽象语法树节点
并且,所述数据模板为预先创建的Mock.js能够识别的模板。
进一步的,在一种实施方式中,前端数据模拟模块14,具体用于基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
参见图8所示,本申请实施例公开了一种电子设备20,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,以实现以下步骤:
将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
可见,本申请实施例先将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板,之后基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,然后将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,最后执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。也即,本申请实施例在进行前端开发时,先将前端代码转换为抽象语法树,之后基于根据接口函数的返回值创建的数据模板构建模拟数据生成函数,并转化为数据生成函数树节点,替换掉抽象语法树中接口函数树节点,再转换回源码形式,得到目标前端代码,执行该目标前端代码,在调用接口函数时,即基于模拟数据生成函数生成并返回模拟数据,这样,无需搭建代理服务器,避免了因切换接口代理地址重启代理服务器浪费开发时间的问题,并且,避免了对前端代码侵入。
其中,所述前端代码还包括位于所述数据模板前的注释标记。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:基于所述注释标记从所述抽象语法树中获取所述数据模板。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:利用正则表达式获取所述注释标记之后的所述数据模板。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:对前端代码进行词法分析以及语法分析,生成抽象语法树。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:基于所述数据模板,并利用Mock.js构建模拟数据生成函数。
进一步的,所述数据模板为预先创建的Mock.js能够识别的模板。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:查找接口函数调用声明,将所述抽象语法树中该声明的接口函数树节点替换为所述数据生成函数树节点。
并且,所述存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,存储方式可以是短暂存储或者永久存储。
另外,所述电子设备20还包括电源23、通信接口24、输入输出接口25和通信总线26;其中,所述电源23用于为所述电子设备20上的各硬件设备提供工作电压;所述通信接口24能够为所述电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;所述输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
进一步的,本申请实施例公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现以下步骤:
将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
可见,本申请实施例先将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板,之后基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,然后将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,最后执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。也即,本申请实施例在进行前端开发时,先将前端代码转换为抽象语法树,之后基于根据接口函数的返回值创建的数据模板构建模拟数据生成函数,并转化为数据生成函数树节点,替换掉抽象语法树中接口函数树节点,再转换回源码形式,得到目标前端代码,执行该目标前端代码,在调用接口函数时,即基于模拟数据生成函数生成并返回模拟数据,这样,无需搭建代理服务器,避免了因切换接口代理地址重启代理服务器浪费开发时间的问题,并且,避免了对前端代码侵入。
其中,所述前端代码还包括位于所述数据模板前的注释标记。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:基于所述注释标记从所述抽象语法树中获取所述数据模板。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:利用正则表达式获取所述注释标记之后的所述数据模板。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:对前端代码进行词法分析以及语法分析,生成抽象语法树。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:基于所述数据模板,并利用Mock.js构建模拟数据生成函数。
进一步的,所述数据模板为预先创建的Mock.js能够识别的模板。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:查找接口函数调用声明,将所述抽象语法树中该声明的接口函数树节点替换为所述数据生成函数树节点。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种前端数据模拟方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (13)

1.一种前端数据模拟方法,其特征在于,包括:
将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;
基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;
将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;
执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据;
其中,所述基于所述抽象语法树中的数据模板构建模拟数据生成函数,包括:
基于所述数据模板,并利用Mock.js构建模拟数据生成函数,并且,所述数据模板为预先创建的Mock.js能够识别的模板。
2.根据权利要求1所述的前端数据模拟方法,其特征在于,所述前端代码还包括位于所述数据模板前的注释标记。
3.根据权利要求2所述的前端数据模拟方法,其特征在于,还包括:
基于所述注释标记从所述抽象语法树中获取所述数据模板。
4.根据权利要求3所述的前端数据模拟方法,其特征在于,所述基于所述注释标记从所述抽象语法树中获取所述数据模板,包括:
遍历所述抽象语法树,查找所述注释标记,获取所述注释标记之后的所述数据模板。
5.根据权利要求4所述的前端数据模拟方法,其特征在于,所述获取所述注释标记之后的所述数据模板,包括:
利用正则表达式获取所述注释标记之后的所述数据模板。
6.根据权利要求1所述的前端数据模拟方法,其特征在于,所述将前端代码转换为抽象语法树,包括:
对前端代码进行词法分析以及语法分析,生成抽象语法树。
7.根据权利要求6所述的前端数据模拟方法,其特征在于,所述对前端代码进行词法分析以及语法分析,生成抽象语法树,包括:
利用Babel编译器对前端代码进行词法分析以及语法分析,生成抽象语法树。
8.根据权利要求1所述的前端数据模拟方法,其特征在于,所述将节点替换后的抽象语法树转换为源码形式以得到目标前端代码,包括:
利用Babel编译器将节点替换后的抽象语法树转换为源码形式以得到目标前端代码。
9.根据权利要求1所述的前端数据模拟方法,其特征在于,所述执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据,包括:
基于浏览器执行所述目标前端代码,在所述浏览器调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据。
10.根据权利要求1至9任一项所述的前端数据模拟方法,其特征在于,所述将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点,包括:
查找接口函数调用声明,将所述抽象语法树中该声明的接口函数树节点替换为所述数据生成函数树节点。
11.一种前端数据模拟装置,其特征在于,包括:
前端代码转换模块,用于将前端代码转换为抽象语法树;其中,所述前端代码中包括预先基于接口函数的返回值并以注释形式创建的数据模板;
树节点替换模块,用于基于所述抽象语法树中的数据模板构建模拟数据生成函数,并将所述模拟数据生成函数转换为抽象语法树节点以得到数据生成函数树节点,将所述抽象语法树中接口函数树节点替换为所述数据生成函数树节点;
语法树转换模块,用于将节点替换后的抽象语法树转换为源码形式以得到目标前端代码;
前端数据模拟模块,用于执行所述目标前端代码,在调用接口函数时,基于所述模拟数据生成函数生成并返回模拟数据;
其中,树节点替换模块,具体用于基于所述数据模板,并利用Mock.js构建模拟数据生成函数,并且,所述数据模板为预先创建的Mock.js能够识别的模板。
12.一种电子设备,其特征在于,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现如权利要求1至10任一项所述的前端数据模拟方法。
13.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至10任一项所述的前端数据模拟方法。
CN202211470378.9A 2022-11-23 2022-11-23 一种前端数据模拟方法、装置、设备及介质 Active CN115509514B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211470378.9A CN115509514B (zh) 2022-11-23 2022-11-23 一种前端数据模拟方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211470378.9A CN115509514B (zh) 2022-11-23 2022-11-23 一种前端数据模拟方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN115509514A CN115509514A (zh) 2022-12-23
CN115509514B true CN115509514B (zh) 2023-03-10

Family

ID=84514472

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211470378.9A Active CN115509514B (zh) 2022-11-23 2022-11-23 一种前端数据模拟方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN115509514B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11422854B2 (en) * 2020-02-26 2022-08-23 Sap Se Cross-compilation, orchestration, and scheduling for in-memory databases as a service
CN116501303B (zh) * 2023-06-25 2023-11-14 北京长亭科技有限公司 Api代码自动生成方法与装置

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107194245A (zh) * 2017-05-12 2017-09-22 南京大学 一种针对Linux内核页表隔离的功能调用改造方法
CN110399133A (zh) * 2019-06-25 2019-11-01 西北大学 一种基于前端字节码技术的JavaScript代码优化方法
CN111010364A (zh) * 2018-10-04 2020-04-14 甲骨文国际公司 用于基于离线对象的存储和模拟rest响应的***
CN111124924A (zh) * 2019-12-25 2020-05-08 五八同城信息技术有限公司 Api部署方法、装置、电子设备及存储介质
CN112363727A (zh) * 2020-11-10 2021-02-12 中国平安人寿保险股份有限公司 Sql代码的java转换方法、装置、计算机设备及存储介质
CN112860356A (zh) * 2021-02-10 2021-05-28 北京百度网讯科技有限公司 一种api调用控制方法、装置、电子设备和存储介质
CN113407877A (zh) * 2021-06-21 2021-09-17 杭州卓健信息科技股份有限公司 一种可配置化的web表单实现方法
CN113778848A (zh) * 2021-01-29 2021-12-10 北京沃东天骏信息技术有限公司 测试代码生成方法、装置、计算机***及介质
CN114153459A (zh) * 2021-12-03 2022-03-08 中国建设银行股份有限公司 接口文档生成方法及装置
CN114625413A (zh) * 2022-03-28 2022-06-14 杭州安恒信息技术股份有限公司 一种路由数据生成方法、装置、设备及存储介质
CN114756183A (zh) * 2022-06-16 2022-07-15 深圳市信润富联数字科技有限公司 数据打印方法、装置、设备及存储介质
CN114840410A (zh) * 2021-02-01 2022-08-02 腾讯科技(深圳)有限公司 测试分析方法、装置、计算机设备及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9348562B2 (en) * 2014-08-25 2016-05-24 International Business Machines Corporation Correcting non-compliant source code in an integrated development environment
CN110609693B (zh) * 2019-08-15 2023-05-26 深圳赛安特技术服务有限公司 基于数据标准化的代码更新方法、装置及终端设备
US11348019B2 (en) * 2020-08-06 2022-05-31 Cisco Technology, Inc. Advanced workflow based self-serve automation system
US11921621B2 (en) * 2020-09-09 2024-03-05 Parasoft Corporation System and method for improved unit test creation
US11586531B2 (en) * 2020-09-30 2023-02-21 Red Hat, Inc. Generating test input values for functional components based on test coverage analysis
CN114327495A (zh) * 2021-12-27 2022-04-12 城云科技(中国)有限公司 基于ast的异常捕获代码注入方法、装置及其应用
CN114741085A (zh) * 2022-03-21 2022-07-12 阿里巴巴(中国)有限公司 数据处理方法、装置、设备及存储介质

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107194245A (zh) * 2017-05-12 2017-09-22 南京大学 一种针对Linux内核页表隔离的功能调用改造方法
CN111010364A (zh) * 2018-10-04 2020-04-14 甲骨文国际公司 用于基于离线对象的存储和模拟rest响应的***
CN110399133A (zh) * 2019-06-25 2019-11-01 西北大学 一种基于前端字节码技术的JavaScript代码优化方法
CN111124924A (zh) * 2019-12-25 2020-05-08 五八同城信息技术有限公司 Api部署方法、装置、电子设备及存储介质
CN112363727A (zh) * 2020-11-10 2021-02-12 中国平安人寿保险股份有限公司 Sql代码的java转换方法、装置、计算机设备及存储介质
CN113778848A (zh) * 2021-01-29 2021-12-10 北京沃东天骏信息技术有限公司 测试代码生成方法、装置、计算机***及介质
CN114840410A (zh) * 2021-02-01 2022-08-02 腾讯科技(深圳)有限公司 测试分析方法、装置、计算机设备及存储介质
CN112860356A (zh) * 2021-02-10 2021-05-28 北京百度网讯科技有限公司 一种api调用控制方法、装置、电子设备和存储介质
CN113407877A (zh) * 2021-06-21 2021-09-17 杭州卓健信息科技股份有限公司 一种可配置化的web表单实现方法
CN114153459A (zh) * 2021-12-03 2022-03-08 中国建设银行股份有限公司 接口文档生成方法及装置
CN114625413A (zh) * 2022-03-28 2022-06-14 杭州安恒信息技术股份有限公司 一种路由数据生成方法、装置、设备及存储介质
CN114756183A (zh) * 2022-06-16 2022-07-15 深圳市信润富联数字科技有限公司 数据打印方法、装置、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
《面向GitHub开源社区的Bug定位***的设计与实现》;方文强;《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑》;20190715;全文 *
Web服务组合测试综述;丁志军等;《软件学报》;20171009(第02期);全文 *
动态分析JavaScript的代码推荐方法;刘爽;《数码世界》;20170201(第02期);全文 *

Also Published As

Publication number Publication date
CN115509514A (zh) 2022-12-23

Similar Documents

Publication Publication Date Title
CN115509514B (zh) 一种前端数据模拟方法、装置、设备及介质
US11126930B2 (en) Code completion for dynamically-typed programming languages using machine learning
CN110442330B (zh) 列表组件转换方法、装置、电子设备及存储介质
CN112988163B (zh) 编程语言智能适配方法、装置、电子设备和介质
CN105446704A (zh) 一种着色器的解析方法和装置
CN113508385B (zh) 使用子例程图谱进行形式语言处理的方法和***
CN114153459A (zh) 接口文档生成方法及装置
CN113987405A (zh) 一种基于ast的数学表达式计算算法
US11573790B2 (en) Generation of knowledge graphs based on repositories of code
US11500619B1 (en) Indexing and accessing source code snippets contained in documents
CN112631604B (zh) 一种前端框架实现方法及装置
Nacke et al. Learn LLVM 17: A beginner's guide to learning LLVM compiler tools and core libraries with C++
CN117008920A (zh) 引擎***、请求处理方法、装置、计算机设备及存储介质
JP7344259B2 (ja) 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品
CN114968325A (zh) 代码注释的生成方法及装置、处理器和电子设备
CN114816356A (zh) 基于接口文档生成http请求代码的***及方法
Wang et al. User-Customizable Transpilation of Scripting Languages
CN115562649B (zh) 一种计算机混合程序语言源代码辅助编写方法及***
Grigorev et al. String-embedded language support in integrated development environment
CN114816425B (zh) 将自动化语言程序转换为lua语言程序的方法和***
CN117270962B (zh) 一种处理着色语言的方法、装置、存储介质及电子设备
WO2024148612A1 (zh) 一种翻译器生成方法、装置、设备及存储介质
WO2022074712A1 (ja) 仕様情報抽出装置、仕様情報抽出方法及びプログラム
CN113971028B (zh) 数据处理方法、装置、设备、存储介质及计算机程序产品
CN116909568A (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