GraphQL-java中的GraphQL模式定义语言支持

时间:2017-05-22 09:46:37

标签: graphql graphql-java

嗨,我是graphql的新手,特别是graphql-java。

有没有可能的方法在graphql-java中使用GraphQL Schema Definition Language支持?如果是,那怎么可能呢?

1 个答案:

答案 0 :(得分:1)

是的,可以从release 3.0.0开始。

schema {
    query: QueryType
}

type QueryType {
    hero(episode: Episode): Character
    human(id : String) : Human
    droid(id: ID!): Droid
}

您可以转换以下 IDL-File (starWarsSchema.graphqls)为可执行的架构,如下所示:

SchemaParser schemaParser = new SchemaParser();
SchemaGenerator schemaGenerator = new SchemaGenerator();

File schemaFile = loadSchema("starWarsSchema.graphqls");

TypeDefinitionRegistry typeRegistry = schemaParser.parse(schemaFile);
RuntimeWiring wiring = buildRuntimeWiring();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, wiring);

此外,您必须实施buildRuntime功能,以便使用解析器连接静态架构。

RuntimeWiring buildRuntimeWiring() {
    return RuntimeWiring.newRuntimeWiring()
            .scalar(CustomScalar)
            .type("QueryType", typeWiring -> typeWiring
                    .dataFetcher("hero", new StaticDataFetcher(StarWarsData.getArtoo()))
                    .dataFetcher("human", StarWarsData.getHumanDataFetcher())
                    .dataFetcher("droid", StarWarsData.getDroidDataFetcher())
            )
            .build();
}

您可以在graphql-java documentation中找到更详细的示例。