У меня древовидная структура. Скажем, Папка, например.
Как запрашивать вложенные запросы на уровне 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 не позволяет динамически запрашивать такую рекурсивную структуру на всех уровнях. Вы должны явно указать, сколько уровней вы хотите запросить. Например, запрос на 4 уровня вниз выглядит следующим образом:
query ($folderId: Int!) {
folder(folderId: $folderId) {
id
name
children {
id
name
children{
id
name
children{
id
name
}
}
}
}
}
Вы можете использовать fragment, чтобы уменьшить дублирование в этом запросе. Подробнее см. это.
Ой. теперь эта первая строка действительно расстраивает. Я понятия не имею, сколько вложенных уровней существует со стороны клиента.