无法使用cURL执行GraphQL突变

问题描述

我已经在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的许多示例,也不知道错误在哪里。有什么帮助吗? 谢谢

解决方法

您正在通过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?

,

这里我有一个使用 curl、换行引号转义和缩进的工作突变。它确实看起来并不花哨,但比 oneliner 更易于维护:https://stackoverflow.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