3

У меня немного более сложная структура данных, что приводит к глубоко вложенному графику. Прямо сейчас я всегда получаю/перезагружаю корневые запросы. Однако я думаю, что это не самый лучший способ, так как он всегда требует, чтобы сервер разрешил все дерево.GraphQL извлекает дополнительные данные подгрузок во вложенном графе

Возможно ли получить/перезагрузить дополнительные данные/края вспомогательных ребер во вложенном графе во втором запросе без прохождения всего дерева?

Если да, то как?

Например: У меня есть

RootQuery Spaces 
+ ... Other Layers 
    + Project 
     + Edge Tasks 
      + Edge SubTasks 
       + Edge Assigned User 

Отображение списка Project Я не загружая задач по первоначальному запросу. Если пользователь открывает проект, я хотел бы использовать кружевные задачи только для этого проекта без перезагрузки родительского/корневого или всего дерева, начиная с RootQuery.

ответ

2

Краткий ответ: Нет, вы не можете запрашивать данные, которые не указаны в качестве поля определения типа вашего корневого запроса.

Длинный ответ: Хотя это не представляется возможным без добавления поля в корневой запрос, вы можете получить поведение, которое вы ищете только с добавлением tasks запроса с параметром, идентификатор проекта. Затем в вашем клиенте, пока вы запрашиваете projects, не запрашивайте края их задач, а просто отправляйте отдельный запрос tasks(projectId: ID), когда вам это нужно.

В примере GitHunt от apollo они делают то же самое, что и запрос для каждого списка комментариев репо, и даже предваряют данные, когда пользователь наводил курсор на ссылку репо. Это, конечно, полуторное поведение, а не ленивое, поэтому вы можете сделать свой собственный выбор там.

Функции будущего GraphQL позволят вам сделать @stream список задач клиенту, когда они будут готовы, а также @defer любое поле, в котором вы хотите продолжить работу. Возможно, у вашего сценария будет лучшее решение, которое не требует отправки второго запроса.

Для получения дополнительной информации ознакомьтесь с разделом Lee: https://youtu.be/ViXL0YQnioU?t=12m50s