Получить схему со стеком типов-оберток n-deep

Я получаю данные из базы данных через GraphQL. Есть два типа: Group и Person. В группах есть поле people, которое представляет собой список Person объектов.

Я пытаюсь получить схему с сервера, используя встроенный самоанализ GraphQL. У меня проблема в том, что поле people является типом, не допускающим значения 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
                                }
                            }
                        }
                    }
                }
            ]
        }
    }
}

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

Есть ли способ получить в схеме все типы оболочки, независимо от глубины?


person Sandy Gifford    schedule 08.05.2020    source источник


Ответы (1)


К сожалению, универсального способа сделать это невозможно. Максимальная глубина отсутствует, потому что GraphQL поддерживает перенос типа списком произвольное количество раз. Так что, хотя обычно вы будете видеть только

[String!]!

это тоже допустимый тип

[[[[[[[[[[[[String]!]!]!]!]!]!]!]!]!]!]!]!

Вам в значительной степени нужно выбрать разумную глубину и двигаться с ней. Как бы то ни было, это то, что официальный "полный" запрос самоанализа выглядит так. Он имеет глубину семь.

person Daniel Rearden    schedule 08.05.2020
comment
Тем не менее, вы можете превратить результат интроспекции в GraphQLSchema object и работайте с ним, если вам нужен более простой способ синтаксического анализа типов, полей и т. д. - person Daniel Rearden; 08.05.2020