如何查询动态数量的别名?
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 列表,并且想查询每个用户的姓名。我该如何编写这样的查询?
我能想出的方法是以太动态生成一个带有别名的查询,如 user1
、user2
等,或者在服务器上实现 users(ids: [ID])
边缘。但我觉得应该有更好的解决方案。有吗?
(PS:我的代码示例可能有语法错误,我将其更多地写成伪代码,以表达我的观点。)
我同意你最后的提议:
Schema {
users($ids: [ID]) {
id: ID
name: String
}
}
使用像这样的解析器:
const users = async (root, { ids }) => await knex('users').whereIn('id', ids)
注意:我使用 graphql-js + graphql-tools + knex.js 创建我的模式、我的类型和我的解析器。
您可以将该功能作为架构的一部分来实现,例如使用 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。
假设我有一个像这样的 GraphQL 架构:
Schema {
user($id: ID) {
id: ID
name: String
}
}
我知道如何通过他的 ID 查询一个用户,我可以使用别名来查询多个用户,如下所示:
GetSomeMore {
john: user(id: "123") {
name
}
mary: user(id: "321") {
name
}
}
但是,假设我只有一个用户 ID 列表,并且想查询每个用户的姓名。我该如何编写这样的查询?
我能想出的方法是以太动态生成一个带有别名的查询,如 user1
、user2
等,或者在服务器上实现 users(ids: [ID])
边缘。但我觉得应该有更好的解决方案。有吗?
(PS:我的代码示例可能有语法错误,我将其更多地写成伪代码,以表达我的观点。)
我同意你最后的提议:
Schema {
users($ids: [ID]) {
id: ID
name: String
}
}
使用像这样的解析器:
const users = async (root, { ids }) => await knex('users').whereIn('id', ids)
注意:我使用 graphql-js + graphql-tools + knex.js 创建我的模式、我的类型和我的解析器。
您可以将该功能作为架构的一部分来实现,例如使用 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。