将 groovy 脚本作为文件发送到 Gremlin 服务器 REST API

Send groovy script as a file to the Gremlin Server REST API

Here 解释了如何使用 REST API 与 Gremlin 服务器交互。使用以下命令,我执行相当简单的 100-1 脚本。

curl -X POST -d "{\"gremlin\":\"100-1\"}" "http://localhost:8182"

我想要的是不使用内联脚本,而是用 script.groovy.

来定义它

我可以让它在这种情况下工作,用整个脚本定义一个变量:

GROOVY_LOAD_DATA_SCRIPT=$(<script.groovy)
curl -X POST -d "{\"gremlin\":\"${GROOVY_LOAD_DATA_SCRIPT}\"}" "http://localhost:8182"

但是一旦我开始超越单行命令中断:

{
    "message": "body could not be parsed"
}

我创建了一个名为 send.groovy 的文件,其中包含:

{
    "gremlin": "x=1+1;x+3"
}

然后我通过 curl 发送它:

$ curl -X POST --data-binary @send.groovy http://localhost:8182/gremlin
{"requestId":"6c0e7f3a-a16c-4fc1-a636-d462dc02b832","status":{"message":"","code":200,"attributes":{}},"result":{"data":[5],"meta":{}}}

如果你想在脚本本身中使用多行,那么你已经对内容进行编码以使其保持有效 JSON(即,将你的换行符更改为“\n”,因为 JSON 没有'不允许换行)。

请注意,您可以使用 Python 等工具将文件内容转换为有效 JSON:

$ cat /tmp/foo
println "Hello " + 'World!'
1+2

$ echo "{\"gremlin\":$(python -c 'import json, sys; print(json.dumps(sys.stdin.read()))' < /tmp/foo)}"
{"gremlin":"println \"Hello \" + 'World!'\n1+2\n"}