对graphql端点的curl查询中多行'--data'的正确格式?

hal*_*497 6 json curl graphql

我正在通过 curl 将“--data”传递给 GraphqQL API 端点。

我希望能够以“美化”形式传递数据,例如在 GraphiQL 浏览器中,

{
  alpha {
    param1
    param2
  }
}
Run Code Online (Sandbox Code Playgroud)

Atm,我数据中的格式设置——即 re: 行返回——处理不当。

这种单行字符串形式有效,

curl \
 -H 'content-type: application/json' \
 -X POST /path/to/graphql/api/endpoint \
 --data '{ "query":
           "query { alpha {param1, param2} } "
         }'
Run Code Online (Sandbox Code Playgroud)

这个“美化”版本没有

curl \
 -H 'content-type: application/json' \
 -X POST /path/to/graphql/api/endpoint \
 --data '{ "query":
           "query {
              alpha {
                param1
                param2
              }
            } "
         }'
Run Code Online (Sandbox Code Playgroud)

传递第二种形式的正确语法是什么?

我在猜测引用/转义的某种组合?

Dav*_*aze 4

JSON 字符串中不允许使用换行符。(请参阅RFC 8259 \xc2\xa77,其中规定必须转义控制字符。)您可以将换行符转换为\\n,但这有点笨拙:

\n
curl \\\n -H \'content-type: application/json\' \\\n -X POST /path/to/graphql/api/endpoint \\\n --data \'{ "query":\n           "query {\\n  alpha {\\n    param1\\n    param2\\n  }\\n} "\n         }\'\n
Run Code Online (Sandbox Code Playgroud)\n

由于 JSON 查询的结构非常好,因此使用专用工具来提交 GraphQL 查询似乎效果更好:GraphiQL的独立版本的独立版本是一个不错的默认版本,或者如果您有最喜欢的脚本语言和合理的 HTTP 客户端,那么它\用它写东西很容易。

\n