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

Весенняя Загрузка С GraphQL: Что Делают Крутые Ребята

В этой статье мы познакомим вас с Spring Boot с помощью GraphQL. Мы пройдемся по простому пиву… С тегами spring boot, graphql, java, rest.

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

Итак, вы создали этот действительно приятный API со всеми получает , помещает и удаляет вы можете подумать. Ваш ребенок просто прекрасен таким, какой он есть, верно? Ну, может быть, разработчик Джо думает, что ваш ребенок толстый.

что?!

Спокойные звонки, которые у вас есть, возвращают слишком много информации. В других сценариях звонков недостаточно, и ваш ребенок остается плачущим, потому что ему нужно больше играть.

Что ж, вот тут-то и проявляется мощь GraphQL.

График – Что?

Новичок в блоке запросов API называется GraphQL. Хорошо, но что это такое? Ну, определение, взятое непосредственно с сайта GraphQL , является:

“GraphQL – это язык запросов для API и среда выполнения для выполнения этих запросов с вашими существующими данными. GraphQL предоставляет полное и понятное описание данных в вашем API, дает клиентам возможность запрашивать именно то, что им нужно, и ничего больше, упрощает разработку API с течением времени и предоставляет мощные инструменты для разработчиков”.

Ага. Здорово. Но что это такое?

GraphQL – это инструмент, который позволяет вам получать то, что вы хотите, и только то, что вы хотите, из вашего существующего API. Вы можете устранить то, что вам не нужно или о чем вы не заботитесь при реализации. Он также может предложить одно место, один звонок, чтобы присоединиться к тому, что в противном случае было бы несколькими вызовами REST для получения одной и той же информации. GraphQL может значительно ускорить производительность и упростить кодирование.

Вот видео-введение в GraphQL , а также еще немного информации о том, почему это круто и что вы можете с этим сделать.

Не В Этой Статье

В этой статье не будет подробного объяснения Spring Boot (или полной удивительности Spring Boot). Мы также будем избегать споров об использовании разработки для и против нее по сравнению с такими вещами, как NodeJS или .NET.

Тем не менее, в этой статье предполагается, что вы, по крайней мере, уже знакомы с Spring Boot и Java. Это больше о том, как вы можете быть частью “крутой” толпы и внедрять GraphQL в свой Java-проект.

Давайте Приукрасим Ваш GraphQL Ребенок с пружинным ботинком

Прежде всего, у вас должен быть либо существующий API, встроенный в Spring Boot, либо вы можете удобно использовать приложение Beer, представленное в конце этой статьи.

Затем вам нужно будет добавить их в свой pom, если их там еще нет.

        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            com.graphql-java-kickstart
            graphql-spring-boot-starter
            7.0.1
        
        
        
            com.graphql-java-kickstart
            graphiql-spring-boot-starter
            7.0.1
            runtime
        
        
            org.postgresql
            postgresql
            runtime
        


Затем в файле application.properties добавьте следующее:

graphql.servlet.mapping=/graphql
graphql.servlet.enabled=true
graphql.servlet.exception-handlers-enabled= true
graphql.servlet.contextSetting= PER_REQUEST_WITH_INSTRUMENTATION
# GraphiQL (not GraphQL!)
graphiql.mapping= /graphiql
graphiql.endpoint.graphql= /graphql
graphiql.static.basePath= /
graphiql.enabled= true
graphiql.pageTitle= GraphiQL
graphiql.props.resources.defaultQuery= schema.graphqls
graphiql.props.variables.editorTheme= "solarized light"

Эти настройки сообщают GraphQL, где все настроено. Graphql – это графический интерфейс, который вы можете использовать для тестирования своих запросов GraphQL.

Это важная функция, которая поможет вам ознакомиться с использованием GraphiQL (не опечатка!). Имейте в виду, что если вы используете существующий API, вам нужно будет добавить исключения в свои правила фильтрации безопасности или сначала войти в систему. Здесь приведена дополнительная информация о том, как использовать Graphql .

Далее давайте рассмотрим мутаторы и классы запросов. Мутация – это то, что изменит данные. Таким образом, это ваше создание, обновление или удаление данных. Классы запросов – это просто методы, которые запрашивают базу данных или “получают” данные.

EntityMutationResolver.java:

@Component
public class EntityMutationResolver implements GraphQLMutationResolver {

    private final BrewerService brewerService;
    private final BeerService beerService;

    /**
     * Constructor that takes instances of injected service bean for all entities
     * 
     * @param brewerService An instance of Spring managed BrewerService bean
     * @param beerService An instance of Spring managed BeerService bean
     */
    public EntityMutationResolver( BrewerService brewerService,
            BeerService beerService) {
        this.brewerService = brewerService;
        this.beerService = beerService;
    }

    /**
     * Adds a Brewer entity
     * 
     * @param name Name of the Brewer
     * @return An instance of Brewer if created successfully
     * @throws Exception If any occurred
     */
    public Brewer addBrewer(String name) throws Exception {
        Brewer brewer = new Brewer(name);
        return brewerService.save(brewer);
    }

Ключевым моментом здесь является то, что он реализует GraphQLMutationResolver .

Здесь мы определяем методы, которые описаны в схеме GraphQL. Мы вернемся к этому позже.

EntityQueryResolver.java:

@Component
public class EntityQueryResolver implements GraphQLQueryResolver {

