想象一下下面的查询:通获得的场到另一个查询在graphQL
query {
user {
id
}
SomeOtherStuff(id: <--- I want to pass the id obtained from user) {
id
}
}
你如何通过从一个查询到另一个获得的参数?
想象一下下面的查询:通获得的场到另一个查询在graphQL
query {
user {
id
}
SomeOtherStuff(id: <--- I want to pass the id obtained from user) {
id
}
}
你如何通过从一个查询到另一个获得的参数?
在GraphQL中,请求的每个“级别”的字段都被并行执行和解析。在你的例子中,user
和SomeOtherStuff
都是相同类型的字段(根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)
感谢您的回复。这与我对GraphQL的期望并不相符。我认为将多个请求合并为一个的想法是GraphQL的主要原则。对我来说,这似乎是非常基本的场景,以获得一些依赖于用户,但不是嵌套在用户本身的其他数据......有什么办法可以获取依赖于用户的数据,而不是嵌套在用户键入(在相同的请求中)? –
简答题:不。我敢说,被迫应对你描述的情况表明API设计不佳。重点是,如果有与用户有关的数据,它*应该*是用户类型的一部分。如果数据与当前登录的用户(查看器)相关,则可能应该有一个上下文感知查看器查询,可以让您访问它,而无需首先为查看器首先获取ID。 –
您还没有显示您所使用的语言和GraphQL客户端,或者是否与现有的API或一个工作,你正在设计你自己。这些信息将有助于为您的问题提供更全面的答案。 –
@DanielRearden我正在使用apollo –