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

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

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

В graphiql есть поле описания, но оно всегда говорит «самоописательное». Как добавить описания к схеме?


person derekdreery    schedule 10.10.2016    source источник
comment
PS хеш-пароли ребята!   -  person derekdreery    schedule 11.10.2016


Ответы (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!

}
person davidyaha    schedule 10.10.2016
comment
Это больше не по умолчанию, см .: github .com / graphql / graphql-js / blob / master / src / utilities / - должен быть строковым литералом, например "My description" - person Casey; 10.01.2018
comment
Таким образом, строковые литералы являются текущим значением по умолчанию с февраля 2018 года. - person Vincent Cantin; 23.02.2018
comment
Соответствующая часть спецификации: graphql.github.io/graphql-spec/June2018/ # sec-Description - person Sampo; 15.04.2019
comment
Если кто-то ищет, как это сделать в TypeGraphQL, просто используйте свойство description в параметрах декоратора. например. @ObjectType({description:'Here'}). То же самое для @Field({description:...}, @Arg and @Query - person 3nuc; 11.09.2019

Это большой вопрос! И на самом деле имеет великую историю в 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"
            }
          ]
        },
      ]
    }
  }
}

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

Надеюсь, это поможет!

person Josh Black    schedule 10.10.2016
comment
Очень полезное спасибо - я долго искал ответ и боролся с множеством старых проблем - когда ответ был таким простым! :) - person derekdreery; 11.10.2016
comment
Да, мне тоже потребовалось время, чтобы найти. TYVM! - person DJC; 12.07.2017
comment
Я использую graphql 0.12.3, и у меня это не работает. Описание всегда равно нулю, используя приведенный выше код. - person Casey; 10.01.2018

Если вы используете реализацию Java ....

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

Строковые литералы недействителен синтаксисом в версии 7.0.

person Fabian    schedule 29.01.2018