2016-04-25 44 views
7

0.5.0 graphql-js版本包含對resolve函數的重大更改 - 現在它會收到額外的context參數。解析函數的上下文和rootValue參數的預期用例是什麼?

它在我看來像context旨在承載用戶會話數據。現在rootValue參數的用例是什麼?

+0

我也很困惑,但我認爲'context'主要用於一般auth相關數據,'rootValue'用於其他應用程序特定數據。 – Joon

+0

由於幾乎每個應用程序都需要基於身份驗證的訪問控制,因此我認爲他們決定將其作爲第三個參數,以方便使用,而不是每次從info arg中摧毀它。 – Joon

+0

'rootValue'只傳遞給頂級解析器,而'context'在每個解析器中都可用。但我不確定爲什麼這種區別已經存在,或者'rootValue'如何有用了。 –

回答

2

RootValue是頂級解析器的第一個參數,它在該函數中仍然有用。

根查詢/突變類型在技術上也可以是模式中另一個字段的解析類型。如果只有在通過非根類型訪問解析函數時纔可能提供輸入值,將會很尷尬。這裏有一個例子:

type Mutation { 
    someMutationField: Query 
} 

type Query { 
    someField: String 
} 

schema { 
    query: Query 
    mutation: Mutation 
} 

另一個原因保持rootValue:它可以用來一起合併兩個GraphQL子模式成一個更大的架構,其中的子模式駐留在不同的服務器上。爲了能夠做到這一點,您需要有一種方法將根值與查詢一起傳遞給頂級解析函數。當前用於express-graphql的HTTP傳輸不會讓你這樣做,但它可以很容易地添加。

即使我沒有看到任何人以這種方式使用過rootValue,我認爲遲早有人會這樣使用它,或者找到其他用途,這可能是爲什麼它不是從GraphQL-JS中刪除。

相關問題