Node.js Gremlin服务器作为REST API,动态创建数据

Node.js Gremlin服务器作为REST API,动态创建数据,node.js,gremlin,tinkerpop,tinkerpop3,gremlin-server,Node.js,Gremlin,Tinkerpop,Tinkerpop3,Gremlin Server,假设我有以下几点: -node.js服务器,能够查询数据库并接收(可能很大的)JSON -一个gremlin服务器(配置了gremlin-server-rest-modern.yaml,但可能其中还包含其他内容) 我的问题是:有没有一种方法可以动态地、以编程方式添加一个新的图,由服务器提供服务?我希望我的节点服务器查询数据库并将JSON响应发送到gremlin服务器;在那里,响应将被转换成一个图形;从节点服务器,用户将能够发送其他查询并接收复杂的响应。我怎样才能做到这一点 我试图使用[1],但我

假设我有以下几点: -node.js服务器,能够查询数据库并接收(可能很大的)JSON -一个gremlin服务器(配置了gremlin-server-rest-modern.yaml,但可能其中还包含其他内容)

我的问题是:有没有一种方法可以动态地、以编程方式添加一个新的图,由服务器提供服务?我希望我的节点服务器查询数据库并将JSON响应发送到gremlin服务器;在那里,响应将被转换成一个图形;从节点服务器,用户将能够发送其他查询并接收复杂的响应。我怎样才能做到这一点

我试图使用[1],但我不确定如何才能做到我想要的。实际上,如何发送多个(链接的)命令,如迷你脚本?我知道如何使用控制台,但不使用服务器(作为REST服务),因为没有公开的API。你能给我一个建议或一些例子吗?谢谢

阿德里安

[1]

编辑: 我用一些简单的命令向服务器发送了一条POST消息。如果我发送一篇包含所有命令(图形创建和查询)的帖子,它就会工作。但是,对于多篇文章,不会保存上下文。首先,我发了一篇文章,内容如下:

{
 "gremlin" : "graph = TinkerGraph.open(); g = graph .traversal(); graph .addVertex('name', 'adrian', 'age', 21); "
}
然后,我又发了一个帖子

{
 "gremlin" : "v2 = graph.addVertex('name', 'gigel', 'age', 22); g.V()"
}
但是,我得到以下错误:

{
    "message": "No such property: graf for class: Script4",
    "Exception-Class": "groovy.lang.MissingPropertyException",
    "exceptions": [
        "groovy.lang.MissingPropertyException"
    ],
    "stackTrace": "groovy.lang.MissingPropertyException: No such property: graf for class: Script4\n\tat org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)\n\tat org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)\n\tat Script4.run(Script4.groovy:1)\n\tat org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:834)\n\tat org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:547)\n\tat javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)\n\tat org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:120)\n\tat org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:314)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:745)\n"
}
上下文未保存在gremlin服务器上?我必须发送要执行的整个脚本?如果我想创建两个图并稍后查询它们呢


谢谢

通过无会话请求(如REST)在脚本中创建的图形不会被维护。您可以创建在会话中的请求之间维护的图形实例,但它们仅在该会话中维护,并且在该会话之外无法访问

如果要为服务器全局创建图,它们必须是:

  • 在服务器配置文件中配置
  • 作为初始化脚本的一部分生成
  • 由一个定制的
    GraphManager
    实例构建(其中包括编写一些Java代码)

  • 我想也可以构建一个自定义端点,让您能够以某种方式管理图形,但要实现这一点,您需要对Gremlin服务器的代码有更多的粗略了解(虽然不太难)。

    您通过无会话请求(如REST)在脚本中创建的图形不会得到维护。您可以创建在会话中的请求之间维护的图形实例,但它们仅在该会话中维护,并且在该会话之外无法访问

    如果要为服务器全局创建图,它们必须是:

  • 在服务器配置文件中配置
  • 作为初始化脚本的一部分生成
  • 由一个定制的
    GraphManager
    实例构建(其中包括编写一些Java代码)
  • 我想也可以构建一个自定义端点,让您能够以某种方式管理图表,但要做到这一点,您需要对Gremlin服务器的代码有更多的粗略了解(不过这并不难)