我正在学习 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,
});
关系是“一对多”,一个用户可以有很多评论。我已经按照以下模式构建了模式:
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)
};
执行用户及其评论的查询可以通过1个请求完成,如下所示:
{
User(id:"1"){
Comments{
content
}
}
}
据我理解,客户端将使用1个查询获取结果,这是使用 GraphQL
的好处。但服务器将执行2个查询,一个用于用户,另一个用于他的评论。
我的问题是,构建 GraphQL
模式和类型以及在表之间组合联接的最佳实践是什么,以便服务器也可以使用1个请求执行查询?