Tudo que esta ese projeto pode ser encontrado без репозитория GitHub .
Для нашего доу, что мы делали, было сначала поймать.
Введение в проект
Esse projeto já foi контекстуализадо нет dev.to . В основном то, что он делает поймать использовать get api находится в https://randomuser.me/api и применяется GraphQL в ответ.
GRAPHQL На Кварках
Службы
Для использования GraphQL в данном проекте мы используем зависимость Vert.x , полный комплект документации, вы можете найти здесь для импорта, просто добавьте в свой pom.xml
io.vertx vertx-web-graphql
Давайте для кода
Перед тем, как использовать GraphQL мы должны моделировать некоторые DTO’s для нашей моделирования:
public class Names {
private String title;
private String first;
private String last;
// Getters and Setters
}
Для этой модели нужно будет учитываться Fetcher, который должен стоять следующим образом:
public class UserFetcher implements DataFetcher> { private final UserClient userClient; public UserFetcher(UserClient userClient) { this.userClient = userClient; } private Results getResult() { return userClient.getUsers(); } @Override public List
get(DataFetchingEnvironment environment) throws Exception { return getResult().getResults(); } }
Producer
Чтобы получить результаты, мы должны будем также класса, producer, как показано ниже, это немного boilerplate, я пытаюсь сделать расширение quarkus, чтобы уменьшить этот и другие части, которые являются повторяющимися, в то время как этого не происходит, класс выглядит следующим образом:
public class GraphQLProducer {
private Logger LOGGER = LoggerFactory.getLogger(GraphQLProducer.class);
@RestClient
@Inject
private UserClient userClient;
@Produces
public GraphQL setup() {
LOGGER.info("Setting up GraphQL..");
SchemaParser schemaParser = new SchemaParser();
TypeDefinitionRegistry registry = schemaParser.parse(
new InputStreamReader(
Objects.requireNonNull(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("META-INF/resources/graphql.schema"))));
SchemaGenerator schemaGenerator = new SchemaGenerator();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(registry, wirings());
return GraphQL.newGraphQL(graphQLSchema).build();
}
private RuntimeWiring wirings() {
LOGGER.info("Wiring queries..");
return RuntimeWiring.newRuntimeWiring()
.type("Query",
builder -> builder.dataFetcher("allUsers", new UserFetcher(userClient)))
.build();
}
}
Na parte de getResourceAsStream() você colocao схема де graphml que você desejar, без носсо коко фику о МЕТА-ИНФОРМАЦИЯ/ресурсы/graphql.схема
type Names {
first: String
last: String
}
type User {
email: String
name: Names
gender: String
phone: String
cell: String
nat: String
}
type Query {
allUsers : [User]
}
Кроме того, в части wirings() ставим, кто будет Fetcher, который будет использоваться для allUsers , который был объявлен в рамках graphql.schema
Отделочные мы должны объявить часть Маршрутов (другая часть, которая является немного boilerplate, который также может войти в расширение).
@ApplicationScoped
public class Routes {
@Inject
GraphQL graphQL;
public void init(@Observes Router router) {
boolean enableGraphiQL = true;
router.route("/graphql")
.handler(new GraphQLHandlerImpl(graphQL, new GraphQLHandlerOptions()));
router.route("/graphiql/*").handler(
GraphiQLHandler.create(new GraphiQLHandlerOptions().setEnabled(enableGraphiQL)));
}
}
Были объявлены два маршрута:
/graphql→ где хранятся все “концы” для доступа пользователей/graphiql/*→, где находится документация на который был зарегистрирован.
## Заключение Резюмируя все, что мы сделали, не очень сложно, после первого раза, но не хватает много документации, и несколько раз видел места, показывающие, как если бы это было через волшебную, как сделать отеле и уже работает. После многих испытаний хорошо работает, но как я уже сказал, есть много частей, которые могут быть удалены с расширением более полный.
Другое дело, что стало очень темно, и сложно являются заголовки, как authorização не очень просто манипулировать и сделать некоторые проверки с ними.
С ней вообще не думаю хороший вариант, сравнивая с тем, что уже есть в Spring Boot, в этом случае еще не созрела достаточно, но, конечно, не очень далеко, и, легко видеть, как приходят в этот момент.
## Хотите идти в ногу немного больше? Следуй за мной на платформах._
GitHub: луис лейте-hotmart
Твиттер: луис лейте_
Подергивание: код coffee_and_code
Linkedin: луис лейте оливейра
dev.to: луис лейте_
Оригинал: “https://dev.to/luizleite_/graphql-no-quarkus-1jk7”