Получить схему со стеком типов-оберток n-deep - PullRequest
1 голос
/ 08 мая 2020

Я получаю данные из базы данных через 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
                            }
                        }
                    }
                }
            }
        }
    }
}

Чтобы получить это schema:

{
    "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
                                }
                            }
                        }
                    }
                }
            ]
        }
    }
}

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

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

1 Ответ

1 голос
/ 08 мая 2020

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

[String!]!

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

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

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

...