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

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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?

以上是关于graphql-java 中的 GraphQL 模式定义语言支持的主要内容,如果未能解决你的问题,请参考以下文章

graphql-java 中的模拟 api 响应

如何在 Graphql-Java 中处理运行时多态性

使用 graphql-java 构建 Relay GraphQL 服务器

graphql-java:如何在以编程方式生成 graphql 模式时添加自定义标量类型?

突变查询 graphql-java

Maven 和 graphql-java