Я изучаю 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,
});
Отношения 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 запросом?