使用curl调用GraphQL时如何判断是否返回错误?
解决curl无法识别GraphQL错误的方法
curl本身只关注HTTP状态码,没办法直接识别GraphQL响应体里的errors数组,得靠额外工具或者脚本来处理,下面是两种可行的方案:
用curl配合jq处理响应体
jq是轻量的JSON处理工具,能帮你检查响应里是否存在errors字段,并据此设置退出码,这样就能用$?判断是否出错。
脚本化处理
把curl请求和错误判断写成脚本,方便复用:
#!/bin/bash GRAPHQL_ENDPOINT="https://your-graphql-endpoint" QUERY='{"query": "query { yourQueryHere { field1 field2 } }"}' # 发起请求并保存响应 response=$(curl -s -X POST \ -H "Content-Type: application/json" \ -d "$QUERY" \ "$GRAPHQL_ENDPOINT") # 检查是否有GraphQL错误 if echo "$response" | jq -e '.errors' > /dev/null; then echo "GraphQL错误:" echo "$response" | jq '.errors' exit 1 fi # 没有错误就处理正常响应 echo "请求成功:" echo "$response" | jq '.data'
单行命令直接使用
如果不想写脚本,可以把判断逻辑整合到一行:
curl -s -X POST -H "Content-Type: application/json" -d '{"query": "..."}' https://your-graphql-endpoint | jq -e 'if .errors then (error("GraphQL错误:" + (.errors[0].message))) else . end'
这里jq的-e参数会在表达式返回错误时让jq退出码非0,整个命令的$?就会变成1,方便后续判断。
使用专门的GraphQL命令行工具
如果经常和GraphQL接口交互,用专门的工具会更省心,这类工具内置了GraphQL错误检测,不用自己处理响应体:
graphqurl(gql)
这是一个常用的GraphQL CLI工具,支持查询、变量、headers等功能,遇到GraphQL错误会直接返回非0退出码:
# 安装(需要Node.js) npm install -g graphqurl # 发起查询 gql https://your-graphql-endpoint -q 'query { yourQueryHere { field1 field2 } }'
GraphQL CLI
功能更全面,支持 schema 下载、代码生成等,同样能自动识别GraphQL错误:
# 安装 npm install -g graphql-cli # 初始化配置(可选) graphql init # 发起查询 graphql query yourQuery.graphql
内容的提问来源于stack exchange,提问作者AlikElzin-kilaka
相关产品推荐
相关产品推荐

