Получить весь запрос схемы GraphQL

Я хочу получить схему с сервера. Я могу получить все сущности с типами, но я не могу получить свойства.

Получение всех типов:

query {
  __schema {
    queryType {
      fields {
        name
        type {
          kind
          ofType {
            kind
            name
          }
        }
      }
    }
  }
}

Как получить свойства для типа:

__type(name: "Person") {
    kind
    name
    fields {
      name
      type {
        kind
        name
        description
      }
    }
  }

Как я могу получить все типы со свойствами только в одном запросе? Или все лучше: как я могу получить всю схему с мутаторами, перечислениями, типами...

Ответ 1

Обновить

Использование graphql-cli теперь рекомендуется для получения и обновления вашей схемы.

Следующие команды помогут вам начать:

# install via NPM
npm install -g graphql-cli

# Setup your .graphqlconfig file (configure endpoints + schema path)
graphql init

# Download the schema from the server
graphql get-schema

Вы даже можете прослушивать изменения схемы и постоянно обновлять свою схему, выполнив:

graphql get-schema --watch

Если вы просто хотите загрузить схему GraphQL, используйте следующий подход:

Самый простой способ получить схему GraphQL - использовать инструмент CLI get-graphql-schema.

Вы можете установить его через NPM:

npm install -g get-graphql-schema

Есть два способа получить вашу схему. 1) формат GraphQL IDL или 2) формат запроса самоанализа JSON.

GraphQL IDL формат

get-graphql-schema ENDPOINT_URL > schema.graphql

Формат интроспекции JSON

get-graphql-schema --json ENDPOINT_URL > schema.json

или же

get-graphql-schema -j ENDPOINT_URL > schema.json

Для получения дополнительной информации вы можете обратиться к следующему руководству: Как загрузить схему GraphQL IDL

Ответ 2

Это запрос, который использует GraphiQL (захват сети):

query IntrospectionQuery {
  __schema {
    queryType {
      name
    }
    mutationType {
      name
    }
    subscriptionType {
      name
    }
    types {
      ...FullType
    }
    directives {
      name
      description
      locations
      args {
        ...InputValue
      }
    }
  }
}

fragment FullType on __Type {
  kind
  name
  description
  fields(includeDeprecated: true) {
    name
    description
    args {
      ...InputValue
    }
    type {
      ...TypeRef
    }
    isDeprecated
    deprecationReason
  }
  inputFields {
    ...InputValue
  }
  interfaces {
    ...TypeRef
  }
  enumValues(includeDeprecated: true) {
    name
    description
    isDeprecated
    deprecationReason
  }
  possibleTypes {
    ...TypeRef
  }
}

fragment InputValue on __InputValue {
  name
  description
  type {
    ...TypeRef
  }
  defaultValue
}

fragment TypeRef on __Type {
  kind
  name
  ofType {
    kind
    name
    ofType {
      kind
      name
      ofType {
        kind
        name
        ofType {
          kind
          name
          ofType {
            kind
            name
            ofType {
              kind
              name
              ofType {
                kind
                name
              }
            }
          }
        }
      }
    }
  }
}

Ответ 3

Вы можете использовать запрос интроспекции GraphQL-JS, чтобы получить все, что вы хотели бы узнать о схеме:

import { introspectionQuery } from 'graphql';

Если вам нужна только информация для типов, вы можете использовать это:

{
    __schema: {
        types: {
            ...fullType
        }
    }
}

Что использует следующий фрагмент из запроса интроспекции:

fragment FullType on __Type {
    kind
    name
    description
    fields(includeDeprecated: true) {
      name
      description
      args {
        ...InputValue
      }
      type {
        ...TypeRef
      }
      isDeprecated
      deprecationReason
    }
    inputFields {
      ...InputValue
    }
    interfaces {
      ...TypeRef
    }
    enumValues(includeDeprecated: true) {
      name
      description
      isDeprecated
      deprecationReason
    }
    possibleTypes {
      ...TypeRef
    }
  }
  fragment InputValue on __InputValue {
    name
    description
    type { ...TypeRef }
    defaultValue
  }
  fragment TypeRef on __Type {
    kind
    name
    ofType {
      kind
      name
      ofType {
        kind
        name
        ofType {
          kind
          name
          ofType {
            kind
            name
            ofType {
              kind
              name
              ofType {
                kind
                name
                ofType {
                  kind
                  name
                }
              }
            }
          }
        }
      }
    }
  }
`;

Если это кажется сложным, это связано с тем, что поля могут быть произвольно обернуты в nonNulls и Lists, что означает, что технически даже указанный выше запрос не отражает полную схему, если ваши поля обернуты более чем на 7 слоев (что, вероятно, t случай).

Вы можете увидеть исходный код для introspectionQuery здесь.

Ответ 4

Если вы хотите сделать это сами, прочитайте следующий код:

Существует модульный современный инструмент 「graphql-cli」, рассмотрим его. Он использует пакет 「graphql」 buildClientSchema для создания файла IDG.graphql из интроспективных данных.

Ответ 5

Вы можете скачать схему удаленного сервера GraphQL с помощью следующей команды. Когда команда выполнена успешно, вы должны увидеть новый файл с именем schema.json в текущем рабочем каталоге.

~$ npx apollo-cli download-schema $GRAPHQL_URL --output schema.json

Ответ 6

Вы можете использовать плагин IntelliJ JS GraphQL тогда IDEA попросит вас создать два файла "graphql.config.json" и "graphql.schema.json"

Затем вы можете отредактировать файл "graphql.config.json", чтобы он указывал на ваш локальный или удаленный сервер GraphQL:

"schema": {
"README_request" : "To request the schema from a url instead, remove the 'file' JSON property above (and optionally delete the default graphql.schema.json file).",
"request": {
  "url" : "http://localhost:4000",
  "method" : "POST",
  "README_postIntrospectionQuery" : "Whether to POST an introspectionQuery to the url. If the url always returns the schema JSON, set to false and consider using GET",
  "postIntrospectionQuery" : true,
  "README_options" : "See the 'Options' section at https://github.com/then/then-request",
  "options" : {
    "headers": {
      "user-agent" : "JS GraphQL"
    }
  }
}

После этого плагин IDEA автоматически загрузит схему с сервера GraphQL и покажет схему json в консоли следующим образом:

Loaded schema from 'http://localhost:4000': {"data":{"__schema":{"queryType":{"name":"Query"},"mutationType":{"name":"Mutation"},"subscriptionType":null,"types":[{"kind":"OBJECT","name":"Query","description":"","fields":[{"name":"launche