2017-10-11 198 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分析器。