サーバーからスキーマを取得したい。タイプを持つすべてのエンティティを取得できますが、プロパティを取得できません。
すべてのタイプを取得する:
query {
__schema {
queryType {
fields {
name
type {
kind
ofType {
kind
name
}
}
}
}
}
}
タイプのプロパティを取得する方法:
__type(name: "Person") {
kind
name
fields {
name
type {
kind
name
description
}
}
}
1つのリクエストでプロパティを持つすべてのタイプを取得するにはどうすればよいですか?またはもっと良い方法:ミューテーター、列挙、型でスキーマ全体を取得するにはどうすればよいですか...
更新
graphql-cli
を使用することが、スキーマを取得および更新するための推奨ワークフローです。
次のコマンドを使用すると、開始できます。
# install via NPM
npm install -g graphql-cli
# Setup your .graphqlconfig file (configure endpoints + schema path)
graphql init
# Download the schema from the server
graphql get-schema
次のコマンドを実行して、スキーマの変更をリッスンし、スキーマを継続的に更新することもできます。
graphql get-schema --watch
GraphQLスキーマをダウンロードするだけの場合は、次のアプローチを使用します。
GraphQLスキーマを取得する最も簡単な方法は、CLIツール get-graphql-schema を使用することです。
NPM経由でインストールできます。
npm install -g get-graphql-schema
スキーマを取得するには2つの方法があります。 1) GraphQL IDL formatまたは2)JSONイントロスペクションクエリ形式。
get-graphql-schema ENDPOINT_URL > schema.graphql
get-graphql-schema --json ENDPOINT_URL > schema.json
または
get-graphql-schema -j ENDPOINT_URL > schema.json
詳細については、次のチュートリアルを参照できます。 GraphQL IDLスキーマのダウンロード方法
これは GraphiQL が使用するクエリです(ネットワークキャプチャ):
query IntrospectionQuery {
__schema {
queryType {
name
}
mutationType {
name
}
subscriptionType {
name
}
types {
...FullType
}
directives {
name
description
locations
args {
...InputValue
}
}
}
}
fragment FullType on __Type {
kind
name
description
fields(includeDeprecated: true) {
name
description
args {
...InputValue
}
type {
...TypeRef
}
isDeprecated
deprecationReason
}
inputFields {
...InputValue
}
interfaces {
...TypeRef
}
enumValues(includeDeprecated: true) {
name
description
isDeprecated
deprecationReason
}
possibleTypes {
...TypeRef
}
}
fragment InputValue on __InputValue {
name
description
type {
...TypeRef
}
defaultValue
}
fragment TypeRef on __Type {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
}
GraphQL-JSのイントロスペクションクエリを使用して、スキーマに関するすべての情報を取得できます。
import { introspectionQuery } from 'graphql';
タイプの情報だけが必要な場合は、これを使用できます。
{
__schema: {
types: {
...fullType
}
}
}
イントロスペクションクエリからの次のフラグメントを使用します。
fragment FullType on __Type {
kind
name
description
fields(includeDeprecated: true) {
name
description
args {
...InputValue
}
type {
...TypeRef
}
isDeprecated
deprecationReason
}
inputFields {
...InputValue
}
interfaces {
...TypeRef
}
enumValues(includeDeprecated: true) {
name
description
isDeprecated
deprecationReason
}
possibleTypes {
...TypeRef
}
}
fragment InputValue on __InputValue {
name
description
type { ...TypeRef }
defaultValue
}
fragment TypeRef on __Type {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
}
`;
それが複雑に思えるのは、フィールドが非Nullとリストに深くwrapped意的に包まれている可能性があるためです)。
IntrospectionQuery here のソースコードを確認できます。
apollo cli を使用
apollo schema:download --endpoint=http://localhost:4000/graphql schema.json
IntelliJプラグインJS GraphQL
を使用すると、IDEAは2つのファイル「graphql.config.json」と「graphql.schema.json」の作成を要求します。
次に、「graphql.config.json」を編集して、ローカルまたはリモートのGraphQLサーバーを指すようにします。
"schema": {
"README_request" : "To request the schema from a url instead, remove the 'file' JSON property above (and optionally delete the default graphql.schema.json file).",
"request": {
"url" : "http://localhost:4000",
"method" : "POST",
"README_postIntrospectionQuery" : "Whether to POST an introspectionQuery to the url. If the url always returns the schema JSON, set to false and consider using GET",
"postIntrospectionQuery" : true,
"README_options" : "See the 'Options' section at https://github.com/then/then-request",
"options" : {
"headers": {
"user-agent" : "JS GraphQL"
}
}
}
その後、IDEAプラグインは、GraphQLサーバーからスキーマを自動的にロードし、次のようにコンソールにスキーマjsonを表示します。
Loaded schema from 'http://localhost:4000': {"data":{"__schema":{"queryType":{"name":"Query"},"mutationType":{"name":"Mutation"},"subscriptionType":null,"types":[{"kind":"OBJECT","name":"Query","description":"","fields":[{"name":"launche
自分でやりたい場合は、次のコードを読んでください。
モジュール式の最先端ツール「graphql-cli」がありますので、ご覧ください。パッケージ「graphql」のbuildClientSchemaを使用して、イントロスペクションデータからIDL .graphqlファイルを構築します。
apollo codegen:client
を使用できます。 https://github.com/apollographql/apollo-tooling#apollo-clientcodegen-output を参照してください
次のコマンドを使用して、リモートGraphQLサーバーのスキーマをダウンロードできます。コマンドが成功すると、現在の作業ディレクトリにschema.json
という名前の新しいファイルが表示されます。
~$ npx apollo-cli download-schema $GRAPHQL_URL --output schema.json