В приложении Spring Boot у нас уже есть полнофункциональная конечная точка GraphQL, обслуживающая файлы .graphqls
с помощью GraphQL Java Tools (мы включили зависимость graphql-spring-boot-starter
) и обрабатывающая разрешение данных через наш базовый класс Query
реализация GraphQLQueryResolver
и последующих GraphQLResolver
.
Для бизнес-целей нам необходимо заново создать стандартные конечные точки API REST, поэтому я удивляюсь, почему бы просто не вызывать GraphQL (вместо-произвести «вручную» разрешение данных еще раз)? И поскольку он находится в одном и том же бэкэнд-приложении, нет необходимости делать HTTP или сервлет (ForwardRequest) вызовы, просто вызовите некоторые API в Java. Дело в том, что я не знаю, как поступить.
Я читал этот пример, но он с базовым GraphQL Java (не Tools): https://www.graphql -java.com / documents / v9 / execute/
Я знаю, что это возможно, потому что нам разрешено делать это в тестах: https://github.com/graphql-java-kickstart/graphql-spring-boot/blob/master/example-graphql-tools/src/test/java/com/graphql/sample/boot/GraphQLToolsSampleApplicationTest.java
Но как это сделать в обычном коде? Нет такой вещи как GraphQLTemplate
.
. Я также пытался искать примеры по адресу:
, но не нашел ничего, что соответствовало бы нашим потребностям.
Больше ничего не нашел в документации:
Что я пропустил? В идеале я хочу ввести немного GraphQLSomething
, например:
@RestController
@RequestMapping(path = "api")
public class CompanyController {
@Autowired
private GraphQLSomething graphQLSomething;
@GetMapping("company/{id}")
public ResponseEntity<?> societe(@PathVariable @NotNull Integer id) {
GraphQLSomethingResult result = GraphQLSomething.query("company(id: $id) { id name andsoone }", "{ \"id\": 123456 }").execute(); // not really sure of the GraphQL syntax here, but it'll need some tests...
return result.getDataOrElse();
}
}