web-dev-qa-db-ja.com

「GraphQLスキーマ言語」のフィールドに説明を追加する方法

Graphqlスキーマがあり、そのフラグメントは次のようになります。

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

Graphiqlには説明フィールドがありますが、常に「自己記述的」と表示されます。スキーマに説明を追加するにはどうすればよいですか?

50
derekdreery

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.からstring literalsを使用する必要があります

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

}
93
davidyaha

これは素晴らしい質問です!実際、graphqlの世界には素晴らしい歴史があります。

graphql-jsリポジトリには複数の問題、議論、プルリクエストがあり、コミュニティの多くのメンバーが必要だと感じていたため、このための可能な構文を議論しようとしました。 Lee Byronと this Pull Request のおかげで、実際に従来のコメントを使用してスキーマ言語に説明を追加できます。

例えば、

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

また、0.7.0よりも新しいgraphqlを使用している場合、コメントは実際にはフィールドまたはタイプの説明に変換されます。これを確認するには、スキーマでイントロスペクションクエリを実行します。

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

また、#コメントが、フィールド/コメントの説明として組み込まれたことを示しています。

お役に立てば幸いです!

9
Josh Black

Java実装を使用している場合....

ために graphql-Javaバージョン7.0(この記事を書いている時点での最新バージョン)でスキーマを最初に使用する方法では、フィールド、タイプ、または引数の上でcommentsを使用できます。

文字列リテラルnotバージョン7.0以降の有効な構文です。

6
Fabian