2017-10-11 190 views
1

我试图从他们的v4(GraphQL)API读取GitHub中的一些数据。我写了一个工作正常的Java客户端,直到我开始用GraphQL片段替换一些查询。GraphQL片段JSON格式

我使用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文档和片段上的博客方面有很大的乐趣,我甚至可能真的猜到了正确的答案,但是有不匹配的parens(我只是使用硬编码的JSON,直到我知道格式 - 可能不是回看它的最明智的选择)。

我希望有人可能知道正确的格式,并在我从GraphQL-doc过度暴露之前开始设置正确的课程。

+0

编辑:添加@Scriptonomy – REW

回答

0

没有必要将GraphQL Query转换为JSON。这将是您的查询:

"{ query { ... body_of_query ... } fragment fragname on Blob { byteSize text } }" 
+0

我给了这个版本一个镜头,但得到了400响应代码。我在这个版本的问题编辑中加入了完整的POST数据(所有内容都用引号引起来),以防你或其他人看着它,并说:“呃,你做错了。” – REW

0

片段在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分析器。