From 71b064d607b462ce31fb5f7ad2fe4af5c294c77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Sun, 9 Feb 2025 17:14:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Restful=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sop/productweb/open/OpenProduct.java | 2 -- .../gitee/sop/gateway/common/ApiInfoDTO.java | 5 +++++ .../gitee/sop/gateway/dao/entity/ApiInfo.java | 5 +++++ .../service/validate/ApiValidator.java | 7 +++++++ sop-support/sop-service-support/pom.xml | 5 ----- .../sop/support/annotation/OpenGroup.java | 2 +- .../gitee/sop/support/enums/ApiModeEnum.java | 19 +++++++++++++++++++ .../sop/support/register/ApiRegister.java | 9 ++++----- .../sop/support/service/dto/RegisterDTO.java | 5 +++++ sop.sql | 4 ++++ upgrade/sop-20250209.sql | 4 ++++ 11 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 sop-support/sop-service-support/src/main/java/com/gitee/sop/support/enums/ApiModeEnum.java create mode 100644 upgrade/sop-20250209.sql diff --git a/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java b/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java index 9ecafe04..089a563d 100755 --- a/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java +++ b/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java @@ -5,7 +5,6 @@ import com.gitee.sop.productweb.open.resp.ProductResponse; import com.gitee.sop.support.annotation.Open; import com.gitee.sop.support.context.OpenContext; import com.gitee.sop.support.dto.FileData; -import io.swagger.annotations.ApiOperation; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @@ -35,7 +34,6 @@ public interface OpenProduct { @Open("product.updateError") Integer updateError(Integer id); - @ApiOperation(value = "根据id获取故事") @Open("product.get") ProductResponse getById(@NotNull(message = "id必填") Integer id); diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/common/ApiInfoDTO.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/common/ApiInfoDTO.java index 0a0400a1..59f28736 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/common/ApiInfoDTO.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/common/ApiInfoDTO.java @@ -70,6 +70,11 @@ public class ApiInfoDTO implements Serializable { private Integer status; + /** + * 接口模式,1-open接口,2-Restful模式 + */ + private Integer apiMode; + public String buildApiNameVersion() { return apiName + apiVersion; } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/dao/entity/ApiInfo.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/dao/entity/ApiInfo.java index 7556e567..7d1d3edb 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/dao/entity/ApiInfo.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/dao/entity/ApiInfo.java @@ -85,6 +85,11 @@ public class ApiInfo { */ private Integer status; + /** + * 接口模式,1-open接口,2-Restful模式 + */ + private Integer apiMode; + private LocalDateTime addTime; private LocalDateTime updateTime; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/ApiValidator.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/ApiValidator.java index a433b845..17c43de7 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/ApiValidator.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/ApiValidator.java @@ -15,6 +15,7 @@ import com.gitee.sop.gateway.service.manager.IsvApiPermissionManager; import com.gitee.sop.gateway.service.manager.IsvManager; import com.gitee.sop.gateway.service.manager.SecretManager; import com.gitee.sop.gateway.service.manager.dto.IsvDTO; +import com.gitee.sop.support.enums.ApiModeEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -31,6 +32,7 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.List; import java.util.Locale; +import java.util.Objects; /** * 负责校验,校验工作都在这里 @@ -111,6 +113,11 @@ public class ApiValidator implements Validator { ApiInfoDTO apiInfo = apiManager.get(apiRequest.getMethod(), apiRequest.getVersion()); // 检查接口信息 checkApiInfo(apiRequestContext, apiInfo); + + if (!Objects.equals(apiInfo.getApiMode(), ApiModeEnum.RESTFUL.getValue())) { + log.error("Open模式接口不允许使用Restful进行访问, apiInfo={}", apiInfo); + throw new ApiException(ErrorEnum.ISV_INVALID_METHOD, apiRequestContext.getLocale()); + } // IP能否访问 checkIP(apiRequestContext); // 检查上传文件 diff --git a/sop-support/sop-service-support/pom.xml b/sop-support/sop-service-support/pom.xml index 5e489a10..91dbfd49 100755 --- a/sop-support/sop-service-support/pom.xml +++ b/sop-support/sop-service-support/pom.xml @@ -20,11 +20,6 @@ transmittable-thread-local 2.14.5 - - io.swagger - swagger-annotations - 1.6.14 - org.apache.dubbo dubbo diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/annotation/OpenGroup.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/annotation/OpenGroup.java index 848aedcf..6b505e2d 100755 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/annotation/OpenGroup.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/annotation/OpenGroup.java @@ -8,7 +8,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 分组 + * Restful分组,加了这个注解才会被认为是Restful接口 * * @author 六如 */ diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/enums/ApiModeEnum.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/enums/ApiModeEnum.java new file mode 100644 index 00000000..343ff54a --- /dev/null +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/enums/ApiModeEnum.java @@ -0,0 +1,19 @@ +package com.gitee.sop.support.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 六如 + */ +@Getter +@AllArgsConstructor +public enum ApiModeEnum { + + OPEN(1, "Open模式"), + RESTFUL(2, "Restful模式"); + + private final Integer value; + + private final String description; +} diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/register/ApiRegister.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/register/ApiRegister.java index 53120c62..40aa352c 100755 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/register/ApiRegister.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/register/ApiRegister.java @@ -3,11 +3,11 @@ package com.gitee.sop.support.register; import com.alibaba.fastjson2.JSON; import com.gitee.sop.support.annotation.Open; import com.gitee.sop.support.annotation.OpenGroup; +import com.gitee.sop.support.enums.ApiModeEnum; import com.gitee.sop.support.message.OpenMessageFactory; import com.gitee.sop.support.service.ApiRegisterService; import com.gitee.sop.support.service.dto.RegisterDTO; import com.gitee.sop.support.service.dto.RegisterResult; -import io.swagger.annotations.ApiOperation; import lombok.Data; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -123,10 +123,9 @@ public class ApiRegister { registerDTO.setIsPermission(parseBoolean(open.permission())); registerDTO.setIsNeedToken(parseBoolean(open.needToken())); registerDTO.setHasCommonResponse(parseBoolean(open.hasCommonResponse())); - ApiOperation apiOperation = method.getAnnotation(ApiOperation.class); - if (apiOperation != null) { - registerDTO.setDescription(apiOperation.value()); - } + OpenGroup openGroup = interfaceClass.getAnnotation(OpenGroup.class); + ApiModeEnum apiMode = openGroup == null ? ApiModeEnum.OPEN : ApiModeEnum.RESTFUL; + registerDTO.setApiMode(apiMode.getValue()); LOG.info("注册开放接口, apiInfo=" + registerDTO); RegisterResult result = apiRegisterService.register(registerDTO); if (!result.getSuccess()) { diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/service/dto/RegisterDTO.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/service/dto/RegisterDTO.java index a887fd4c..9da87a2f 100755 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/service/dto/RegisterDTO.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/service/dto/RegisterDTO.java @@ -66,5 +66,10 @@ public class RegisterDTO implements Serializable { */ private Integer hasCommonResponse; + /** + * 接口模式,1-open接口,2-Restful模式 + */ + private Integer apiMode; + } diff --git a/sop.sql b/sop.sql index 984cd3d9..9e938cad 100755 --- a/sop.sql +++ b/sop.sql @@ -470,3 +470,7 @@ INSERT INTO `sys_user_role` (`id`, `role_id`, `user_id`, `add_time`, `update_tim (4, 1, 1, '2024-12-12 20:32:13', '2024-12-12 20:32:13', 1, 0), (5, 2, 2, '2024-12-12 20:32:16', '2024-12-12 20:32:16', 1, 0), (6, 3, 3, '2024-12-19 09:56:08', '2024-12-19 09:56:08', 1, 0); + +-- ALTER +ALTER TABLE `api_info` +ADD COLUMN `api_mode` tinyint(4) NOT NULL DEFAULT '1' COMMENT '接口模式,1-open接口,2-Restful模式' AFTER `reg_source`; diff --git a/upgrade/sop-20250209.sql b/upgrade/sop-20250209.sql new file mode 100644 index 00000000..e2fd5879 --- /dev/null +++ b/upgrade/sop-20250209.sql @@ -0,0 +1,4 @@ +-- 2025-02-09更新 +-- api_info表新增api_mode字段 +ALTER TABLE `api_info` +ADD COLUMN `api_mode` tinyint(4) NOT NULL DEFAULT '1' COMMENT '接口模式,1-open接口,2-Restful模式' AFTER `reg_source`;