我遇到了以下“问题”。我习惯拥有这样的API。
/users
/users/{id}
第一个返回用户列表。第二个只是一个对象。我想和GraphQL一样,但似乎失败了。我得到了以下架构
var schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: {
users: {
type: new GraphQLList(userType),
args: {
id: {type: GraphQLString}
},
resolve: function (_, args) {
if (args.id) {
return UserService.findOne(args.id).then(user => [user]);
} else {
return UserService.find()
}
}
}
}
})
});
如何修改用户类型以返回List或单个对象?
答案 0 :(得分:8)
您不应将一个字段用于不同目的。而不是那样,做两个字段。一个用于单个对象,另一个用于对象列表。这是更好的练习,更适合测试
else
答案 1 :(得分:-1)
以上答案是正确的,通常的方法是添加单数和复数形式的查询。但是,在大型架构中,这可能会重复很多逻辑,并且可以使用例如Node接口和node,nodes查询进行抽象。但是,通常使用id作为参数来应用节点查询(在Relay viz node Fields中),但是您可以构建自己的抽象方式进行提取,以便只有带有类型参数的节点,并可以根据此说要获取哪种类型的列表。但是,更简单的方法是仅复制每种类型的逻辑,并使用单数和复数形式的查询,并对每种类型执行与上面或在此code snippet中相同的查询。有关在查询中甚至作为突变的输入实现GraphQL list修饰符的更多详细说明。我刚刚发布了article。