Получить схему со стеком типов-оболочек n-deep
Я получаю данные из базы данных через GraphQL. Есть два типа:Group
а также Person
. У групп есть полеpeople
это список Person
объекты.
Я пытаюсь получить схему с сервера, используя встроенный самоанализ GraphQL. Проблема в том, чтоpeople
field - это тип, не допускающий значения NULL, и тип списка, обертывающий тип, не допускающий значения NULL, и я должен использовать этот многословный запрос:
{
__type(name: "Group") {
name
fields {
name
type {
name
kind
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
}
Чтобы получить эту схему:
{
"data": {
"__type": {
"name": "Group",
"fields": [
{
"name": "people",
"type": {
"name": null,
"kind": "NON_NULL",
"ofType": {
"kind": "LIST",
"name": null,
"ofType": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "OBJECT",
"name": "Person",
"ofType": null
}
}
}
}
}
]
}
}
}
Помимо того, что это неудобный и трудный для чтения запрос, он не является универсальным, и мне нужно было бы знать максимальную глубину типов оболочки в схеме, чтобы построить его.
Есть ли способ получить в схеме все типы оболочек, независимо от глубины?
1 ответ
К сожалению, универсального способа сделать это невозможно. Максимальная глубина отсутствует, поскольку GraphQL поддерживает перенос типа списком произвольное количество раз. Итак, хотя обычно вы будете видеть только
[String!]!
это тоже допустимый тип
[[[[[[[[[[[[String]!]!]!]!]!]!]!]!]!]!]!]!
Вам в значительной степени нужно выбрать разумную глубину и двигаться с ней. Как бы то ни было, вот как выглядит официальный "полный" запрос самоанализа. Он имеет глубину семь.