GraphQL 片段 JSON 格式
Posted
技术标签:
【中文标题】GraphQL 片段 JSON 格式【英文标题】:GraphQL fragment JSON format 【发布时间】:2018-03-23 15:44:33 【问题描述】:我正在尝试使用他们的 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 过度曝光而崩溃之前让我走上正确的道路。
【问题讨论】:
编辑:为@Scriptonomy 添加 【参考方案1】:无需将 GraphQL 查询转换为 JSON。这将是您的查询:
" query ... body_of_query ... fragment fragname on Blob byteSize text "
【讨论】:
我试了一下这个版本,但得到了 400 响应码。我已经在这个版本的问题编辑中包含了完整的 POST 数据(所有内容都用引号括起来),以防你或其他人看到它并说:“嗯,呃,你做了 THING错了。”【参考方案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 解析器。
【讨论】:
示例链接已损坏 这确实没有向所提出的问题添加任何信息。 Plus 链接仍然断开。 我成功了!希望我能更多地关注你的答案:D【参考方案3】:对于未来的用户,以及像我这样偶然发现这个障碍的人。
查询需要按照给定的顺序发送;
"query": "fragment fragname on Blob byteSize text methodName(ifMethodParam: paramVal)...fragname "
希望这对其他人有所帮助。
【讨论】:
以上是关于GraphQL 片段 JSON 格式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中发送带有片段的 graphql 查询
如何将数据的 JSON 格式转换为 GraphQL 查询格式