【问题标题】:GraphQL Schema Definition Language support in graphql-javagraphql-java 中的 GraphQL 模式定义语言支持
【发布时间】:2017-10-21 22:14:01
【问题描述】:

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

是否有任何可能的方式在 graphql-java 中使用 GraphQL 模式定义语言支持?如果是,那怎么可能?

【问题讨论】:

    标签: graphql graphql-java


    【解决方案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) 为可执行的schema

    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 中找到更详细的示例。

    【讨论】:

    • 感谢您的回复。我也试过这个,但是他们在 maven 存储库中提供的最新 jar 不支持这个。我认为这是由于最新的 jar 中缺少某些代码。 SchemaGenerator 文件不受支持。你能验证一下吗?
    • 它适用于最新版本 3.0.0。确保你有这个版本。也许之前明确运行mvn clean
    • 有没有人知道idl里能不能用cmet和descriptions?
    猜你喜欢
    • 2018-08-23
    • 2019-02-07
    • 2017-06-24
    • 2019-11-15
    • 1970-01-01
    • 2021-12-23
    • 2020-03-16
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多