解析函数的上下文和 rootValue 参数的预期用例是什么?
What are the intended use cases for the resolve function's context and rootValue parameters?
graphql-js 的 0.5.0
版本包含对 resolve
函数的重大更改 - 它现在接收一个额外的 context
参数。
在我看来 context
是用来承载用户会话数据的。现在 rootValue
参数的用例是什么?
RootValue 是顶级解析器的第一个参数,它在该函数中仍然很有用。
根 query/mutation 类型在技术上也可以是架构中另一个字段的解析类型。如果只能在通过非根类型访问解析函数时为其提供输入值,那将很尴尬。这是一个例子:
type Mutation {
someMutationField: Query
}
type Query {
someField: String
}
schema {
query: Query
mutation: Mutation
}
保留 rootValue 的另一个原因:它可用于将两个 GraphQL 子模式合并为一个更大的模式,其中子模式驻留在不同的服务器上。为了能够做到这一点,您需要有一种方法将根值与查询一起传递到顶级解析函数中。当前用于 express-graphql 的 HTTP 传输不允许您这样做,但可以轻松添加。
尽管我以前从未见过有人以这种方式使用 rootValue,但我认为迟早有人会以这种方式使用它,或者找到它的其他用途,这可能就是为什么它不是'从 GraphQL-JS 中移除。
graphql-js 的 0.5.0
版本包含对 resolve
函数的重大更改 - 它现在接收一个额外的 context
参数。
在我看来 context
是用来承载用户会话数据的。现在 rootValue
参数的用例是什么?
RootValue 是顶级解析器的第一个参数,它在该函数中仍然很有用。
根 query/mutation 类型在技术上也可以是架构中另一个字段的解析类型。如果只能在通过非根类型访问解析函数时为其提供输入值,那将很尴尬。这是一个例子:
type Mutation {
someMutationField: Query
}
type Query {
someField: String
}
schema {
query: Query
mutation: Mutation
}
保留 rootValue 的另一个原因:它可用于将两个 GraphQL 子模式合并为一个更大的模式,其中子模式驻留在不同的服务器上。为了能够做到这一点,您需要有一种方法将根值与查询一起传递到顶级解析函数中。当前用于 express-graphql 的 HTTP 传输不允许您这样做,但可以轻松添加。
尽管我以前从未见过有人以这种方式使用 rootValue,但我认为迟早有人会以这种方式使用它,或者找到它的其他用途,这可能就是为什么它不是'从 GraphQL-JS 中移除。