【发布时间】:2022-01-19 15:15:20
【问题描述】:
我正在尝试编写一个针对 GraphQL API 执行 curl 的 shell 脚本,但我之前从未与 GQL 进行过交互。我遇到了一些奇怪的错误,虽然我知道这个社区无法访问 GQL 服务器,但我希望有人可以查看脚本并确保我没有在语法方面做任何明显错误的事情(两者都在shell 脚本层以及 GQL 查询本身)。
我的脚本:
#!/bin/bash
BSEE_WEB_SERVER_DNS=https://mybsee.example.com
BSEE_API_KEY=abc123
siteId=1
scanConfigId=456
runScanQuery='mutation CreateScheduleItem { create_schedule_item(input: {site_id: "$siteId" scan_configuration_ids: "$scanConfigId"}) { schedule_item { id } } }'
runScanVariables='{ "input": "site_id": $scanId }}'
runScanOperationName='CreateScheduleItem'
curl -i --request POST \
--url $BSEE_WEB_SERVER_DNS/graphql/v1 \
--header "Authorization: $BSEE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"query":"$runScanQuery","variables":{$runScanVariables},"operationName":"${runScanOperationName}"}'
当我从终端运行脚本时的输出:
HTTP/2 200
<OMITTED RESPONSE HEADERS>
{"errors":[{"message":"Invalid JSON : Unexpected character (\u0027$\u0027 (code 36)): was expecting double-quote to start field name, Line 1 Col 38","extensions":{"code":3}}]}%
出于安全和简洁的原因,我省略了 HTTP 响应标头。
我想知道我对引号/双引号的使用是否存在某种错误,或者 GQL 查询本身(通过 curl)的性质是否对任何人都不利。
我与管理服务器的团队确认 HTTP 200 OK 响应代码是正确的。 200 表示对 GQL API 的请求成功,但 GQL 正在响应此错误以指示 query 本身不正确。
【问题讨论】: