diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java b/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java index deb4d5d8..c9be6e3a 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java @@ -136,6 +136,10 @@ public class MagicFunctionManager { return mappings.values().stream().distinct().collect(Collectors.toList()); } + public FunctionInfo getFunctionInfo(String path) { + return mappings.get(path); + } + private boolean hasConflict(TreeNode group, String newPath) { // 获取要移动的接口 List infos = mappings.values().stream() diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/provider/MagicAPIService.java b/magic-api/src/main/java/org/ssssssss/magicapi/provider/MagicAPIService.java index dd8675e8..65d7ab29 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/provider/MagicAPIService.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/provider/MagicAPIService.java @@ -19,7 +19,7 @@ public interface MagicAPIService extends MagicModule { * * @param method 请求方法 * @param path 请求路径 - * @param context 请求上下文,主要给脚本中使用 + * @param context 变量信息 */ Object execute(String method, String path, Map context); @@ -28,10 +28,18 @@ public interface MagicAPIService extends MagicModule { * * @param method 请求方法 * @param path 请求路径 - * @param context 请求上下文,主要给脚本中使用 + * @param context 变量信息 */ Object call(String method, String path, Map context); + /** + * 执行MagicAPI中的函数 + * + * @param path 函数路径 + * @param context 变量信息 + */ + Object invoke(String path, Map context); + /** * 保存接口 * diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java b/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java index b8321cc0..2fa72da0 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java @@ -180,6 +180,19 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant } } + @Override + public Object invoke(String path, Map context) { + FunctionInfo functionInfo = magicFunctionManager.getFunctionInfo(path); + if (functionInfo == null) { + throw new MagicServiceException(String.format("找不到对应函数 [%s]", path)); + } + MagicScriptContext scriptContext = new MagicScriptContext(context); + scriptContext.putMapIntoContext(context); + SimpleScriptContext simpleScriptContext = new SimpleScriptContext(); + simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE); + return ((MagicScript) ScriptManager.compile("MagicScript", functionInfo.getScript())).eval(simpleScriptContext); + } + @Override public String saveApi(ApiInfo info) { // 非空验证