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

Начало работы с GraphQL (Java)

GraphQL – это язык запросов для ваших Rest API, который дает клиенту возможность выбирать именно то, что ему нужно…. Помечено как java, graphql, учебное пособие, для начинающих.

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

GraphQL состоит из 3 основных частей

  1. Сервер GraphQL
  2. Схема GraphQL
  3. Клиент

Сервер GraphQL

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

Схема GraphQL

GraphQL имеет специальный язык, называемый GraphQL Schema language для определения схемы. Схема GraphQL состоит из запросов и типов. Как владелец API, мы можем решить, какие запросы и типы будут доступны потребителю. Схема имеет тип корневого объекта по умолчанию, называемый Query , который содержит все запросы. Примером схемы является

#The root object
type Query {
    hello: String
    greet(name: String): String
}
 #Defined Type
type User{
    name: String
    age: Int
}

В приведенной выше схеме корневым объектом является запрос, и у него есть одно поле, называемое привет и метод приветствие и оба возвращают строковый тип. great имеет входной аргумент name , который представляет собой тип строки. Это означает, что клиент может передавать любой аргумент строкового типа при запросе greet .

Тип пользователя – это определенный тип, который имеет 2 поля имя и возраст. GraphQL поддерживает несколько встроенных типов, таких как String, Int, Float, Boolean и т.д. Нажмите здесь , чтобы узнать больше о схеме и типах graphql.

Для каждого поля или запроса в типе запроса будет соответствующий распознаватель, который будет запущен на сервере GraphQL.

Клиент

Клиенты – это потребители. Поскольку GraphQL работает поверх Rest, любой клиент rest может запросить graphql. Есть несколько инструментов, которые отлично подходят для тестирования. Эти инструменты предоставляют функции автоматического завершения, и мы можем просматривать все возможные запросы и типы. Некоторые из инструментов являются Graphql , бессонница .

GraphQL-Java в действии

Приведенный ниже код продемонстрирует вам, как интегрировать GraphQL в приложение Spring. Итак, давайте начнем с файла схемы GraphQL.

Структура кода будет выглядеть следующим образом

Определите файл схемы users.graphql
type Query {
    hello: String
    users(name: String): User
}

type User {
    name: String
    age: Int
    address: String
}

Теперь мы начнем настраивать объекты GraphQL Java вместе с преобразователями для запросов (hello & user).

Шаг 1: Чтение и анализ файл схемы

Имя файла: GraphQLSchema.java

private TypeDefinitionRegistry readAndParseSchemaFile() throws Exception {
        String schemaString = ResourceUtils.readClasspathResourceContent("users.graphql");

        SchemaParser schemaParser = new SchemaParser();

        // parsing schema file and creating typeDefRegistery
        return schemaParser.parse(schemaString);
    }
Шаг 2: Настройка преобразователей
private RuntimeWiring buildRuntimeWiring() {
        return RuntimeWiring.newRuntimeWiring()
                .type("Query", builder -> builder.dataFetchers(buildDataFetchers()))
                .build();
    }

    private Map buildDataFetchers() {
        Map dataFetchers = new HashMap<>();
        dataFetchers.put("hello", new StaticDataFetcher("Welcome to GraphQL world."));
        dataFetchers.put("users", env -> User.of("John", 28, "India"));
        return dataFetchers;
    }
Шаг 3: Подготовьте объект GraphQL и выполните запрос
private void setup() throws Exception {
        // We need to create GraphQLSchema Object but before that we need to configure resolvers 
        GraphQLSchema graphQLSchema = new SchemaGenerator().makeExecutableSchema(readAndParseSchemaFile(), buildRuntimeWiring());
        graphQL = GraphQL.newGraphQL(graphQLSchema).build();
    }

    public ExecutionResult executeQuery(String graphQLQuery) {
        return graphQL.execute(graphQLQuery);
    }
Шаг 4: Обслуживание пользовательских запросов на конечной точке (/graphql)
@RestController
    public class GraphQLController {

        private final GraphQLService graphQLService;

        @Autowired
        public GraphQLController(GraphQLService graphQLService) {
            this.graphQLService = graphQLService;
        }

        @PostMapping("/graphql")
        public Map executeQuery(@RequestBody GraphQLRequest request) {
            return graphQLService.executeQuery(request.getQuery()).toSpecification();
        }
    }
Шаг 5: Пользователь GraphiQL или Rest для выполнения запроса graphql

Graphql ссылки на ресурсы

Добавьте конечную точку вашего контроллера/graphql в GraphiQL и начните выполнение запроса

Мы можем задать поля ответа, и graphql будет обслуживать только выбранные поля.

  1. Запрашивать у пользователей только имя
  1. Запрашивать пользователей по всем полям

Мы можем запросить несколько запросов в одном запросе

Даже один и тот же запрос несколько раз с псевдонимом

Вы можете найти полный код здесь

Счастливого кодирования 😀 😀 😀 !!!

Оригинал: “https://dev.to/jeetmp3/getting-started-with-graphql-java-53j1”