Как добавить описание в поле " Язык схемы GraphQL"

У меня есть схема graphql, фрагмент которой выглядит так:

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

в graphiql есть поле описания, но оно всегда говорит "self-descriptive". Как добавить описания в схему?

3 ответов


Если вы используете GraphQL.JS версии 0.7.0 или выше, вы можете просто добавить комментарий непосредственно перед полем, типом или аргументом, который вы хотите описать. Например:

# 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!
}

ниже версии 0.7.0 невозможно добавить описания внутри языка схемы.

обновление: начиная с версии версия v0.12.3 вы должны использовать строковые литералы

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

}

это отличный вопрос! И на самом деле имеет большую историю в graphql мире.

было несколько вопросов, обсуждений и запросов на вытягивание на graphql-js РЕПО, который пытался обсудить возможный синтаксис для этого, поскольку это было то, что многие члены сообщества считали необходимым. Спасибо ли Байрону и этот запрос на вытягивание, мы можем фактически добавить описания к языку схемы, используя традиционные комментарии.

для пример,

// 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!
}
`);

и, если мы используем graphql это новее, чем 0.7.0, комментарии фактически превращаются в описание для полей или типов. Мы можем проверить это, выполнив запрос интроспекции в нашей схеме:

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

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

который дал бы нам результат, который выглядит так:

{
  "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"
            }
          ]
        },
      ]
    }
  }
}

и показывает нам, что # комментарии были включены в качестве описаний для полей / комментариев, которые мы их разместили.

надеюсь, что помогает!


в случае, если вы используете Java реализация ....

на graphql-java версия 7.0 (последняя версия на момент написания этой статьи) при первом подходе к схеме вы можете использовать комментарии над полем, типом или аргументом.

строковые литералы are не допустимый синтаксис начиная с версии 7.0.