Loading

动态的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>
posted @ 2021-03-17 09:04  世界这么美还没钱去看  阅读(104)  评论(0)    收藏  举报