如何在单个查询中组合变异和查询?

时间:2017-10-12 20:51:32

标签: node.js graphql apollo-server

我有一个操作getFoo,要求对用户进行身份验证才能访问该资源。

用户使用突变authenticate进行身份验证,例如

mutation {
  authenticate (email: "foo", password: "bar") {
    id
  }
}

当用户通过身份验证时,会发生两件事:

  1. 请求上下文中包含身份验证详细信息
  2. 创建Cookie
  3. 但是,我想将身份验证和getFoo方法调用合并到一个请求中,例如:

    mutation {
      authenticate (email: "foo", password: "bar") {
        id
      }
    }
    query  {
      getFoo {
        id
      }
    }
    

    后者产生语法错误。

    有没有办法将变异与查询结合起来?

1 个答案:

答案 0 :(得分:0)

根据GraphQL规范,无法在一个请求中发送变异和查询。

但是,您可以向突变有效负载添加任何字段。因此,如果只需要支持authenticate突变的少数几个查询,您可以这样做,例如:

mutation {
  authenticate (email: "foo", password: "bar") {
    id
    getFoo {
      id
    }
  }
}

在一天结束时,最好保持变异和查询分开。如果你想在这样的许多突变中包含许多查询,它会很快变得毛茸茸。我在这里没有看到额外请求的开销问题。