2017-11-11 124 views
0

想象一下下面的查詢:通獲得的場到另一個查詢在graphQL

query { 
    user { 
    id 
    } 
    SomeOtherStuff(id: <--- I want to pass the id obtained from user) { 
    id 
    } 
} 

你如何通過從一個查詢到另一個獲得的參數?

+0

您還沒有顯示您所使用的語言和GraphQL客戶端,或者是否與現有的API或一個工作,你正在設計你自己。這些信息將有助於爲您的問題提供更全面的答案。 –

+0

@DanielRearden我正在使用apollo –

回答

1

在GraphQL中,請求的每個「級別」的字段都被並行執行和解析。在你的例子中,userSomeOtherStuff都是相同類型的字段(根Query類型) - 因此它們將同時被解析。這意味着每個查詢基本上不知道其他或其他解決方案。

你將不得不處理這種場景客戶端。換句話說,首先請求用戶,解析id的響應,然後發出第二個請求。

編輯:阿波羅,你將利用編寫用於此目的:

const userQuery = gql`query User { user { id } }`; 
const stuffQuery = gql`query SomeOtherStuff($id: ID) { someOtherStuff(id: $id){ stuff } }`; 

export default compose(
    graphql(userQuery, { name: 'userData' }) 
    graphql(stuffQuery, { name: 'stuffData', options: ({userData:{id}={}}) => ({variables: {id}}) }), 
)(YourComponent) 
+0

感謝您的回覆。這與我對GraphQL的期望並不相符。我認爲將多個請求合併爲一個的想法是GraphQL的主要原則。對我來說,這似乎是非常基本的場景,以獲得一些依賴於用戶,但不是嵌套在用戶本身的其他數據......有什麼辦法可以獲取依賴於用戶的數據,而不是嵌套在用戶鍵入(在相同的請求中)? –

+0

簡答題:不。我敢說,被迫應對你描述的情況表明API設計不佳。重點是,如果有與用戶有關的數據,它*應該*是用戶類型的一部分。如果數據與當前登錄的用戶(查看器)相關,則可能應該有一個上下文感知查看器查詢,可以讓您訪問它,而無需首先爲查看器首先獲取ID。 –