#5 – Добавление связей в схему
Видеоурок
Одной из ключевых возможностей GraphQL является простота создания связей между различными сущностями. Это позволяет клиенту запрашивать вложенные данные за один запрос, избегая избыточных обращений к серверу.
Рассмотрим пример: у нас есть два типа — User и Post. Один пользователь может иметь несколько постов. В GraphQL эту связь можно выразить следующим образом:
type User {
id: ID!
name: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
}В этом примере у каждого пользователя есть поле posts, которое содержит массив постов. А каждый пост, в свою очередь, содержит поле author, ссылающееся на пользователя. Такая двухсторонняя связь позволяет гибко работать с данными.
Чтобы эти связи работали, необходимо правильно реализовать резолверы. Вот пример на JavaScript (с использованием Apollo Server):
const resolvers = {
User: {
posts: (parent, args, context) => {
return context.db.posts.filter(post => post.authorId === parent.id)
},
},
Post: {
author: (parent, args, context) => {
return context.db.users.find(user => user.id === parent.authorId)
},
},
}Такой подход позволяет клиенту сделать простой вложенный запрос:
query {
users {
name posts {
title
}
}
}В ответ клиент получит всех пользователей вместе с их постами. GraphQL автоматически определит, какие поля и связи нужно вернуть, и сформирует ответ по указанной структуре.
Именно благодаря таким возможностям GraphQL становится мощным инструментом для построения гибких и эффективных API.
Материалы для курса
Чтобы скачивать материалы к видеокурсам необходимо оформить подписку на сайт
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть