2017-11-11 79 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。 –