我试图用他们的v4(GraphQL)API从GitHub中读取一些数据。我编写了一个工作正常的Java客户端,直到我开始用GraphQL片段替换一些查询。
我正在使用GraphiQL来初步测试我的查询,并且在那里添加片段非常简单。但是,在转换为JSON时,我还没有找到正确的格式。我试过了:
{ "query": "{ ... body_of_query ... } fragment fragname on Blob { byteSize text }" }
{ "query": "{ ... body_of_query ... }, fragment fragname on Blob { byteSize text }" }
{ "query": "{ ... body_of_query ... }", "fragment": "{fragname on Blob { byteSize text } }" }
编辑:添加@Scriptonomy:
{
query {
search(first:3, type: REPOSITORY, query: \"language:HCL\") {
edges {
node {
... on Repository {
name
descriptionHTML
object(expression: \"master:\") {
... on Tree {
...recurseTree
}
}
}
}
cursor
}
pageInfo {
endCursor
hasNextPage
}
}
}
fragment recurseTree on Tree {
entries {
name
type
}
}
我肯定这将是有趣的,并继续抛出随机的变化,我的早上非常有趣的搜索片段上的各种GraphQL文档和博客,我甚至可能实际上猜到了正确的答案但却有不匹配的问题(我只是使用硬编码的JSON,直到我知道格式 - 也许不是回顾它的最明智的选择)。
我希望有人可能知道正确的格式,并在我从GraphQL-doc过度曝光中找到正确的路线之前。
答案 0 :(得分:2)
片段在JSON主体的同一属性中与查询本身一起发送。您可以看到使用片段here的示例。
有效的GraphQL请求通常是将查询编码为URL查询参数的GET请求,或者是带有JSON正文的POST请求。 JSON正文包含一个必需的键query
和一个可选字段variables
。在您的情况下,JSON需要如下所示:
{
"query": "{\n query {\n search(first:3, type: REPOSITORY, query: \"language:HCL\") {\n edges {\n node {\n ... on Repository {\n name\n descriptionHTML\n object(expression: \"master:\") {\n ... on Tree {\n ...recurseTree\n }\n }\n }\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment recurseTree on Tree {\n entries {\n name\n type\n }\n}"
}
这是您问题中逐字查询字符串的JSON.stringify
版本。
我建议您从连接到GitHub GraphQL API的GraphiQL实例运行查询,并查看网络请求。您可以将GraphQL请求复制为cuRL,以查看JSON正文的外观。
如果您仍然获得400,请分享一些代码,因为这意味着您的请求格式错误,因此它可能从未首先访问过GraphQL解析器。
答案 1 :(得分:0)
无需将GraphQL查询转换为JSON。这将是您的查询:
"{ query { ... body_of_query ... } fragment fragname on Blob { byteSize text } }"
答案 2 :(得分:0)
对于将来的用户,以及偶然遇到此障碍的像我这样的人。
查询需要以给定的顺序发送;
{ "query": "fragment fragname on Blob { byteSize text } methodName(ifMethodParam: paramVal){...fragname }" }
希望这对其他人有帮助。