This library helps you generate GraphQL Schema (also called GraphQL DSL or SDL) based on Introspection Query response. It's useful when you use graphql-java and Code First approach and want to migrate to Schema First approach.
-
Download Command Line Tool from releases page.
-
Run
java -jar graphql-schema-from-introspection-generator-cli-X.X.X.jar input.json output.graphqls
File input.json should contain the output of GrpahQL Introspection query. If you don't have this file yet, you can use one from: core/src/test/resources/testdata/
-
In output.graphqls you will find generated GraphQL Schema.
-
Run your application.
-
Run
Introspection Query
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 } } } } } } } }
This query based on Introspection Queries in graphql-java and GraphiQL projects.
-
Store result in a file and use Command Line tool for generating the schema (See: How to use it?).
Release notes: docs/release-notes.md
- Clone repo
- Run
./gradlew build
- You can find Command Line Tool in cli/build/libs
- You can find core library in core/build/libs
You can use the core library in your projects if you want. Just add a dependency (in Gradle):
compile group: 'io.github.mstachniuk', name: 'graphql-schema-from-introspection-generator-core'
Please Send PR's, issues and feedback via GitHub.
During finishing this project I found that similar tool already exists in
graphql-java project, see IntrospectionResultToSchema
class.
Another possibility is to use graphql-js and this code snippet (NodeJS):
const graphql = require("graphql");
const schema = require("path/to/schema.json");
const clientSchema = graphql.buildClientSchema(schema.data);
const schemaString = graphql.printSchema(clientSchema);
console.log(schemaString)
Unfortunately, I didn't know that before :-(