Получить весь запрос схемы 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
Ответ 7
Вы можете использовать apollo codegen:client
. См. Https://github.com/apollographql/apollo-tooling#apollo-clientcodegen-output.