动态的GraphQL,实现。
git地址
https://gitee.com/sxran/dyna-graph-ql
接入第三方: demo使用
@see com.gitee.sxran.dynagraphql.demo.DynGraphqlResolverSyncDemo#main
public class DynGraphqlResolverSyncDemo extends DynGraphqlResolverSync {
/**
* @param json 数组
*/
public DynGraphqlResolverSyncDemo(JSONArray json) {
super(json);
}
public Object execPath(String path , JSONObject argJson, JSONObject alisJson, JSONObject subJson){
return argJson.getStr("name","lisi");
}
public static void main(String[] args) throws Exception {
String pathTem = SystemUtil.getUserInfo().getCurrentDir() + "/service/%s.json";
String body = FileUtil.readUtf8String(String.format(pathTem, "hello"));
DynGraphqlResolverSyncDemo dynGraphqlResolver = new DynGraphqlResolverSyncDemo(JSONUtil.parseArray(body));
JSONObject resultJson = dynGraphqlResolver.run();
log.debug(""+resultJson);
}
}
@see com.gitee.sxran.dynagraphql.demo.DynGraphqlResolverASyncDemo#main
package com.gitee.sxran.dynagraphql.demo;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.system.SystemUtil;
import com.gitee.sxran.dynagraphql.DynGraphqlResolver;
import com.gitee.sxran.dynagraphql.DynGraphqlResolverAsync;
import com.gitee.sxran.dynagraphql.DynGraphqlResolverSync;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
/**
* 动态graphQHL的实现。
* 其他的可以实现execPath
*/
public class DynGraphqlResolverASyncDemo extends DynGraphqlResolverAsync {
/**
* @param json 数组
*/
public DynGraphqlResolverASyncDemo(JSONArray json) {
super(json);
}
public Object execPath(String path , JSONObject argJson, JSONObject alisJson, JSONObject subJson){
// 模拟交易执行时间。
Integer sleep = argJson.getInt("sleep",1000);
System.out.println( path + "=" + System.currentTimeMillis()+"=sleep="+sleep);
ThreadUtil.sleep(sleep);
return argJson.getStr("name","lisi");
}
public static void main(String[] args) throws Exception {
String pathTem = SystemUtil.getUserInfo().getCurrentDir() + "/service/%s.json";
String body = FileUtil.readUtf8String(String.format(pathTem, "hello"));
DynGraphqlResolverASyncDemo dynGraphqlResolver = new DynGraphqlResolverASyncDemo(JSONUtil.parseArray(body));
JSONObject resultJson = dynGraphqlResolver.run();
log.debug(""+resultJson);
}
}
json-array参数
说明
- ~开头 : 系统要求的
- ~name : // 返回节点名称
- ~path : // 对应url的path
- !开头 : 固定参数不转换
- @开头 : 从jsonArray中el表达式中获得
-
开头 : 子集,嵌套调用。
- $开头 : 从结果集中el表达式中获得(如果是同步处理的话,注意数组顺序。异步不需要)
- 没有特殊字符开头的 : 别名用于转化结果集。
json-array
[{
"!name" : "zhangsan",
"!sleep" : "2000",
"~name" : "hello1",
"~path" : "hello"
},{
"!sleep" : "1000",
"$name" : "hello1",
"~name" : "hello0",
"~path" : "hello"
},{
"!sleep" : "300",
"!name" : "zhangsan2",
"~name" : "hello2",
"~path" : "hello"
}]
结果集:
{"hello0":"zhangsan","hello1":"zhangsan","hello2":"zhangsan2"}
扩展
/**
* 从execAction中整理的内容,下放到子类具体实现。
* @param path 路径.
* @param argJson 参数.
* @param alisJson 别名.
* @param subJson 子集嵌套.
* @return
*/
public abstract Object execPath(String path , JSONObject argJson, JSONObject alisJson, JSONObject subJson){
// 1.通过path找到对应的method.
// 2. 把argJson、subJson转化成对应方法的入参.
// 3. 执行方法
// 4. 可选择性通过alisJson完成别名的转化。
// 5. 返回结果值.
return "";
}
导入jar
地址
https://jitpack.io/#com.gitee.sxran/dyna-graph-ql/1.0.0
pom.xml 依赖
To get a Git project into your build:
Step 1. Add the JitPack repository to your build file
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Step 2. Add the dependency
<dependency>
<groupId>com.gitee.sxran</groupId>
<artifactId>dyna-graph-ql</artifactId>
<version>1.0.0</version>
</dependency>

浙公网安备 33010602011771号