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

#javascript #graphql #apollo-server

#javascript #graphql #apollo-сервер

Вопрос:

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

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

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

Комментарии:

1. PS хэшируйте свои пароли, дети!

Ответ №1:

Если вы используете 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!

}
  

Комментарии:

1. Это больше не используется по умолчанию, см.: github.com/graphql/graphql-js/blob/master/src/utilities /… — должен быть строковым литералом, например "My description"

2. Таким образом, строковые литералы являются текущими по умолчанию по состоянию на февраль 2018 года.

3. Соответствующая часть спецификации: graphql.github.io/graphql-spec/June2018/#sec-Descriptions

4. Если кто-нибудь ищет, как это сделать в TypeGraphQL, просто используйте description свойство в параметрах декоратора. например. @ObjectType({description:'Here'}) . То же самое для @Field({description:...}, @Arg and @Query

Ответ №2:

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

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

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

Комментарии:

1. Очень полезно спасибо — я долго искал ответ и боролся с множеством старых проблем — когда ответ был таким простым! 🙂

2. Да, мне тоже потребовалось некоторое время, чтобы найти. TYVM!

3. Я использую graphql 0.12.3, и это не работает для меня. Описание всегда равно нулю, используя приведенный выше код.

Ответ №3:

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

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

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