【发布时间】:2017-04-18 04:11:42
【问题描述】:
我正在学习GraphQL,所以我建立了一个小项目。假设我有 2 个模型,User 和 Comment。
const Comment = Model.define('Comment', {
content: {
type: DataType.TEXT,
allowNull: false,
validate: {
notEmpty: true,
},
},
});
const User = Model.define('User', {
name: {
type: DataType.STRING,
allowNull: false,
validate: {
notEmpty: true,
},
},
phone: DataType.STRING,
picture: DataType.STRING,
});
关系是one-to-many,其中一个用户可以有许多 cmets。
我已经建立了这样的架构:
const UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: {
type: GraphQLString
},
name: {
type: GraphQLString
},
phone: {
type: GraphQLString
},
comments: {
type: new GraphQLList(CommentType),
resolve: user => user.getComments()
}
})
});
还有查询:
const user = {
type: UserType,
args: {
id: {
type: new GraphQLNonNull(GraphQLString)
}
},
resolve(_, {id}) => User.findById(id)
};
对用户及其 cmets 执行查询是通过 1 个请求完成的,如下所示:
{
User(id:"1"){
Comments{
content
}
}
}
据我了解,客户端将使用 1 个查询获得结果,这是使用 GraphQL 的好处。但是服务器会执行 2 个查询,一个是针对用户,另一个是针对他的 cmets。
我的问题是,构建GraphQL 架构和类型以及在表之间组合连接以使服务器也可以通过 1 个请求执行查询的最佳实践是什么?
【问题讨论】:
标签: sql node.js sequelize.js graphql