Язык запросов для вашего 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 ListgetAllCities() { 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 ListallCities = 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”