我正在學習GraphQL
所以我建立了一個小項目。假設我有2個型號,User
和Comment
。GraphQL查詢與表加入
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,
});
關係是1:很多,用戶可以有很多評論。
我已經建立了這樣的模式:
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請求執行查詢?
如果你喜歡的視頻,在這裏是一個談加入怪物:https://www.youtube.com/watch?v=Y7AdMIuXOgs :) – marktani
謝謝您爲您的文章。你會選哪一個?一方面,我有臉書和1800星級圖書館批量一些請求,但另一方面,我有一個圖書館批量一切到1請求。 – itaied
我們在Graphcool的Dataloader上做了很好的體驗,當時我們使用graphql-js運行一個節點GraphQL後端。無法分享加入怪物的任何經驗。我認爲它們在功能和用法上略有差異,所以你需要測試它我猜:) – marktani