Рубрики
Без рубрики

API-интерфейсы GraphQL с кварками

Язык запросов для вашего API В этой статье я покажу вам поддержку Quarks GraphQL. В качестве примера,… Помеченный как java, graphql.

Язык запросов для вашего API

В этой статье я покажу вам поддержку Quarks GraphQL. В качестве примера я использую приложение Superheroes из моих предыдущих статей. Мы обсудим некоторые темы GraphQL.

Код, зависимости и модель

Исходный код этого приложения доступен по адресу Github . Если хотите, вы можете попробовать примеры самостоятельно. В качестве зависимостей я включил, например, Small Rye GraphQL и lombok. Здесь вы можете подробно ознакомиться с pom.xml файл.

Quarks помогает вам создавать API GraphQL. Будет сгенерирована схема GraphQL. Вам просто нужно определить свою модель. Здесь я покажу вам в качестве примера объект передачи данных Супергероя. Я использую DTO для предоставления данных из API. Lombok @Data заботится о getter, setter, toString, а также о методах equals и hashCode.

import lombok.Data;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class Superhero {

    String name;
    City city;

}

Выборка данных

Чтобы запросить все города, вам просто нужно отправить такую команду в графический интерфейс http://localhost:8080/q/graphql-ui/ .

{
    allCities {
        name
    }
}

А с GraphQL довольно легко извлекать графики объектов. Например, мы могли бы запросить город с их супергероями, как это.

query getCity {
     city(cityId: 0) {
         name
         symbol
         superheroes {
             name
         }
     }
 }

Распознаватель и мутации на стороне сервера

Распознаватель отвечает за определение запросов. Все запросы находятся в Superhero Resolver .

@GraphQLApi
public class SuperheroResolver {

    @Inject
    SuperheroService superheroService;

    @Query("allCities")
    @Description("Get all cities.")
    public List getAllCities() {
        return superheroService.getAllCities();
    }
 ...
}

Я отделил мутации от запросов. Мутации – это операции записи, такие как создание, обновление или удаление. Вот как работает метод create() из Superhero Mutation с вводом Superhero в качестве объекта ввода.

@GraphQLApi
public class SuperheroMutation {

    @Inject
    SuperheroService superheroService;

    @Mutation
    public Superhero createSuperhero(@Name("superhero") SuperheroInput superheroInput) {
        var superhero = new Superhero(superheroInput.getName(), superheroInput.getCity());
        superheroService.addSuperhero(superhero);
        return superhero;
    }
...
}

Тестирование API GraphQL

Довольно круто, что Quarks автоматически генерирует схему GraphQL на основе вашего исходного кода. Чтобы отобразить схему, просто вызовите http://localhost:8080/graphql/schema.graphql . Здесь я хочу быстро показать вам, как писать автоматические тесты. Как мы тестируем GraphQL API? А вот и Будьте уверены на помощь. Вы можете писать тесты так, как вы уже знаете из REST.

@QuarkusTest
public class SuperheroTest {

    @Test
    void allCities() {
        final Response response = given()
                .contentType(ContentType.JSON)
                .body("{\"query\":\"{\\n allCities{\\n name\\n}\\n}\"}")
                .when()
                .post("/graphql")
                .then()
                    .assertThat()
                    .statusCode(200)
                .and()
                    .extract()
                    .response();

        final List allCities = response.jsonPath().getList("data.allCities", City.class);
        assertThat(allCities)
                .isNotEmpty()
                .hasSize(2)
                .extracting(City::getName)
                .contains("Gotham City", "New York City");
    }

}

Вывод

Мне нравится поддержка GraphQL от Quarks. Здорово, что схема GraphQL генерируется автоматически с помощью кода и аннотаций. В следующей части я покажу вам, как протестировать GraphQL API с помощью curl, инструмента GraphiQL и insomnia.

Фото автора Рафаэль Бискальди один Разблокировка

Ссылки https://github.com/claudioaltamura/quarkus-graphql-superheroes

Ссылки || https://github.com/claudioaltamura/quarkus-graphql-superheroes

Ссылки || https://github.com/claudioaltamura/quarkus-graphql-superheroes

Оригинал: “https://dev.to/claudioaltamura/graphql-apis-with-quarkus-3a6e”