CN109508183A - 一种存储集群中rest代码生成方法及装置 - Google Patents
一种存储集群中rest代码生成方法及装置 Download PDFInfo
- Publication number
- CN109508183A CN109508183A CN201811231318.5A CN201811231318A CN109508183A CN 109508183 A CN109508183 A CN 109508183A CN 201811231318 A CN201811231318 A CN 201811231318A CN 109508183 A CN109508183 A CN 109508183A
- Authority
- CN
- China
- Prior art keywords
- rest
- cli
- file
- code
- template
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种存储集群中REST代码生成方法及装置,具体可以为首先配置了CLI定义文件和REST定义文件,其中,CLI定义文件中每个CLI命令的名称、该CLI命令对应的输入参数以及该输入参数的类型;REST定义文件中定义了每个REST接口的接口名称、REST接口对应的组名以及REST接口支持的请求方法以及所有REST接口对应的共同前缀。然后,设计REST代码模板,该REST代码模板用于表征代码处理逻辑,当需要生成某REST接口所支持请求方法对应的REST代码时,从REST定义文件中和/或CLI定义文件中提取模板变量对应的模板变量值,将提取的模板变量值填充到REST代码模板,从而生成该REST接口对应的REST代码,提高了REST代码生成效率。
Description
技术领域
本申请涉及计算机存储技术领域,具体涉及一种存储集群中REST代码生成方法及装置。
背景技术
随着存储数据量的不断增大,计算机存储行业也在高速发展。传统的用户在访问存储设备时,通常利用命令行界面(Command Line Interface,CLI)输入预先设定的命令对存储设备进行查询、增加、删除等操作。这种操作使得用户需要记忆大量的命令,才能实现对于存储设备的访问。
为便于用户操作,表述性状态传递(Representational State Transfer,REST)被广泛应用于存储集群中。REST一组架构约束条件和原则,通常基于使用HTTP,URI,和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)。在具体应用时,通过提供与CLI具有相同功能的REST接口来实现对存储集群的访问。
然而,CLI对应有多种功能,例如查询、增加、删除、修改等,通常情况下一百多个,则需要针对每一种功能提供一个对应的REST接口,从而必须提供一百多个REST接口。由于现有技术是通过人工逐一开发REST接口,由于开发量较大,需要消耗较多的人力,而且由于人工开发的特点,导致开发效率低。
发明内容
有鉴于此,本申请实施例提供一种存储集群中REST代码生成方法及装置方法及装置,以降低人力成本,提高开发效率。
为解决上述问题,本申请实施例提供的技术方案如下:
本申请第一方面提供了存储集群中REST代码生成方法,所述方法包括:
配置CLI定义文件以及REST定义文件;所述CLI定义文件包括每个CLI命令名称、所述CLI命令对应的输入参数以及所述参数类型;所述REST定义文件中包括每个REST接口的接口名称、以及所述REST接口对应的组名、所述REST接口支持的请求方法以及所有所述REST接口对应的共同前缀;
定义REST代码模板;所述REST代码模块用于表征代码处理逻辑;所述REST代码模板包括至少一个模板变量;
从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码。
在一种可能的实现方式中,所述REST接口对应至少一个请求方法,所述从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码,包括:
从所述REST定义文件中提取所述请求方法;所述请求方法中包括使用CLI定义文件中CLI命令的信息以及请求参数;所述请求参数为所述请求方法在所述CLI定义文件中所定义的参数;
利用所述请求方法中的所述使用CLI定义文件中命令的信息以及所述请求参数填充所述REST模板,生成所述请求方法对应的REST代码。
在一种可能的实现方式中,当生成所述请求方法对应的REST代码后,所述方法还包括:
校验所述请求参数是否满足所述REST定义文件对所述请求方法所使用参数的定义;
若满足,则将所述请求参数转化为CLI参数;
执行所述请求方法对应的CLI命令,获得所述CLI命令对应的输出结果;
将所述CLI命令对应的输出结果转化为REST输出结果。
在一种可能的实现方式中,当执行所述请求方法对应的CLI命令后,获取所述CLI命令对应的输出视图。
在一种可能的实现方式中,所述请求方法为:Get、Post、Delete、Patch、Put。
在一种可能的实现方式中,在获取所述CLI命令对应的输出视图或将所述CLI命令对应的输出结果转化为REST输出结果之前,所述方法还包括:
判断所述请求方法是否为Get;
若不是,则直接返回执行成功信息;
若是,则执行后续获取所述输出试图或进行输出结果转化步骤。
本申请第二方面提供了一种存储集群中REST代码生成装置,所述装置包括:
配置单元,用于配置CLI定义文件以及REST定义文件;所述CLI定义文件包括每个CLI命令名称、所述CLI命令对应的输入参数以及所述参数类型;所述REST定义文件中包括每个REST接口的接口名称、以及所述REST接口对应的组名、所述REST接口支持的请求方法以及所有所述REST接口对应的共同前缀;
定义单元,用于定义REST代码模板;所述REST代码模块用于表征代码处理逻辑;所述REST代码模板包括至少一个模板变量;
生成单元,从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码。
在一种可能的实现方式中,所述生成单元,包括:
提取子单元,用于从所述REST定义文件中提取至少一种请求方法;所述请求方法中包括使用CLI定义文件中命令的信息以及请求参数;所述请求参数为所述请求方法在所述CLI定义文件中所定义的参数;
生成子单元,用于利用所述请求方法中的所述使用CLI定义文件中命令的信息以及所述请求参数填充所述REST模板,生成所述请求方法对应的REST代码。
在一种可能的实现方式中,所述装置还包括:
校验单元,用于在生成REST代码之后,校验所述请求参数是否满足所述REST定义文件对所述请求方法所使用参数的定义;
第一转化单元,用于当校验单元的校验结果为满足时,则将所述请求参数转化为CLI参数;
执行单元,用于执行所述请求方法对应的CLI命令,获得所述CLI命令对应的输出结果;
第二转化单元,用于将所述CLI命令对应的输出结果转化为REST输出结果。
在一种可能的实现方式中,所述装置还包括:获取单元,用于当执行所述请求方法对应的CLI命令后,获取所述CLI命令对应的输出视图。
在一种可能的实现方式中,所述请求方法为:Get、Post、Delete、Patch、Put。
在一种可能的实现方式中,所述装置还包括:
判断单元,用于在获取所述CLI命令对应的输出视图或将所述CLI命令对应的输出结果转化为REST输出结果之前,判断所述请求方法是否为Get;
返回单元,用于当判断单元的判断结果为不是时,则直接返回执行成功信息;
若是,则执行后续所述获取单元或所述第二转化单元。
由此可见,本申请实施例具有如下有益效果:
本申请实施例首先配置了CLI定义文件和REST定义文件,其中,CLI定义文件中每个CLI命令的名称、该CLI命令对应的输入参数以及该输入参数的类型;REST定义文件中定义了每个REST接口的接口名称、REST接口对应的组名以及REST接口支持的请求方法以及所有REST接口对应的共同前缀。然后,设计REST代码模板,该REST代码模板用于表征代码处理逻辑,当需要生成某REST接口所支持请求方法对应的REST代码时,从REST定义文件中和/或CLI定义文件中提取模板变量对应的模板变量值,将提取的模板变量值填充到REST代码模板,从而生成该REST接口对应的REST代码,提高了REST代码生成效率。
附图说明
图1为本申请实施例提供的一种存储集群中REST代码生成方法的流程图;
图2为本申请实施例提供的CLI定义文件示例图;
图3为本申请实施例提供的查询类CLI输出视图示例;
图4为本申请实施例提供的REST定义文件示例图;
图5为本申请实施例提供的一种REST模板示例图;
图6为本申请实施例提供的Get请求方法代码示例;
图7为本申请实施例提供的一种存储集群中REST代码生成装置结构图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请实施例作进一步详细的说明。
为便于理解本申请提供的技术方案,下面先对本申请的背景技术进行说明。
发明人在对传统的生成REST接口对应的代码研究中发现,传统的在生成REST接口代码时,需要程序人员逐个手动编写,若实现所有CLI命令功能,需要编写大量的REST接口代码,不仅耗费大量的人力,而且影响代码生成效率。
基于此,本申请实施例提供了一种存储集群中REST代码生成的方法,首先配置CLI定义文件和REST定义文件,分别在CLI定义文件中定义了所有CLI命令的名称、CLI命令对应的输入参数以及参数类型、在REST定义文件中定义所有REST接口的接口名称、每个REST接口对应的组名、每个REST接口支持的请求方法以及所有REST接口对应的共同前缀;然后,定义了REST代码模板,该模板中包括至少一个模板变量,当需要生成某REST接口所支持请求方法的代码时,从REST定义文件中和/或CLI定义文件中提取模板变量对应的模板变量值,用提取的模板变量值对REST模板进行填充,从而生成该REST接口所对应的REST代码,无需手动编写每个REST接口中所支持请求方法的REST代码,降低人力成本,提高代码生成效率。
为便于理解本申请的技术方案,下面将结合附图对该本申请提供的生成REST代码的技术方案进行说明。
参见图1,该图为本申请提供的一种存储集群中REST代码生成方法的流程图,如图1所示,该方法可以包括:
S101:配置CLI定义文件以及REST定义文件。
本实施例中,首先配置CLI定义文件以及REST定义文件,其中,CLI定义文件包括每个CLI命令名称、每个CLI命令对应的输入参数以及参数类型。REST定义文件中包括每个REST接口的接口名称、以及REST接口对应的组名、REST接口支持的请求方法以及所有REST接口对应的共同前缀。
为便于理解所配置的CLI定义文件和REST定义文件各自所包括的内容以及配置形式,下面将分别对上述两种定义文件进行说明。
本实施例中,CLI定义文件中包括所有CLI命令的定义,具体包括每个CLI命令的名称、该CLI命令对应的输入参数、该输入参数的类型以及输出属性。如图2所示,为一个CLI命令的定义示意。
其中,“<cliDefinition>”为一个CLI命令定义,其“name”属性表示CLI命令名称。
“<cliInput>”定义了CLI命令的输入参数。
“<parameter>”表示一个参数,其“name”属性表示参数名;“noValue”属性表示此参数是否存在参数值(“yes”表示不存在参数值,“no”或无“noValue”表示存在参数值);“type”表示参数值类型,可取如下类型:“Char”:字符;“Short”:Short整数;“Integer”:Integer整数;“Long”:Long整数;“String”:字符串;“Short[]”:Short数组;“Integer[]”:Integer数组;“Long[]”:Long数组;“String[]”:字符串数组。
定义数组类型是为了满足参数值列表的情况(例如“-p v1:v2:v3”,“:”为参数值的分割符,“v1”、“v2”、“v3”都是参数“p”的参数值,并且被同时输入了)。
“<cliOutput>”定义了CLI的输出,非查询类CLI,可以没有此定义。其中查询类CLI是指提供查询CLI命令,通过该查询CLI命令可以查询存储集群中的相关信息。
另外,在CLI定义文件中还可以定义每个CLI命令对应的输出视图类型。通常情况下,查询类CLI可以输出两种视图:表格视图、列表视图。其中,表格视图每一列表示一个数据对象的属性,第一行内容为数据对象的各属性名,其余每一行均表示一个数据对象(例如第二行为“卷0”的各属性值,第二行为“卷1”的各属性值,此处“卷0”为一个数据对象,“卷1”也是一个数据对象);列表视图有多行,每一行内容为一个数据对象的属性名和相应的属性值,一个列表视图只能显示一个数据对象。这两种视图还提供一个分割符,用户在执行命令时,可以指定分隔符(默认分隔符为空格),CLI输出中个属性名及属性值间自动使用指定的分割符进行分割显示,如图3所示CLI输出试图示例。
在具体实现时,可以通过以下方式在CLI定义文件中定义某CLI命令输出的试图类型。
“<view>”定义了CLI输出的视图,“default”属性定义了默认视图类型。
“<table>”定义了输入哪些参数时,CLI将以表格视图呈现,“params”属性定义了这些参数,参数间使用“,”分割,参数间为“且”的关系,即存在“params”属性定义的所有参数时才满足此视图。
“<list>”定义了输入哪些参数时,CLI将以列表视图呈现,“params”属性与“<table>”标签的“params”属性作用类似。
“<properties>”定义了CLI的输出中存在哪些属性字段。
“<property>”定义了CLI的输出中某个属性字段,“name”表示属性字段的名称,“type”表示此属性字段的取值类型,取值范围同“<parameter>”标签的“type”属性。
本实施例中,REST定义文件中可以定义每个REST接口名称、该REST接口所属组名以及该REST接口支持的请求方法(get、post、delete、patch、put等)以及每个请求方法所对应的CLI命令以及该请求方法对应的请求参数。其中,get方法用户获取存储集群中资源;post方法用于在存储集群中创建资源;delete方法用于删除存储集群中资源;put方法用于更新存储集群中资源;patch方法用于修改存储集群中资源。如图4所示,为一个REST接口的定义。
“<rest>”包含了所有REST接口,“baseURI”表示所有REST接口URI的共同前缀。
“<group>”定义了REST接口的分组,此处是为了使得REST接口功能更清晰,对REST接口进行了分类,将具有相似功能的REST接口分配在同一组中,一个<group>表示一类;“name”表示组名。
“<restDefinition>”定义了REST接口,“name”表示REST接口名。“<rest>”标签的“baseURI”、“<group>”标签的“name”、“<restDefinition>”标签的“name”共同决定了此REST接口的URI:${<rest>”标签的“baseURI”}/${“<group>”标签的“name”}/${“<restDefinition>”标签的“name”},其中“${}”表示可变量。例如图4中REST接口“rest1”的URI为:“/rest/v1/module1/rest1”。
“<post>”定义了此REST接口支持的POST请求,“cliName”定义了实现此REST请求时需要执行的CLI命令名称,“params”定义了此请求支持CLI时必须存在的参数组合,“params”规定如下:
-“[]”中的部分为“或”的关系;
-“{}”中的部分为“且”的关系;最外层的大括号可以省略。
-“[]”与“{}”可以相互嵌套。
例如图4中“<post>”标签中“params”表示,收到“rest1”的POST请求时,执行命令“cli1”时必须存在参数“cli1_p1、cli1_p2”或“cli1_p3”。
“<delete>”定义了此REST接口支持的DELETE请求,“cliName”与“params”作用类似“<post>”中“cliName”与“params”。
“<put>”定义了此REST接口支持的PUT请求,“cliName”与“params”作用类似“<post>”中“cliName”与“params”。
“<patch>”定义了此REST接口支持的PATCH请求,“cliName”与“params”作用类似“<post>”中“cliName”与“params”。
“<get>”定义了此REST接口支持的GET请求,“cliName”与“params”作用类似“<post>”中“cliName”与“params”;“sep”表示执行CLI时指定的分割符。
“<post>”、“<delete>”、“<put>”、“<patch>”、“<get>”其中的标签不存在时,表示此REST接口不支持此类请求。
本实施例中,在REST定义文件中可以定义多个REST接口,每个REST接口中可以支持一个或多个请求方法,每个请求方法对应一个CLI命令名称。例如,图4中,post方法对应CLI命令名称为“cli1”,使用的请求参数为cli1中“cli1_p1、cli2_p2以及cli1_p3”。delete方法对应CLI命令名称为“cli2”,使用的参数为cli2中“cli1_p1、cli2_p2”。
S102:定义REST代码模板。
本实施例中,可以预先定义生成REST代码的模板,该模板用于表征代码处理逻辑。其中,REST代码模板包括至少一个模板变量,当需要利用该REST代码模板生成代码时,可以填充上述模板变量以生成REST代码。
在实际应用中,可以利用不同的开发语言生成REST代码,为便于理解REST代码模板,参见图5,该图以伪代码示出代码模板,体现代码的主要处理逻辑。
其中,${tmpl_request_method}:REST定义文件中请求方法名,首字母大写。比如“Get”、“Post”、“Delete”等。
${tmpl_cli_all_params}:CLI定义文件中,此请求所使用CLI的所有“<parameter>”定义内容。
${tmpl_rest_required_params}:REST定义文件中,此请求方法对应的“params”定义内容。
${tmpl_cli_name}:REST定义文件中,此请求所使用的CLI名。
${tmpl_cli_output_sep}:REST定义文件中,此请求使用CLI指定的分隔符。
${tmpl_cli_view_def}:CLI定义文件中,此请求所使用CLI的“<view>”定义内容。
${tmpl_cli_output_def}:CLI定义文件中,此请求所使用CLI的“<cliOutput>”定义。
S103:从REST定义文件和/或CLI定义文件中提取模板变量对应的模板变量值,对REST模板进行填充,生成REST代码。
本实施例中,通过S102定义了REST代码模板,该REST代码模板中的各个模板变量值均在REST定义文件和/或CLI定义文件中,将模板变量对应的模板变量值从上述定义文件中提取来填充,即可生成REST代码。
例如,图6所示的Get请求方法对应的代码,从REST定义文件中提取关于Get请求方法的定义,填充到上述模板,并从CLI定义文件中提取该请求方法所使用的请求参数“param1、param2、param3”等模板变量值,以及REST定义文件中关于Get请求方法所对应的CLI命令名称“cli_p4、cli_p5”等模板变量值,将提取的所有关于Get请求方法的模板变量值均填充到上述代码模板,得到Get请求方法对应的REST代码。
在具体实现时,当需要生成某REST接口所支持的请求方法的代码时,从REST定义文件中提取该请求方法,通过图4所示的REST定义文件示例,可知,每个请求方法中包括该请求方法使用CLI定义文件中CLI命令的信息以及请求参数,该请求参数为请求方法在CLI定义文件中所定义的参数;然后,将该请求方法中的使用CLI定义文件中命令的信息以及请求参数填充至上述REST模板中,进而生成该REST接口中该请求方法对应的REST代码。例如,图6所示,生成REST1接口中Get请求方法对应的REST代码。
在一种可能的实现方式中,当生成某请求方法对应的REST代码后,还可以校验所述请求参数是否满足所述REST定义文件对所述请求方法所使用参数的定义;若满足,则将该请求方法包括的请求参数转化为CLI参数;执行该请求方法对应的CLI命令,获得CLI命令对应的输出结果;将CLI命令对应的输出结果转化为REST输出结果。
在具体实现时,利用checkRequiredParam(httpRequest,restRequiredParams)函数检验某请求方法中请求参数是否满足REST定义文件中对于该请求方法的参数规定。若满足,则返回“True”,否则,返回“False”。其中,httpRequest—为HTTP请求对象,从请求对象中可以获取请求方法和请求参数。restRequiredParams--“<post>”或“<delete>”或“<put>”或“<patch>”或“<get>”中“params”定义。
当检验结果为“True”时,则可以利用函数cvtParamRestToCli(httpRequest,cliAllParams)将该请求方法中的请求参数转化为CLI参数。然后利用函数exeCli(cli)执行CLI命令,获得CLI命令对应的输出结果。该输出结果可以包括:CLI是否执行成功、执行失败时的错误描述以及成功时的输出。最后,利用函数cvtResultCliToRest(cliResult,cliOutputDef)将输出结果转化为REST结果。其中,cliResult为查询类CLI被正确执行后的结果;cliOutputDef为CLI定义文件中此CLI的“<cliOutput>”定义。
在一种可能的实现方式中,当获得执行CLI命令的输出结果后,还可以获取该CLI命令对应的输出视图。在将CLI命令对应的输出结果转化为REST输出结果时,利用函数cvtResultCliToRest(cliResult,cliOutputDef,sep)进行转化,其中,sep为CLI试图对应的分割符。
在一种可能的实现方式中,在获取CLI命令对应的输出视图或将CLI命令对应的输出结果转化为REST输出结果之前,所述方法还包括:判断请求方法是否为Get;若不是,则直接返回执行成功信息;若是,则执行后续获取所述输出试图或进行输出结果转化步骤。
在具体实现时,当请求方法不是Get方法时,可以将执行成功的信息写入httpResponse中,直接返回;如果是Get方法,则执行提取执行CLI命令对应的输出视图,以及将CLI命令对应的输出结果转化为REST输出结果。
通过上述实施例,本申请实施例首先配置了CLI定义文件和REST定义文件,其中,CLI定义文件中每个CLI命令的名称、该CLI命令对应的输入参数以及该输入参数的类型;REST定义文件中定义了每个REST接口的接口名称、REST接口对应的组名以及REST接口支持的请求方法以及所有REST接口对应的共同前缀。然后,设计REST代码模板,该REST代码模板用于表征代码处理逻辑,当需要生成某REST接口所支持请求方法对应的REST代码时,从REST定义文件中和/或CLI定义文件中提取模板变量对应的模板变量值,将提取的模板变量值填充到REST代码模板,从而生成该REST接口对应的REST代码,提高了REST代码生成效率。
基于上述方法实施例,本申请还提供了一种存储集群中REST代码生成装置,下面将结合附图对该装置进行说明。
参见图7,该图为本申请实施例提供的一种存储集群中REST代码生成装置结构图,该装置可以包括:
配置单元701,用于配置CLI定义文件以及REST定义文件;所述CLI定义文件包括每个CLI命令名称、所述CLI命令对应的输入参数以及所述参数类型;所述REST定义文件中包括每个REST接口的接口名称、以及所述REST接口对应的组名、所述REST接口支持的请求方法以及所有所述REST接口对应的共同前缀;
定义单元702,用于定义REST代码模板;所述REST代码模块用于表征代码处理逻辑;所述REST代码模板包括至少一个模板变量;
生成单元703,从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码。
在一种可能的实现方式中,所述生成单元,包括:
提取子单元,用于从所述REST定义文件中提取至少一种请求方法;所述请求方法中包括使用CLI定义文件中命令的信息以及请求参数;所述请求参数为所述请求方法在所述CLI定义文件中所定义的参数;
生成子单元,用于利用所述请求方法中的所述使用CLI定义文件中命令的信息以及所述请求参数填充所述REST模板,生成所述请求方法对应的REST代码。
在一种可能的实现方式中,所述装置还包括:
校验单元,用于在生成REST代码之后,校验所述请求参数是否满足所述REST定义文件对所述请求方法所使用参数的定义;
第一转化单元,用于当校验单元的校验结果为满足时,则将所述请求参数转化为CLI参数;
执行单元,用于执行所述请求方法对应的CLI命令,获得所述CLI命令对应的输出结果;
第二转化单元,用于将所述CLI命令对应的输出结果转化为REST输出结果。
在一种可能的实现方式中,所述装置还包括:获取单元,用于当执行所述请求方法对应的CLI命令后,获取所述CLI命令对应的输出视图。
在一种可能的实现方式中,所述请求方法为:Get、Post、Delete、Patch、Put。
在一种可能的实现方式中,所述装置还包括:
判断单元,用于在获取所述CLI命令对应的输出视图或将所述CLI命令对应的输出结果转化为REST输出结果之前,判断所述请求方法是否为Get;
返回单元,用于当判断单元的判断结果为不是时,则直接返回执行成功信息;
若是,则执行后续所述获取单元或所述第二转化单元。
需要说明的是,本实施例中各模块的实现可以参见上述方法实施例的实现,本实施例在此不再赘述。
通过上述描述,本申请实施例首先配置了CLI定义文件和REST定义文件,其中,CLI定义文件中每个CLI命令的名称、该CLI命令对应的输入参数以及该输入参数的类型;REST定义文件中定义了每个REST接口的接口名称、REST接口对应的组名以及REST接口支持的请求方法以及所有REST接口对应的共同前缀。然后,设计REST代码模板,该REST代码模板用于表征代码处理逻辑,当需要生成某REST接口所支持请求方法对应的REST代码时,从REST定义文件中和/或CLI定义文件中提取模板变量对应的模板变量值,将提取的模板变量值填充到REST代码模板,从而生成该REST接口对应的REST代码,提高了REST代码生成效率。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种存储集群中REST代码生成方法,其特征在于,所述方法包括:
配置CLI定义文件以及REST定义文件;所述CLI定义文件包括每个CLI命令名称、所述CLI命令对应的输入参数以及所述参数类型;所述REST定义文件中包括每个REST接口的接口名称、以及所述REST接口对应的组名、所述REST接口支持的请求方法以及所有所述REST接口对应的共同前缀;
定义REST代码模板;所述REST代码模块用于表征代码处理逻辑;所述REST代码模板包括至少一个模板变量;
从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码。
2.根据权利要求1所述的方法,其特征在于,所述REST接口对应至少一个请求方法,所述从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码,包括:
从所述REST定义文件中提取所述请求方法;所述请求方法中包括使用CLI定义文件中CLI命令的信息以及请求参数;所述请求参数为所述请求方法在所述CLI定义文件中所定义的参数;
利用所述请求方法中的所述使用CLI定义文件中命令的信息以及所述请求参数填充所述REST模板,生成所述请求方法对应的REST代码。
3.根据权利要求2所述的方法,其特征在于,当生成所述请求方法对应的REST代码后,所述方法还包括:
校验所述请求参数是否满足所述REST定义文件对所述请求方法所使用参数的定义;
若满足,则将所述请求参数转化为CLI参数;
执行所述请求方法对应的CLI命令,获得所述CLI命令对应的输出结果;
将所述CLI命令对应的输出结果转化为REST输出结果。
4.根据权利要求3所述的方法,其特征在于,当执行所述请求方法对应的CLI命令后,获取所述CLI命令对应的输出视图。
5.根据权利要求4所述的方法,其特征在于,所述请求方法为:Get、Post、Delete、Patch、Put。
6.根据权利要求5所述的方法,其特征在于,在获取所述CLI命令对应的输出视图或将所述CLI命令对应的输出结果转化为REST输出结果之前,所述方法还包括:
判断所述请求方法是否为Get;
若不是,则直接返回执行成功信息;
若是,则执行后续获取所述输出试图或进行输出结果转化步骤。
7.一种存储集群中REST代码生成装置,其特征在于,所述装置包括:
配置单元,用于配置CLI定义文件以及REST定义文件;所述CLI定义文件包括每个CLI命令名称、所述CLI命令对应的输入参数以及所述参数类型;所述REST定义文件中包括每个REST接口的接口名称、以及所述REST接口对应的组名、所述REST接口支持的请求方法以及所有所述REST接口对应的共同前缀;
定义单元,用于定义REST代码模板;所述REST代码模块用于表征代码处理逻辑;所述REST代码模板包括至少一个模板变量;
生成单元,从所述REST定义文件和/或CLI定义文件中提取所述模板变量对应的模板变量值,对所述REST模板进行填充,生成REST代码。
8.根据权利要求7所述的装置,其特征在于,所述REST接口对应至少一个请求方法,所述生成单元,包括:
提取子单元,用于从所述REST定义文件中提取至少一种请求方法;所述请求方法中包括使用CLI定义文件中CLI命令的信息以及请求参数;所述请求参数为所述请求方法在所述CLI定义文件中所定义的参数;
生成子单元,用于利用所述请求方法中的所述使用CLI定义文件中命令的信息以及所述请求参数填充所述REST模板,生成所述请求方法对应的REST代码。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
校验单元,用于在生成REST代码之后,校验所述请求参数是否满足所述REST定义文件对所述请求方法所使用参数的定义;
第一转化单元,用于当校验单元的校验结果为满足时,则将所述请求参数转化为CLI参数;
执行单元,用于执行所述请求方法对应的CLI命令,获得所述CLI命令对应的输出结果;
第二转化单元,用于将所述CLI命令对应的输出结果转化为REST输出结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811231318.5A CN109508183B (zh) | 2018-10-22 | 2018-10-22 | 一种存储集群中rest代码生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811231318.5A CN109508183B (zh) | 2018-10-22 | 2018-10-22 | 一种存储集群中rest代码生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109508183A true CN109508183A (zh) | 2019-03-22 |
CN109508183B CN109508183B (zh) | 2022-02-18 |
Family
ID=65745855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811231318.5A Active CN109508183B (zh) | 2018-10-22 | 2018-10-22 | 一种存储集群中rest代码生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109508183B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339500A (zh) * | 2008-05-22 | 2009-01-07 | 清华大学 | 基于xml模式的数据绑定应用程序接口生成方法 |
CN101359324A (zh) * | 2007-08-02 | 2009-02-04 | 上海宝信软件股份有限公司 | 基于程序调用接口的Oracle关系数据库的数据访问方法 |
US20110131555A1 (en) * | 2005-07-29 | 2011-06-02 | Cisco Technology, Inc. | External programmatic interface for ios cli compliant routers |
CN106357781A (zh) * | 2016-09-29 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种资源服务调用接口创建方法及系统 |
CN106844452A (zh) * | 2016-12-19 | 2017-06-13 | 大唐网络有限公司 | 跨域请求方法和装置 |
CN106991276A (zh) * | 2017-03-17 | 2017-07-28 | 浙江大学 | 一种基于openEHR模板的数据接口动态生成方法 |
-
2018
- 2018-10-22 CN CN201811231318.5A patent/CN109508183B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110131555A1 (en) * | 2005-07-29 | 2011-06-02 | Cisco Technology, Inc. | External programmatic interface for ios cli compliant routers |
CN101359324A (zh) * | 2007-08-02 | 2009-02-04 | 上海宝信软件股份有限公司 | 基于程序调用接口的Oracle关系数据库的数据访问方法 |
CN101339500A (zh) * | 2008-05-22 | 2009-01-07 | 清华大学 | 基于xml模式的数据绑定应用程序接口生成方法 |
CN106357781A (zh) * | 2016-09-29 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种资源服务调用接口创建方法及系统 |
CN106844452A (zh) * | 2016-12-19 | 2017-06-13 | 大唐网络有限公司 | 跨域请求方法和装置 |
CN106991276A (zh) * | 2017-03-17 | 2017-07-28 | 浙江大学 | 一种基于openEHR模板的数据接口动态生成方法 |
Non-Patent Citations (2)
Title |
---|
宋涛等: "浅谈基于Spring MVC 的REST 功能", 《电脑知识与技术》 * |
郑杰: "AngularJS前端框架与后端代码自动生成系统的设计与实现", 《中国优秀硕士学委论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN109508183B (zh) | 2022-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101122921B (zh) | 基于ajax与html标记形成树形显示结构的方法 | |
CN104881275B (zh) | 一种电子报表生成方法及装置 | |
CN112930529B (zh) | 从概念数据模型生成软件工件 | |
CN110781082A (zh) | 接口的测试用例的生成方法及装置、介质和设备 | |
US10452517B2 (en) | Framework for testing logic of code based on model elements | |
TW201322135A (zh) | 用於動態服務整合的系統和方法 | |
CN110276074B (zh) | 自然语言处理的分布式训练方法、装置、设备及存储介质 | |
CN102566984B (zh) | 一种配置参数的方法及装置 | |
CN103970758A (zh) | 数据库访问系统及方法 | |
CN105637478A (zh) | 原生移动应用代码的计算机辅助开发 | |
CN110187902A (zh) | 基于spring boot的项目改造方法、装置、设备及存储介质 | |
CA2446082A1 (en) | Single file serialization for physical and logical meta-model information | |
CN105528218B (zh) | 数据图表级联方法及数据图表级联系统 | |
CN106528896B (zh) | 一种数据库优化方法和装置 | |
CN108509199A (zh) | 自动生成中文注释的方法、装置、设备及存储介质 | |
US10262055B2 (en) | Selection of data storage settings for an application | |
CN105589959A (zh) | 表单处理方法和表单系统 | |
CN106843878A (zh) | 一种模型生成方法和系统 | |
CN110502667A (zh) | 基于dom框架的odx文档解析和生成技术 | |
US20070092069A1 (en) | Method and system for testing enterprise applications | |
CN105988814A (zh) | 界面生成方法及装置 | |
CN103501341A (zh) | 一种Web服务的创建方法及装置 | |
CN109429260A (zh) | 一种北向数据的校验方法及装置 | |
CN106293862B (zh) | 一种可扩展标记语言xml数据的解析方法和装置 | |
CN109508183A (zh) | 一种存储集群中rest代码生成方法及装置 |
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 |