如何在GraphQL Java中解析多个模式文件

5

我正在使用Java实现GraphQL。我有几个模式文件需要解析。请问是否有一种方法可以做到这一点。我已经使用了下面的方法,但只能解析一个模式文件。

@Value("classpath:dashboard.graphql")
private Resource schemaResource;

File schemaFile = schemaResource.getFile();
TypeDefinitionRegistry definitionRegistry = new SchemaParser().parse(schemaFile);

假设我有两个模式文件,如 dashboard.graphqlstudent.graphql。那么我们该如何解析这两个文件?
请问是否有人可以给我解释一下?
谢谢

嗨,在Node中,我们使用了库merge-graphql-schemas(https://github.com/okgrow/merge-graphql-schemas)。请检查Java中是否有类似的支持库。 - Seena V P
2个回答

7

我知道这是一个有点老的问题,但是SO的答案出现在官方的GraphQL-java文档之前,所以我想在这里发表一下:

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

File schemaFile1 = loadSchema("starWarsSchemaPart1.graphqls");
File schemaFile2 = loadSchema("starWarsSchemaPart2.graphqls");
File schemaFile3 = loadSchema("starWarsSchemaPart3.graphqls");

TypeDefinitionRegistry typeRegistry = new TypeDefinitionRegistry();

// each registry is merged into the main registry
typeRegistry.merge(schemaParser.parse(schemaFile1));
typeRegistry.merge(schemaParser.parse(schemaFile2));
typeRegistry.merge(schemaParser.parse(schemaFile3));

GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, buildRuntimeWiring());

这是事实...尽管此合并非常有限。它不会合并查询,因此其目的是将您的1个模式拆分成几个部分,而不是合并模式。因此,那样做行不通。实际上,如果您将所有模式连接成一个字符串,并从中创建一个模式,则实际上会得到相同的结果。 - Jeroen van Dijk-Jun
文档链接不可用,请尝试访问此链接:https://www.graphql-java.com/documentation/schema/#type-references-recursive-types - Cat-Lord

0

我们使用 schemaParserBuilder 来完成这个操作:

SchemaParserBuilder parser = SchemaParser.newParser();
parser.files(arrayOfFileNames);//fill the array with the paths to your schema files
//define other properties like resolvers here
GraphQLSchema schema = parser.build().makeExecutableSchema();

如果你需要 TypeDefinitionRegistry 对象,另一个想法是读取所有的模式文件并将它们合并成一个 String,然后使用 schemaParser.parse(String schema)。实际上,parser.files 正是这样做的。

1
当我使用包含多个文件的 .files 时,我的查询对象只显示输入数组中最后一个文件中的内容,你是否遇到过这种情况? - AK824

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接