GraphQL列表或单个对象
GraphQL List or single object
我得到了以下"问题"。我习惯使用这样的API。
/users
/users/{id}
第一个返回用户列表。第二个只有一个物体。我想与GraphQL相同,但似乎失败了。我得到了下面的Schema
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或单个对象?
您不应该将一个字段用于不同的目的。相反,创建两个字段。一个用于单个对象,另一个用于对象列表。这是更好的实践,更适合测试
fields: {
user: {
type: userType,
description: 'Returns a single user',
args: {
id: {type: GraphQLString}
},
resolve: function (_, args) {
return UserService.findOne(args.id);
}
},
users: {
type: new GraphQLList(userType),
description: 'Returns a list of users',
resolve: function () {
return UserService.find()
}
}
}
以上答案是正确的,通常的做法是添加单复数形式的查询。然而,在大型模式中,这可能会复制大量逻辑,并且可以抽象一点,例如使用Node接口和节点、节点查询。但是节点查询通常使用id作为参数(在Relay viz node Fields中),但是您可以构建自己的抽象方式来获取,这样您就可以使用带有类型参数的节点,并基于此确定要获取的列表类型。但是,更简单的方法是为每种类型复制逻辑,使用单复数形式的查询,并对每种类型执行与上述或此代码片段中相同类型的查询。有关在查询中实现GraphQL列表修饰符甚至作为突变输入的更多详细说明。我刚刚发表了这方面的文章。
相关文章:
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 仅使用文件对象选择单个文件
- 如何使用javascript从JSON访问单个对象
- 将一个对象集合映射到汇总集合的单个对象
- 高级布线和单个对象定义
- 嵌套描述函数中对象的单个mock(jasmine
- 如何在返回单个对象时递归使用 Array.prototype.find()
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- 基于单个属性从数组中获取唯一对象
- 从mongo返回的对象(findOne)中筛选/返回单个嵌套对象
- 如何在javascript中的单个对象中推送类似的索引类型键
- Knockout.js用单个json对象绑定一个可观察对象
- 访问单个 Json 对象中的元素
- 下划线分组依据单个方面与嵌套对象属性的比较
- NodeJS + mysql:选择返回单个对象的查询
- 单个页面中的多个会话对象
- 在javascript(Angularjs)中将对象数组转换为单个对象
- 在单个 Javascript 函数中处理多个 websocket 订阅,但只有一个连接对象
- 更改 JS 数组中的单个对象会更改所有元素
- 从 Web 服务返回单个 json 对象的数组