如何查询动态数量的别名?

How to query for dynamic amount of aliases?

假设我有一个像这样的 GraphQL 架构:

Schema {
  user($id: ID) {
    id: ID
    name: String
  }
}

我知道如何通过他的 ID 查询一个用户,我可以使用别名来查询多个用户,如下所示:

GetSomeMore {
  john: user(id: "123") {
    name
  }
  mary: user(id: "321") {
    name
  }
}

但是,假设我只有一个用户 ID 列表,并且想查询每个用户的姓名。我该如何编写这样的查询?

我能想出的方法是以太动态生成一个带有别名的查询,如 user1user2 等,或者在服务器上实现 users(ids: [ID]) 边缘。但我觉得应该有更好的解决方案。有吗?

(PS:我的代码示例可能有语法错误,我将其更多地写成伪代码,以表达我的观点。)

我同意你最后的提议:

Schema {
  users($ids: [ID]) {
    id: ID
    name: String
  }
}

使用像这样的解析器:

const users = async (root, { ids }) => await knex('users').whereIn('id', ids)

注意:我使用 + + 创建我的模式、我的类型和我的解析器。

您可以将该功能作为架构的一部分来实现,例如使用 users 查询的 id_in: [String] 参数。

在 Graphcool,我们使用 filter 参数来公开这样的功能。例如,您的查询可以这样完成:

query {
  allUsers(filter: {id_in: ["123", "321"]}) {
    id
    name
  }
}

结果

{
  "data": {
    "allUsers": [
      {
        "id": "123",
        "name": "John"
      },
      {
        "id": "321",
        "name": "Mary"
      }
    ]
  }
}

要阅读有关 filter 参数的更多信息,请检查 the documentation