通过 rest 调用将 json 作为查询正文发送
Posted
技术标签:
【中文标题】通过 rest 调用将 json 作为查询正文发送【英文标题】:Send json as query body via rest call 【发布时间】:2020-09-23 21:49:15 【问题描述】:我需要通过rest发送json的请求,客户端(rest)的代码是Node,服务端的代码是golang。
身体如下图
const query = "\"query\":\"query n result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") n idn namen providerNamen descriptionn integrationSystemIDn labelsn status n conditionn timestamptn n\""
当我运行代码时,我从服务器收到以下错误 (go) 我用
这是电话
const app = await fetch(`https://eway-auth-oauth.kh.de-arch.sho.ca.k8s-han.znd.com/dir/graphql`,
method: 'post',
body: queryBody,
headers:
'Accept-Encoding': 'gzip, deflate, br',
'Content-Type': 'application/json',
'Accept': 'application/json',
'Connection': 'keep-alive',
'DNT': '1',
'Origin': 'https://eway-auth.kh.devx-ar.znd.com',
'authorization': 'Bearer xxxxxxxxxxxxxxx',
'tenant': '3e6rezae-38b5-46a0-b1ed-9ccee153a0am'
);
return
ky: await app.json(),
错误
json body could not be decoded: invalid character 'z' after object key:value pair
z
是application(id:z....
中的起始后者
这是我需要发送的号码。
知道我该如何克服这个问题吗?我挣扎了两天
顺便说一句,
当我尝试使用 curl 命令时,它可以工作,当我将数据从终端复制到 js 变量 query
时出现错误,不确定方式:(
更新
这是 适合我的 curl(上面的代码不...)
curl `https://eway-auth-oauth.kh.de-arch.sho.ca.k8s-han.znd.com/dir/graphql` \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Connection: keep-alive' \
-H 'DNT: 1' \
-H 'Origin: https://eway-auth.kh.devx-ar.znd.com \
-H 'authorization: Bearer xxxxxxxxxxxxxxx' \
-H 'tenant: 3e6rezae-38b5-46a0-b1ed-9ccee153a0am' \
--data-binary '\”query\":\"query \n result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") \n id\n name\n providerName\n description\n integrationSystemID\n labels\n status \n condition\n timestampt\n \n\n\n\"'
\
--compressed
【问题讨论】:
queryBody 中应该包含的内容 那不是 json,而是 javascript 或一些字符串。这就是为什么它不起作用。fetch
方法的选项部分,即 json。 + 你能正确格式化你的身体吗?目前很难阅读。
你正在字符串化一个字符串?
如果您需要帮助,请发布 Go 代码。否则,删除 Go 标记。
试试这个:const query = "query":"query \n result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") \n id\n name\n providerName\n description\n integrationSystemID\n labels\n status \n condition\n timestampt\n \n\n\n"
这至少是正确的转义 json。还有queryBody = JSON.stringify(query)
。
【参考方案1】:
json 在您的字符串表示形式中未正确转义。特别是有必要转义值中的引号并转义反斜杠。
这意味着" => \"
或者,如果已经转义,\" => \\\"
和例如\n => \\n
.
您可以将 json 直接分配给查询。在这种情况下,如果 json 无效,您的 IDE 通常已经在抱怨。
const query =
"query": "query \n result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") \n id\n name\n providerName\n description\n integrationSystemID\n labels\n status \n condition\n timestampt\n \n\n\n"
;
您也可以使用'
来避免转义。在大多数情况下,这不应该有所作为。即使我不确定您在后端的解析器是否可以正常使用。
const query =
"query": "query \n result: application(id: 'fb7b5992-4d0a-4782-acb7-13ae6cc66102') \n id\n name\n providerName\n description\n integrationSystemID\n labels\n status \n condition\n timestampt\n \n\n\n"
;
之后您需要将其作为字符串传递给您的 http 请求:
const queryBody = JSON.stringify(query);
【讨论】:
以上是关于通过 rest 调用将 json 作为查询正文发送的主要内容,如果未能解决你的问题,请参考以下文章
我应该通过 HTTP 标头或将正文作为 JSON 传递到 REST Api 吗?
如何使用JSON正文在REST API POST方法中传递多个记录