Вложенный запрос к неизвестному уровню GraphQL

У меня древовидная структура. Скажем, Папка, например.

Как запрашивать вложенные запросы на уровне N с помощью GraphQL.

Давайте возьмем пример, поскольку у меня есть следующие свойства в классе.

public class DocumentField
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public List<DocumentField> Children { get; set; }
    }

Серверная часть разработана таким образом, что если там есть дочерние элементы, они будут включены в качестве дочерних. Но слой graphql ограничивает его, потому что мой следующий запрос.

Следующий запрос не принесет результатов детей.

query ($folderId: Int!) {
                              folder(folderId: $folderId) {
                                id,
                                name
                              }
                            }

Следующий запрос дает ошибку: вложенный запрос Дочерние поля типа DocumentFieldICollection должны иметь вложенный выбор

query ($folderId: Int!) {
                          folder(folderId: $folderId) {
                            id,
                            name,
                            children
                          }
                        }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
5
0
3 265
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

GraphQL не позволяет динамически запрашивать такую ​​рекурсивную структуру на всех уровнях. Вы должны явно указать, сколько уровней вы хотите запросить. Например, запрос на 4 уровня вниз выглядит следующим образом:

query ($folderId: Int!) {
  folder(folderId: $folderId) {
    id
    name
    children {
       id 
       name
       children{
          id
          name
          children{
            id
            name
          }
       }
    }
  }
 }

Вы можете использовать fragment, чтобы уменьшить дублирование в этом запросе. Подробнее см. это.

Ой. теперь эта первая строка действительно расстраивает. Я понятия не имею, сколько вложенных уровней существует со стороны клиента.

Anonymous Creator 26.05.2019 18:09

Другие вопросы по теме