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 ...
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.
get-graphql-schema ENDPOINT_URL > schema.graphql
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
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
}
}
}
}
}
}
}
}
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 .
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.
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
en utilisant apollo cli
apollo schema:download --endpoint=http://localhost:4000/graphql schema.json
Vous pouvez utiliser apollo codegen:client
. Voir https://github.com/apollographql/apollo-tooling#apollo-clientcodegengenoutout
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