Как разобрать несколько файлов схемы в GraphQL Java

Я использую GraphQL с java. У меня есть несколько файлов схемы для анализа. Может кто-нибудь, пожалуйста, дайте мне знать, есть ли способ сделать это. Я использовал приведенный ниже способ, который позволяет анализировать только один файл схемы.

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

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

Предположим, у меня есть два файла схемы, такие как dashboard.graphql и student.graphql. Тогда как мы можем разобрать эти два файла?

Кто-нибудь может объяснить мне.

Спасибо


person Kepler    schedule 04.10.2017    source источник
comment
Привет, В узле мы используем библиотеку merge-graphql-schemas(github.com/okgrow/merge- graphql-схемы). Проверьте, есть ли в java какая-либо поддерживающая библиотека, подобная этой.   -  person Seena V P    schedule 04.10.2017


Ответы (2)


Я знаю, что это старый вопрос, но ответ 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());
person Doctor Eval    schedule 28.09.2018
comment
Это правда... хотя это слияние очень ограничено. Он не объединяет запросы, поэтому его цель - разбить вашу 1 схему на биты, но не объединять схемы. Следовательно, это не работает. На самом деле, если вы объедините все схемы в одну строку и сделаете из нее одну схему, вы получите тот же результат. - person Jeroen van Dijk-Jun; 11.05.2021

мы сделали это так, используя 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 делает именно это.

person svensemilia    schedule 04.10.2017
comment
когда я использую .files с несколькими файлами, мой объект запроса всегда отображается только из последнего файла, введенного в массив, есть ли шанс, что вы столкнулись с этим? - person AK824; 23.02.2018