GraphQL – это язык запросов для ваших Rest API, который дает клиенту возможность выбирать именно то, что ему нужно. Он также предоставляет среду выполнения на стороне сервера для выполнения запросов.
GraphQL состоит из 3 основных частей
- Сервер GraphQL
- Схема GraphQL
- Клиент
Сервер 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 MapbuildDataFetchers() { 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 MapexecuteQuery(@RequestBody GraphQLRequest request) { return graphQLService.executeQuery(request.getQuery()).toSpecification(); } }
Шаг 5: Пользователь GraphiQL или Rest для выполнения запроса graphql
Graphql ссылки на ресурсы
Добавьте конечную точку вашего контроллера/graphql в GraphiQL и начните выполнение запроса
Мы можем задать поля ответа, и graphql будет обслуживать только выбранные поля.
- Запрашивать у пользователей только имя
- Запрашивать пользователей по всем полям
Мы можем запросить несколько запросов в одном запросе
Даже один и тот же запрос несколько раз с псевдонимом
Вы можете найти полный код здесь
Счастливого кодирования 😀 😀 😀 !!!
Оригинал: “https://dev.to/jeetmp3/getting-started-with-graphql-java-53j1”