浏览代码

新增接口数据源接口

mxd 5 年之前
父节点
当前提交
696f9f9912

+ 3 - 2
src/main/java/org/ssssssss/magicapi/config/MappingHandlerMapping.java

@@ -9,6 +9,7 @@ import org.springframework.web.context.request.ServletWebRequest;
 import org.springframework.web.servlet.HandlerMapping;
 import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
 import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+import org.ssssssss.magicapi.provider.ApiServiceProvider;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -24,7 +25,7 @@ public class MappingHandlerMapping {
 	private RequestMappingHandlerMapping requestMappingHandlerMapping;
 	private RequestHandler handler;
 	private Method method = RequestHandler.class.getDeclaredMethod("invoke", HttpServletRequest.class, HttpServletResponse.class, Map.class, Map.class, Map.class);
-	private MagicApiService magicApiService;
+	private ApiServiceProvider magicApiService;
 	private String prefix;
 
 	public MappingHandlerMapping() throws NoSuchMethodException {
@@ -56,7 +57,7 @@ public class MappingHandlerMapping {
 		this.handler = handler;
 	}
 
-	public void setMagicApiService(MagicApiService magicApiService) {
+	public void setMagicApiService(ApiServiceProvider magicApiService) {
 		this.magicApiService = magicApiService;
 	}
 

+ 4 - 3
src/main/java/org/ssssssss/magicapi/config/WebUIController.java

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.ssssssss.magicapi.functions.DatabaseQuery;
 import org.ssssssss.magicapi.model.JsonBean;
 import org.ssssssss.magicapi.model.JsonBodyBean;
+import org.ssssssss.magicapi.provider.ApiServiceProvider;
 import org.ssssssss.magicapi.provider.ResultProvider;
 import org.ssssssss.script.*;
 import org.ssssssss.script.exception.MagicScriptAssertException;
@@ -28,7 +29,7 @@ public class WebUIController {
 
 	private MappingHandlerMapping mappingHandlerMapping;
 
-	private MagicApiService magicApiService;
+	private ApiServiceProvider magicApiService;
 
 	private ResultProvider resultProvider;
 
@@ -48,7 +49,7 @@ public class WebUIController {
 		this.mappingHandlerMapping = mappingHandlerMapping;
 	}
 
-	public void setMagicApiService(MagicApiService magicApiService) {
+	public void setMagicApiService(ApiServiceProvider magicApiService) {
 		this.magicApiService = magicApiService;
 	}
 
@@ -178,7 +179,7 @@ public class WebUIController {
 		do {
 			if (parent instanceof MagicScriptAssertException) {
 				MagicScriptAssertException sae = (MagicScriptAssertException) parent;
-				return new JsonBean<>(sae.getCode(), sae.getMessage(),resultProvider.buildResult(sae.getCode(),sae.getMessage()));
+				return new JsonBean<>(sae.getCode(), sae.getMessage(), resultProvider.buildResult(sae.getCode(), sae.getMessage()));
 			}
 			if (parent instanceof MagicScriptException) {
 				se = (MagicScriptException) parent;

+ 96 - 0
src/main/java/org/ssssssss/magicapi/provider/ApiServiceProvider.java

@@ -0,0 +1,96 @@
+package org.ssssssss.magicapi.provider;
+
+import org.ssssssss.magicapi.config.ApiInfo;
+
+import java.util.List;
+
+public interface ApiServiceProvider {
+	/**
+	 * 删除接口
+	 *
+	 * @param id
+	 * @return
+	 */
+	boolean delete(String id);
+
+	/**
+	 * 根据组名删除接口
+	 *
+	 * @param groupName
+	 * @return
+	 */
+	boolean deleteGroup(String groupName);
+
+	/**
+	 * 查询所有接口(提供给页面,无需带script)
+	 *
+	 * @return
+	 */
+	List<ApiInfo> list();
+
+	/**
+	 * 查询所有接口(内部使用,需要带Script)
+	 *
+	 * @return
+	 */
+	List<ApiInfo> listWithScript();
+
+	/**
+	 * 查询接口详情(主要给页面使用)
+	 *
+	 * @param id
+	 * @return
+	 */
+	ApiInfo get(String id);
+
+	/**
+	 * 判断接口是否存在
+	 *
+	 * @param method 请求方法
+	 * @param path   请求路径
+	 * @return
+	 */
+	boolean exists(String method, String path);
+
+	/**
+	 * 判断接口是否存在
+	 *
+	 * @param method 请求方法
+	 * @param path   请求路径
+	 * @param id     排除接口
+	 * @return
+	 */
+	boolean existsWithoutId(String method, String path, String id);
+
+	/**
+	 * 添加接口信息
+	 *
+	 * @param info
+	 * @return
+	 */
+	boolean insert(ApiInfo info);
+
+	/**
+	 * 修改接口信息
+	 *
+	 * @param info
+	 * @return
+	 */
+	boolean update(ApiInfo info);
+
+	/**
+	 * 包装接口信息(可用于加密)
+	 *
+	 * @param info
+	 */
+	default void wrap(ApiInfo info) {
+	}
+
+	/**
+	 * 解除包装接口信息(可用于解密)
+	 *
+	 * @param info
+	 */
+	default void unwrap(ApiInfo info) {
+	}
+}

+ 26 - 14
src/main/java/org/ssssssss/magicapi/config/MagicApiService.java → src/main/java/org/ssssssss/magicapi/provider/impl/DefaultApiServiceProvider.java

@@ -1,13 +1,15 @@
-package org.ssssssss.magicapi.config;
+package org.ssssssss.magicapi.provider.impl;
 
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
+import org.ssssssss.magicapi.config.ApiInfo;
+import org.ssssssss.magicapi.provider.ApiServiceProvider;
 
 import java.util.List;
 import java.util.UUID;
 
-public class MagicApiService {
+public class DefaultApiServiceProvider implements ApiServiceProvider {
 
 	private final String deleteById = "delete from magic_api_info where id = ?";
 	private final String deleteByGroupName = "delete from magic_api_info where api_group_name = ?";
@@ -21,45 +23,55 @@ public class MagicApiService {
 	private RowMapper<ApiInfo> rowMapper = new BeanPropertyRowMapper<>(ApiInfo.class);
 	private JdbcTemplate template;
 
-	public MagicApiService(JdbcTemplate template) {
+	public DefaultApiServiceProvider(JdbcTemplate template) {
 		this.template = template;
 	}
 
-	protected boolean delete(String id) {
+	public boolean delete(String id) {
 		return template.update(deleteById, id) > 0;
 	}
 
-	protected boolean deleteGroup(String groupName) {
+	public boolean deleteGroup(String groupName) {
 		return template.update(deleteByGroupName, groupName) > 0;
 	}
 
-	protected List<ApiInfo> list() {
+	public List<ApiInfo> list() {
 		return template.query(selectList, rowMapper);
 	}
 
-	protected List<ApiInfo> listWithScript() {
-		return template.query(selectListWithScript, rowMapper);
+	public List<ApiInfo> listWithScript() {
+		List<ApiInfo> infos = template.query(selectListWithScript, rowMapper);
+		if(infos != null){
+			for (ApiInfo info : infos) {
+				unwrap(info);
+			}
+		}
+		return infos;
 	}
 
-	protected ApiInfo get(String id) {
-		return template.queryForObject(selectOne, rowMapper, id);
+	public ApiInfo get(String id) {
+		ApiInfo info = template.queryForObject(selectOne, rowMapper, id);
+		unwrap(info);
+		return info;
 	}
 
-	protected boolean exists(String method, String path) {
+	public boolean exists(String method, String path) {
 		return template.queryForObject(exists, Integer.class, method, path) > 0;
 	}
 
-	protected boolean existsWithoutId(String method, String path, String id) {
+	public boolean existsWithoutId(String method, String path, String id) {
 		return template.queryForObject(existsWithoutId, Integer.class, method, path, id) > 0;
 	}
 
-	protected boolean insert(ApiInfo info) {
+	public boolean insert(ApiInfo info) {
 		info.setId(UUID.randomUUID().toString().replace("-", ""));
+		wrap(info);
 		long time = System.currentTimeMillis();
 		return template.update(insert, info.getId(), info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getGroupName(), info.getParameter(), info.getOption(), time, time) > 0;
 	}
 
-	protected boolean update(ApiInfo info) {
+	public boolean update(ApiInfo info) {
+		wrap(info);
 		return template.update(update, info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getGroupName(), info.getParameter(), info.getOption(), System.currentTimeMillis(), info.getId()) > 0;
 	}
 }