86 votes

Comment ajouter une description à un champ dans "GraphQL schema language" ?

J'ai un schéma graphql, dont un fragment ressemble à ceci :

type User {
    username: String!
    password: String!
}

Dans graphiql, il y a un champ de description, mais il indique toujours "auto-descriptif". Comment puis-je ajouter des descriptions au schéma ?

6 votes

PS : hachurez vos mots de passe les enfants !

167voto

davidyaha Points 936

Si vous utilisez GraphQL.js version 0.7.0 ou supérieure, vous pouvez simplement ajouter un commentaire directement avant le champ, le type ou l'argument que vous souhaitez décrire. Par exemple :

# A type that describes the user
type User {
     # The user's username, should be typed in the login field.
     username: String!
     # The user's password.
     password: String!
}

En dessous de la version 0.7.0, il n'est pas possible d'ajouter des descriptions dans le langage du schéma.

MISE À JOUR : depuis la version v0.12.3 vous devez utiliser littéraux de chaîne de caractères

"""
A type that describes the user. Its description might not 
fit within the bounds of 80 width and so you want MULTILINE
"""
type User {
     "The user's username, should be typed in the login field."
     username: String!
     "The user's password."
     password: String!

}

6 votes

Ce n'est plus le cas par défaut, voir : github.com/graphql/graphql-js/blob/master/src/utilities/ -- devrait être une chaîne littérale comme "My description"

1 votes

Les littéraux de chaîne sont donc la valeur par défaut actuelle en février 2018.

0 votes

Partie pertinente de la spécification : graphql.github.io/graphql-spec/June2018/#sec-Descriptions

18voto

Josh Black Points 558

C'est une excellente question ! Et a en fait une grande histoire dans graphql monde.

Il y a eu de multiples problèmes, discussions et demandes de téléchargement sur le site Web de la Commission européenne. graphql-js qui a essayé de discuter d'une syntaxe possible pour cela, car c'est quelque chose que beaucoup de membres de la communauté ont estimé nécessaire. Merci à Lee Byron et cette Pull Request En fait, nous pouvons ajouter des descriptions à un langage de schéma en utilisant les commentaires traditionnels.

Par exemple,

// Grab some helpers from the `graphql` project
const { buildSchema, graphql } = require('graphql');

// Build up our initial schema
const schema = buildSchema(`
schema {
  query: Query
}

# The Root Query type
type Query {
  user: User
}

# This is a User in our project
type User {
  # This is a user's name
  name: String!

  # This is a user's password
  password: String!
}
`);

Et, si nous utilisons graphql qui est plus récent que 0.7.0 les commentaires sont en fait transformés en description des champs ou des types. Nous pouvons le vérifier en exécutant une requête d'introspection sur notre schéma :

const query = `
{
  __schema {
    types {
        name
        description,
        fields {
            name
            description
        }
    }
  }
}
`;

graphql(schema, query)
  .then((result) => console.log(result));

Ce qui nous donnerait un résultat qui ressemble à :

{
  "data": {
    "__schema": {
      "types": [
        {
          "name": "User",
          "description": "This is a User in our project",
          "fields": [
            {
              "name": "name",
              "description": "This is a user's name"
            },
            {
              "name": "password",
              "description": "This is a user's password"
            }
          ]
        },
      ]
    }
  }
}

Et nous montre que le # ont été incorporés comme descriptions des champs/commentaires sur lesquels nous les avons placés.

J'espère que cela vous aidera !

1 votes

Merci pour cette aide précieuse. J'ai cherché pendant longtemps une réponse, et je me débattais avec de nombreux vieux problèmes, alors que la réponse était si simple ! :)

0 votes

Oui, ça m'a pris un moment pour le trouver aussi. TYVM !

0 votes

J'utilise graphql 0.12.3 et cela ne fonctionne pas pour moi. La description est toujours nulle en utilisant le code ci-dessus.

8voto

Fabian Points 1064

Dans le cas où vous utilisez un Java mise en œuvre ....

Pour graphql-java version 7.0 (la dernière version au moment de la rédaction de cet article) avec une approche basée sur les schémas. commentaires au-dessus du champ, du type ou de l'argument.

Littéraux de chaîne de caractères son no syntaxe valide à partir de la version 7.0.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X