无法使用 cURL 执行 GraphQL 突变
Posted
技术标签:
【中文标题】无法使用 cURL 执行 GraphQL 突变【英文标题】:Unable to execute GraphQL mutation using cURL 【发布时间】:2021-01-13 02:16:11 【问题描述】:我已经在 MicroProfile 容器 (WildFly) 中部署了一个 Mutation,并且能够在 GraphQL UI 中执行它:
mutation Add
createOrder(order:
id: 1,
type: "car"
model: "Ferrari"
price: 500
)
type
model
price
但是,当我尝试使用 cURL 执行相同的突变时:
curl \
-X POST \
-H "Content-Type: application/json" \
--data ' "query": "mutation Add
createOrder(order:
id: 1,
type: \"car\"
model: \"Ferrari\"
price: 500
)
type
model
price
" ' http://localhost:8080/demo/graphql
但是它失败了:
javax.json.stream.JsonParsingException: Unexpected char 10 at (line no=1, column no=27, offset=26)
我没有找到很多使用命令行工具(如 cURL)运行 Mutation 的示例,也不知道错误在哪里。有什么帮助吗? 谢谢
【问题讨论】:
会不会像 shell 吃掉你的反斜杠一样简单?尝试记录到达您服务器的确切有效负载。 【参考方案1】:您正在通过 curl 发送 json 数据,而 Json 规范不允许换行。它们需要替换为 '\n' 字符。
curl \
-X POST \
-H "Content-Type: application/json" \
--data ' "query": "mutation Add createOrder(order: id: 1, type: \"car\", model: \"Ferrari\", price: 500)type\n model\n price\n" ' http://localhost:8080/demo/graphql
有关其他建议,请参阅此问题:Correct format for multiline '--data' in curl query to graphql endpoint?
【讨论】:
【参考方案2】:在这里,我使用 curl、换行符转义和缩进进行了工作突变。它确实看起来并不花哨,但比 oneliner 更易于维护:https://***.com/a/65837497/835098
我已经重新格式化了您的 curl 调用,现在应该可以使用了。注意输入和输出参数很好地为您的突变缩进。您只需要担心在每行末尾添加反斜杠并转义“查询”字符串中的反斜杠和引号。
哦,别忘了在每个输入参数后添加逗号。我认为您的原始请求中缺少这些。
curl \
-X POST \
-H "Content-Type: application/json" \
--data \
" \
\"query\": \"mutation Add \
createOrder(order: \
id: 1, \
type: \\\"car\\\", \
model: \\\"Ferrari\\\", \
price: 500 \
) \
type \
model \
price \
\
\
\
" http://localhost:8080/demo/graphql
【讨论】:
以上是关于无法使用 cURL 执行 GraphQL 突变的主要内容,如果未能解决你的问题,请参考以下文章
无法在 GraphQL 突变中传递数组 - React Native
GraphQL 突变后的 updateQueries 无法与 Apollo 客户端一起使用
GraphQL 突变后的 updateQueries 无法与 Apollo 客户端一起使用