    private final BrewerService brewerService;
    private final BeerService beerService;

    /**
     * Constructor that takes instances of injected service bean for all entities
     * 
     * @param brewerService An instance of Spring managed BrewerService bean
     * @param beerService An instance of Spring managed BeerService bean
     */
    public EntityQueryResolver(BrewerService brewerService,
        BeerService beerService) {
        this.brewerService = brewerService;
        this.beerService = beerService;
    }

    /**
     * Returns a Brewer for the given id
     * 
     * @param id Primary key of the Brewer
     * @return An instance of Brewer
     */
    public Brewer getBrewerById(Long id) {
        try {
            Optional brewer = brewerService.findOne(id);
            if (brewer.isPresent()) {
                brewer.get().getbeers();
                return brewer.get();
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return null;
    }

Здесь снова этот класс реализует Распознаватель запросов GraphQL , что позволяет схеме GraphQL разрешать эти методы. Помните, что это Получите методы типа возвращающие данные, а не изменяющие их.

Схема GraphQL

Теперь пришло время настроить GraphQL, чтобы узнать, какие методы и модели доступны. Мы делаем это, добавляя файл schema.graphics в корневой каталог проекта в папке ресурсов. Он находится в том же месте, что и файл application.properties .

Ниже приведен контент, который нам нужен:

type Brewer {
    id: ID!
    name: String!
    beers: [Beer]!
} 

type Beer {
    id: ID!
    title: String!
    brewer: Brewer!
}

# Mutation: to add entities
type Mutation {
    addBrewer(name: String!): Brewer!
    addBeer(title: String!, brewerId:Int!): Beer!
}

# The Root Query for the application
type Query {
    brewerById(id:Int): Brewer
    beerById(id:Int): Beer
    getAllBeers: [Beer]
}


Давайте вкратце разберем это:

  • Типы являются “моделями” для объектов.
  • Мутация – это методы изменения данных.
  • Запрос – это определение методов, доступных для извлечения данных.
  • Восклицательный знак означает, что значение не может быть пустым.
  • Скобки указывают на массивы. (Большинство разработчиков сочтут это простым.)

Войдите и запустите приложение Spring Boot с помощью GraphQL

Если у вас возникли проблемы, это, вероятно, связано с несоответствием между преобразователями и файлом схемы. В браузере перейдите в localhost:8080/graphiql , и он должен показать вам что-то вроде этого:

Поздравляю! Ты сделал это. Теперь вы на пути к величию GraphQL!

Таким образом, этот вывод просто сообщает вам, что доступно в вашем GraphQL. Удалите то, что там есть, и напишите эти:

mutation addBrewery {
  addBrewer(name:"Leinenkugel") {
    id
    name
  }
}

mutation addBrewsky {
  addBeer(title:"Summer Shandy", brewerId:1) {
    id
    title
  }
}

query allBreweries {
    getAllBeers {
    id
    title
    brewer {
      id
      name
    }
  }
}

Слово мутация говорит вам, что будет делать ваш GraphQL. Затем, добавить пивоварню – это то, что вы хотите, чтобы это было.

mutation addBrewery {
  addBrewer(name:"Leinenkugel") {
    id
    name
  }
}

добавить пивовара – это фактический метод, который вы собираетесь вызывать. Вы передаете поля внутри скобок.

Подсказка: графический инструмент сообщает вам, что доступно, чего он ожидает, и доступные поля для возврата. Вы должны заполнить то, что хотите, чтобы вам вернули, иначе он будет жаловаться.

mutation addBrewery {
  addBrewer(name:"Leinenkugel") {
    id
    name
  }
}

Результаты являются JSON:

{
  "data": {
    "addBrewer": {
      "id": "1552",
      "name": "Leinenkugel"
    }
  }
}

Несколько преимуществ Spring Boot с GraphQL

Просто подумайте об этом таким образом: ваш API возвращает таблицу, которая обычно возвращает 100 полей. Не эффективно!

С помощью GraphQL вы можете указать, что вам нужно всего несколько полей. Он настроит запрос только на запрос и вернет поля, которые вы ищете.

Это также позволяет вам создавать более простые функции CRUD, которые возвращают только все, но позволяют GraphQL и запросу определять, что вы хотите от этой реализации.

Объединение вызовов REST; хотя здесь не приведен пример, вы можете объединить несколько запросов в упрощенный запрос, ограничивающий количество запросов, которые запрашивающий должен сделать к вашему API.

Вывод

Хотя эта статья не является полным обсуждением того, чего вы можете достичь с помощью GraphQL, она дает вам приблизительный взгляд на это в отношении Spring Boot. В конечном счете это изменит правила игры для многих разработчиков, которые хотят оставаться на вершине своей игры. Если вы оказались заинтригованы Spring Boot с GraphQL и хотели бы узнать больше, вот курс по основам GraphQL это обеспечивает более глубокое знакомство с этим языком запросов.

Пожалуйста, не стесняйтесь публиковать любые вопросы или примеры, в которых вы использовали это. Я с нетерпением жду возможности использовать это в ближайшем будущем!

Ресурсы:

Ресурсы:

Оригинал: “https://dev.to/keyholesoftware/spring-boot-with-graphql-what-the-cool-kids-are-doing-1m2b”