web-dev-qa-db-fra.com

Obtenir la requête de schéma complet GraphQL

Je souhaite obtenir le schéma du serveur .. Je peux obtenir toutes les entités avec les types mais je ne parviens pas à obtenir les propriétés.

Obtenir tous les types:

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

Comment obtenir les propriétés pour le type:

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

Comment puis-je obtenir tous les types avec les propriétés en une seule demande? Ou encore mieux: comment obtenir le schéma complet avec les mutateurs, les énumérations, les types ...

31
Aleksandrenko

Mettre à jour

Utiliser graphql-cli est maintenant le flux de travail recommandé pour obtenir et mettre à jour votre schéma.

Les commandes suivantes vous aideront à démarrer:

# 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

Vous pouvez même écouter les modifications de schéma et mettre à jour votre schéma en continu en exécutant:

graphql get-schema --watch

Si vous souhaitez simplement télécharger le schéma GraphQL, utilisez l’approche suivante:

La méthode la plus simple pour obtenir un schéma GraphQL consiste à utiliser l'outil CLI get-graphql-schema .

Vous pouvez l'installer via NPM: 

npm install -g get-graphql-schema

Il y a deux façons d'obtenir votre schéma. 1) GraphQL IDL format ou 2) Format de requête d'introspection JSON.

Format GraphQL IDL

get-graphql-schema ENDPOINT_URL > schema.graphql

Format d'introspection JSON

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

ou

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

Pour plus d'informations, vous pouvez vous reporter au tutoriel suivant: Comment télécharger le schéma GraphQL IDL

43
schickling

C'est la requête que GraphiQL utilise (capture du réseau):

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
              }
            }
          }
        }
      }
    }
  }
}
14
James Carnegie

Vous pouvez utiliser la requête d'introspection de GraphQL-JS pour obtenir tout ce que vous souhaitez savoir sur le schéma:

import { introspectionQuery } from 'graphql';

Si vous voulez seulement les informations pour les types, vous pouvez utiliser ceci:

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

Qui utilise le fragment suivant de la requête d'introspection:

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
                }
              }
            }
          }
        }
      }
    }
  }
`;

Si cela semble compliqué, c’est que les champs peuvent être l’arbitraire profondément enveloppés dans des listes non nulles et non significatives, ce qui signifie que même la requête ci-dessus ne reflète techniquement pas le schéma complet si vos champs sont encapsulés dans plus de 7 couches (ce qui n’est probablement pas le cas). ).

Vous pouvez voir le code source de introspectionQuery ici .

9
helfer

Si vous voulez le faire vous-même, lisez le code suivant:

Il existe un outil modulaire à la pointe de la technologie, appelé graphql-cli, que vous devriez examiner. Il utilise buildClientSchema du package 「graphql」 pour créer le fichier IDL .graphql à partir de données d'introspection.

0
林东吴

Vous pouvez utiliser le plugin IntelliJ JS GraphQL puis IDEA vous demandera de créer deux fichiers "graphql.config.json" et "graphql.schema.json".

Ensuite, vous pouvez éditer "graphql.config.json" pour qu'il pointe vers votre serveur GraphQL local ou distant:

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

Après cela, le plugin IDEA chargera automatiquement le schéma à partir du serveur GraphQL et affichera le schéma json dans la console comme ceci:

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
0
sendon1982

en utilisant apollo cli

apollo schema:download --endpoint=http://localhost:4000/graphql schema.json
0
has19
0
Klas Mellbourn

Vous pouvez télécharger le schéma d'un serveur GraphQL distant avec la commande suivante. Lorsque la commande aboutit, vous devriez voir un nouveau fichier nommé schema.json dans le répertoire de travail en cours.

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

0
Wil Moore III