From e4b3bfc5ae3b50c90691e11deb03bbe0eb16212f Mon Sep 17 00:00:00 2001 From: AgAngle <1323481023@qq.com> Date: Tue, 2 Jul 2024 11:47:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95):?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96json-schema=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../definition/ApiDefinitionController.java | 6 +- .../api/dto/schema/JsonSchemaItem.java | 37 ++++----- .../api/parser/ImportParserFactory.java | 4 +- .../api/parser/api/PostmanParser.java | 2 +- .../api/parser/api/Swagger3Parser.java | 79 ++++++++----------- ...e.java => ApiDefinitionImportService.java} | 12 +-- .../service/schedule/SwaggerUrlImportJob.java | 8 +- .../api/utils/JsonSchemaBuilder.java | 2 +- 8 files changed, 68 insertions(+), 82 deletions(-) rename backend/services/api-test/src/main/java/io/metersphere/api/service/definition/{ApiDefinitionImportUtilService.java => ApiDefinitionImportService.java} (98%) diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/controller/definition/ApiDefinitionController.java b/backend/services/api-test/src/main/java/io/metersphere/api/controller/definition/ApiDefinitionController.java index 6ab6420c5d..ef26ed25d7 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/controller/definition/ApiDefinitionController.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/controller/definition/ApiDefinitionController.java @@ -11,7 +11,7 @@ import io.metersphere.api.dto.request.ApiEditPosRequest; import io.metersphere.api.dto.request.ApiTransferRequest; import io.metersphere.api.dto.request.ImportRequest; import io.metersphere.api.service.ApiFileResourceService; -import io.metersphere.api.service.definition.ApiDefinitionImportUtilService; +import io.metersphere.api.service.definition.ApiDefinitionImportService; import io.metersphere.api.service.definition.ApiDefinitionLogService; import io.metersphere.api.service.definition.ApiDefinitionNoticeService; import io.metersphere.api.service.definition.ApiDefinitionService; @@ -60,7 +60,7 @@ public class ApiDefinitionController { @Resource private ApiFileResourceService apiFileResourceService; @Resource - private ApiDefinitionImportUtilService apiDefinitionImportUtilService; + private ApiDefinitionImportService apiDefinitionImportService; @PostMapping(value = "/add") @Operation(summary = "接口测试-接口管理-添加接口定义") @@ -224,7 +224,7 @@ public class ApiDefinitionController { @Operation(summary = "接口测试-接口管理-导入接口定义") public void testCaseImport(@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart("request") ImportRequest request) { request.setUserId(SessionUtils.getUserId()); - apiDefinitionImportUtilService.apiTestImport(file, request, SessionUtils.getCurrentProjectId()); + apiDefinitionImportService.apiTestImport(file, request, SessionUtils.getCurrentProjectId()); } @PostMapping("/operation-history") diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/dto/schema/JsonSchemaItem.java b/backend/services/api-test/src/main/java/io/metersphere/api/dto/schema/JsonSchemaItem.java index d00bb89257..380aa008ae 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/dto/schema/JsonSchemaItem.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/dto/schema/JsonSchemaItem.java @@ -21,10 +21,6 @@ import java.util.Map; @AllArgsConstructor @NoArgsConstructor public class JsonSchemaItem { - /** - * 示例值 类似于 hangman 或者 @string 如果是mock 也是用这个属性 - */ - private Object example; /** * 参数ID */ @@ -33,6 +29,12 @@ public class JsonSchemaItem { * 参数名称 */ private String title; + /** + * 示例值 + * 这里需要支持填写mock函数 + * 类型为 String + */ + private String example; /** * 参数类型 * 取值范围,参考 {@link JsonSchemaItemType} @@ -57,6 +59,7 @@ public class JsonSchemaItem { private Map properties; /** * 附加属性 + * 包含未在属性列表中定义的额外属性的选项 * 当 type 为 object 时,使用该值 */ private JsonSchemaItem additionalProperties; @@ -65,7 +68,11 @@ public class JsonSchemaItem { */ private List required; /** - * 正则表达式 + * 默认值 + */ + private Object defaultValue; + /** + * 参数值需满足的正则表达式 */ private String pattern; /** @@ -84,30 +91,18 @@ public class JsonSchemaItem { * 最大值 */ private BigDecimal maximum; - /** - * schema 一般是解析用的 - */ - private String schema; /** * 一般是选择日期格式 */ private String format; /** - * 字符串的枚举 + * 参数值的枚举 */ - private List enumString; + private List enumValues; /** - * 整数的枚举 + * 是否启用 */ - private List enumInteger; - /** - * 数字的枚举 - */ - private List enumNumber; - /** - * 延伸 一般是用来存放一些自定义的属性 - */ - private Map extensions = null; + private Boolean enable = true; public JsonSchemaItem(String type) { this.type = type; diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/parser/ImportParserFactory.java b/backend/services/api-test/src/main/java/io/metersphere/api/parser/ImportParserFactory.java index 5374c3401c..f10c7ff99f 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/parser/ImportParserFactory.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/parser/ImportParserFactory.java @@ -8,9 +8,9 @@ import org.apache.commons.lang3.StringUtils; public class ImportParserFactory { public static ImportParser getImportParser(String platform) { if (StringUtils.equals(ApiImportPlatform.Swagger3.name(), platform)) { - return new Swagger3Parser<>(); + return new Swagger3Parser(); } else if (StringUtils.equals(ApiImportPlatform.Postman.name(), platform)) { - return new PostmanParser<>(); + return new PostmanParser(); } return null; } diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/PostmanParser.java b/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/PostmanParser.java index 2ca0f80021..c48f293719 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/PostmanParser.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/PostmanParser.java @@ -16,7 +16,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; -public class PostmanParser extends PostmanAbstractParserParser { +public class PostmanParser extends PostmanAbstractParserParser { @Override public ApiDefinitionImport parse(InputStream source, ImportRequest request) throws JsonProcessingException { diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/Swagger3Parser.java b/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/Swagger3Parser.java index 6d942d529a..6060f73a62 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/Swagger3Parser.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/parser/api/Swagger3Parser.java @@ -41,7 +41,7 @@ import java.io.InputStream; import java.util.*; -public class Swagger3Parser extends ApiImportAbstractParser { +public class Swagger3Parser extends ApiImportAbstractParser { protected String projectId; private Components components; @@ -184,7 +184,7 @@ public class Swagger3Parser extends ApiImportAbstractParser extends ApiImportAbstractParser extends ApiImportAbstractParser jsonSchemaItem.setExample(example.toString())); + jsonSchemaItem.setEnumValues(schema.getEnum()); + jsonSchemaItem.setDefaultValue(schema.getDefault()); + return jsonSchemaItem; } private JsonSchemaItem parseNull() { diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/service/definition/ApiDefinitionImportUtilService.java b/backend/services/api-test/src/main/java/io/metersphere/api/service/definition/ApiDefinitionImportService.java similarity index 98% rename from backend/services/api-test/src/main/java/io/metersphere/api/service/definition/ApiDefinitionImportUtilService.java rename to backend/services/api-test/src/main/java/io/metersphere/api/service/definition/ApiDefinitionImportService.java index 3d31e8bb60..da3f1a6b9d 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/service/definition/ApiDefinitionImportUtilService.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/service/definition/ApiDefinitionImportService.java @@ -65,7 +65,7 @@ import java.util.stream.Collectors; import static io.metersphere.project.utils.NodeSortUtils.DEFAULT_NODE_INTERVAL_POS; @Service -public class ApiDefinitionImportUtilService { +public class ApiDefinitionImportService { private static final String UNPLANNED_API = "api_unplanned_request"; private final ThreadLocal currentApiOrder = new ThreadLocal<>(); @@ -638,13 +638,13 @@ public class ApiDefinitionImportUtilService { } return switch (Body.BodyType.valueOf(dbBody.getBodyType())) { - case Body.BodyType.FORM_DATA -> + case FORM_DATA -> !formBodyHaDifferent(dbBody.getFormDataBody(), importBody.getFormDataBody()); - case Body.BodyType.WWW_FORM -> + case WWW_FORM -> !wwwFormBodyHasDifferent(dbBody.getWwwFormBody(), importBody.getWwwFormBody()); - case Body.BodyType.RAW -> rawBodyAreSame(dbBody.getRawBody(), importBody.getRawBody()); - case Body.BodyType.JSON -> jsonBodyAreSame(dbBody.getJsonBody(), importBody.getJsonBody()); - case Body.BodyType.XML -> xmlBodyAreSame(dbBody.getXmlBody(), importBody.getXmlBody()); + case RAW -> rawBodyAreSame(dbBody.getRawBody(), importBody.getRawBody()); + case JSON -> jsonBodyAreSame(dbBody.getJsonBody(), importBody.getJsonBody()); + case XML -> xmlBodyAreSame(dbBody.getXmlBody(), importBody.getXmlBody()); default -> true; }; } diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/service/schedule/SwaggerUrlImportJob.java b/backend/services/api-test/src/main/java/io/metersphere/api/service/schedule/SwaggerUrlImportJob.java index 6499fc4810..b731c257fe 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/service/schedule/SwaggerUrlImportJob.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/service/schedule/SwaggerUrlImportJob.java @@ -4,7 +4,7 @@ package io.metersphere.api.service.schedule; import io.metersphere.api.constants.ApiImportPlatform; import io.metersphere.api.dto.definition.ApiScheduleDTO; import io.metersphere.api.dto.request.ImportRequest; -import io.metersphere.api.service.definition.ApiDefinitionImportUtilService; +import io.metersphere.api.service.definition.ApiDefinitionImportService; import io.metersphere.api.service.definition.ApiDefinitionScheduleService; import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.CommonBeanFactory; @@ -16,12 +16,12 @@ import org.quartz.JobKey; import org.quartz.TriggerKey; public class SwaggerUrlImportJob extends BaseScheduleJob { - private ApiDefinitionImportUtilService apiDefinitionImportUtilService; + private ApiDefinitionImportService apiDefinitionImportService; private ApiDefinitionScheduleService apiDefinitionScheduleService; private SimpleUserService simpleUserService; public SwaggerUrlImportJob() { - apiDefinitionImportUtilService = CommonBeanFactory.getBean(ApiDefinitionImportUtilService.class); + apiDefinitionImportService = CommonBeanFactory.getBean(ApiDefinitionImportService.class); apiDefinitionScheduleService = CommonBeanFactory.getBean(ApiDefinitionScheduleService.class); simpleUserService = CommonBeanFactory.getBean(SimpleUserService.class); } @@ -37,7 +37,7 @@ public class SwaggerUrlImportJob extends BaseScheduleJob { request.setUserId(jobDataMap.getString("userId")); request.setType("SCHEDULE"); request.setResourceId(resourceId); - apiDefinitionImportUtilService.apiTestImport(null, request, request.getProjectId()); + apiDefinitionImportService.apiTestImport(null, request, request.getProjectId()); } public static JobKey getJobKey(String resourceId) { diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/utils/JsonSchemaBuilder.java b/backend/services/api-test/src/main/java/io/metersphere/api/utils/JsonSchemaBuilder.java index 58c53b096b..babacac9ba 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/utils/JsonSchemaBuilder.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/utils/JsonSchemaBuilder.java @@ -126,7 +126,7 @@ public class JsonSchemaBuilder { } public static String preview(String jsonSchema) { - String jsonString = JsonSchemaBuilder.jsonSchemaToJson(jsonSchema); + String jsonString = jsonSchemaToJson(jsonSchema); //需要匹配到mock函数 然后换成mock数据 if (StringUtils.isNotBlank(jsonString)) { String pattern = "@[a-zA-Z\\\\(|,'-\\\\d ]*[a-zA-Z)-9),\\\\\"]";