Изучите секреты GraphQL: от основ до продвинутых концепций для начинающих разработчиков

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

Что такое GraphQL?

Аббревиатура GraphQL расшифровывается как Graph Query Language.

Согласно graphql.org, GraphQL — это язык запросов API. Проще говоря, GraphQL — это язык запросов для запроса данных. Это означает, что вы можете получать данные, изменять данные и удалять данные с помощью GraphQL.

В отличие от SQL и других языков запросов, GraphQL не взаимодействует напрямую с базами данных.

Запрос GraphQL — это, по сути, запрос, который отправляется на сервер, который затем обрабатывает его, выполняет необходимые действия и возвращает JSON.

В настоящее время GraphQL является передовым методом создания API (интерфейсов прикладного программирования). Facebook создал GraphQL для оптимизации вызовов RESTful API.

GraphQL — это язык запросов для вашего API и среда выполнения на стороне сервера для выполнения запросов с использованием системы типов, которую вы определяете для своих данных. GraphQL не привязан к какой-либо конкретной базе данных или механизму хранения, а вместо этого поддерживается вашим существующим кодом и данными. — Официальное определение https://graphql.org/learn/

Если вы знакомы с REST, вы знаете, что он поддерживает такие запросы, как GET, POST, PUT и DELETE. Цель этих запросов точно такая же, но достигается по-разному с помощью GraphQL. Подобно запросу GET в REST, функция QUERY в GraphQL используется для получения данных. Подобно запросам REST POST, PUT и DELETE, функция MUTATIONS в GraphQL используется для изменения и удаления данных.

Пример. Допустим, у вас есть данные о сотрудниках. Идентификатор сотрудника, имя, возраст, пол, дата рождения, номер карты aadhar, группа крови и многие другие поля теперь включены в список полей, связанных с сотрудниками. Теперь все поля будут возвращены, если вы получите данные через REST API. Если вы используете GraphQL, будут возвращены только запрошенные вами поля. Например, если вам просто нужны идентификатор и имя сотрудника, GraphQL предоставит только эти два поля. В этом сила GraphQL. Эффективность и производительность повышаются с помощью GraphQL. Как это делает GraphQL, обсуждается далее в этой статье.

Почему был представлен GraphQL? (Краткая история GraphQL)

В 2012 году популярная платформа социальной сети Facebook выпустила GraphQL для внутреннего использования.

Они занимались интригующим вопросом. Примерно в 2012 году мобильное приложение Facebook быстро расширялось. В отличие от онлайн-приложений, которые имеют огромные экраны для отображения данных, мобильные приложения теперь имеют экран меньшего размера для просмотра данных.

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

REST называет это требованием дополнительных сетевых вызовов и полосы пропускания. Кроме того, получение данных в REST занимает больше времени из-за большого количества вызовов. В мобильных приложениях ограничена пропускная способность и мощность сети. Чтобы решить эту проблему, Facebook разработал GraphQL.

По сути, он решает проблемы избыточной выборки (данных больше, чем требований) и недостаточной выборки (данных меньше, чем требований)). GraphQL получит точные данные, которые вы запросили. В 2015 году Facebook сделал GraphQL открытым исходным кодом.

Характеристики GraphQL

Ориентация на клиента:

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

Документация:

GraphQL позволяет пользователям запрашивать как данные, так и формы схемы. Интересно отметить, что вам не нужно предоставлять документацию по GraphQL. Документация создается автоматически с помощью GraphQL.

Строгая типизация:

GraphQL — строго типизированный язык. Скалярные типы ID, Float, Boolean, String и Int поддерживаются GraphQL. Эти типы можно использовать непосредственно при создании схем GraphQL.

Иерархический:

Структура GraphQL иерархична. Данные возвращаются GraphQL в том же порядке и форме, которые вы указали в запросе GraphQL.

Декларативный:

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

Обзор GraphQL

  • GraphQL — это технология прикладного уровня. Все функции прикладного уровня доступны в GraphQL.
  • GraphQL предоставляет только запрошенные данные; ни больше, ни меньше не предусмотрено.
  • Этот процесс агрегации упрощается благодаря GraphQL, когда вы хотите смешивать данные из нескольких источников.
  • GrapQL использует только одну конечную точку. В большинстве случаев это /graphql. GraphQL делает только один сетевой вызов для запроса данных. При использовании REST вам потребуется несколько вызовов.
  • В GraphQL нет системы версий, поскольку он использует только одну конечную точку. Вы могли заметить, что существует много версий многих конечных точек REST. Не нужно беспокоиться об управлении версиями в GraphQL. Все модификации управляются внутри GraphQL.
  • Выполнение запросов GraphQL следует модели клиент-сервер. Запрос GraphQL отправляется с клиента на сервер. Этот запрос GraphQL обрабатывается и отвечает сервером. Как уже объяснялось, GraphQL использует только одну конечную точку. Обычно это /graphql.
  • В GraphQL нет ограничений транспортного уровня. С GraphQL можно использовать любой протокол. При использовании GraphQL люди обычно используют HTTP.
  • Доступ к данным осуществляется через GraphQL в одном запросе. Поскольку GraphQL запрашивает данные в одном запросе, он может по-прежнему работать даже при низкой пропускной способности или медленном интернет-соединении. Множественные запросы выполняются через REST.
  • GraphQL делает извлечение данных более эффективным, чем обычные REST API. При использовании GraphQL существует только один сетевой вызов, что приводит к более быстрому времени отклика.
  • Структура запроса GraphQL и процесс, с помощью которого сервер проверяет и выполняет запрос. GraphQL предоставляет специально запрошенные данные, это не решение для управления состоянием на стороне клиента или двоичных потоков, таких как передача больших файлов или потоковое аудио/видео.
  • GraphQL — это не то же самое, что Facebook Graph API, поскольку GraphQL не ограничивается конкретной базой данных и может использоваться с функциями преобразователя на разных языках.
  • GraphQL не ограничен какими-либо языками программирования или базами данных. Реализация GraphQL доступна для всех самых популярных языков, таких как JavaScript и Python.

GraphQL API состоит из трех основных компонентов:

  1. Схема GraphQL. Это схема GraphQL, которую вы определяете в своих реализациях.
type User {
id: ID!
name: String!
age: Int!
}

Выше приведена простая схема GraphQL. Здесь вы можете видеть, что этот тип — User. Это означает, что пользователь имеет три свойства. Каждое свойство имеет свой тип.

2. Запрос GraphQL: это запрос, сделанный клиентом. В основном то, что пользователю нужно делать с данными, — это запрос GraphQL.

3. Преобразователь GraphQL: фактическая реализация и основная логика написаны в преобразователях GraphQL. Все вызовы базы данных и другая логика написаны в преобразователях GraphQL.

const resolvers = {
  Query: {
    // GraphQL resolvers
    users: () => {
    return UserList;
  },
  user: (parent, args) => {
    const id = args.id;
    const user = _.find(UserList, { id: Number(id) });
    return user;
  },
}

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

GraphQL поддерживает три типа операций

  1. Запрос GraphQL:
  • Используйте для получения данных. Запрос GraphQL аналогичен запросу GET в REST.

На изображении выше вы можете увидеть пример запроса GraphQL. Здесь вы заметите, что он возвращает только те поля, которые упомянуты в запросе GraphQL. В ответе GraphQL не возвращается дополнительное поле.

2. Мутация GraphQL:

  • Используйте для изменения и удаления данных. Изменение GraphQL такое же, как запросы POST, PUT и DELETE в REST.

В приведенном выше примере вы можете видеть, что мы создаем нового пользователя с мутацией GraphQL.

3. Подписка на GraphQL:

  • Подписаться на изменения в данных. Показывает изменения в данных в режиме реального времени. Подписка на GraphQL такая же, как и на WebSockets.

Преимущества и недостатки GraphQL

Преимущества GraphQL:

  • Отсутствие избыточной выборки (избыточная выборка означает, что данных больше, чем требуется)
  • Нет недовыборки (неполная выборка означает, что данных меньше, чем требуется)
  • Получение данных в одном запросе.
  • Работает на одной конечной точке.
  • GraphQL строго типизирован.
  • Запросы GraphQL удобочитаемы и просты.
  • Декларативный и иерархический
  • Встроенная обработка ошибок. В отличие от REST API, в GraphQL нет необходимости выполнять явную обработку ошибок.
  • GraphQL уменьшает количество ошибок, потому что он строго типизирован. GraphQL уменьшает усилия по отладке, поскольку встроенная функция GraphQL обрабатывает ошибки.
  • GraphQL подходит для микросервисной архитектуры
  • GraphQL повышает производительность мобильных приложений, потому что GraphQL решает проблему недостаточной и избыточной выборки.

Недостатки GraphQL

  • Кривая обучения трудна и непроста.
  • В GraphQL кэширование очень затруднено, так как в GraphQL есть единственная конечная точка. Кроме того, GraphQL управляется клиентом. Таким образом, вы не можете предсказать, какой запрос будет отправлен клиентом. Несмотря на то, что реализация Apollo предоставляет функции кэширования. Тем не менее кэширование в GraphQL очень сложное
  • Производительность не на высоте в сложных запросах
  • Шаблоны проектирования отсутствуют
  • Не для небольших приложений
  • Невозможно сделать функцию загрузки файлов с запросом GraphQL. GraphQL не понимает файлы

Вариант использования GraphQL

  • Когда вам нужно быстро выполнить итерацию, GraphQL действительно полезен. GraphQL теперь невероятно полезен в эпоху стартапов, когда вам нужно быстро создать прототип продукта. REST API требуют больше времени на планирование и разработку, тогда как GraphQL позволяет быстро реализовать логику вашего продукта.
  • Использование GraphQL в быстром прототипировании
  • Сегодня многие технологические гиганты используют GraphQL. Компании, включая Twitter, PayPal и GitHub, используют GraphQL.

Известные реализации GraphQL

Изучите приведенную ниже часть, если вы хотите глубже погрузиться в GraphQL, в противном случае вы можете пропустить этот раздел.

3 лучших сервера GraphQL:

  1. Apollo Server: Apollo Server — это сервер GraphQL с открытым исходным кодом, соответствующий спецификациям, который совместим с любым клиентом GraphQL, включая клиент Apollo. Это лучший способ создать готовый к работе самодокументирующийся API GraphQL, который может использовать данные из любого источника.
  2. Express graphql: express-graphql был первой официальной эталонной реализацией использования GraphQL с HTTP. Он существует с 2015 года и в последние годы практически не обслуживался.
  3. Hot Chocolate: Hot Chocolate — это самый эффективный, многофункциональный сервер GraphQL с открытым исходным кодом в экосистеме .NET, который помогает разработчикам с легкостью создавать мощные API-интерфейсы GraphQL и шлюзы.

3 лучших интегрированных среды разработки GraphQL:

  1. GraphiQL: GraphiQL — эталонная реализация этого монорепозитория, GraphQL IDE, официального проекта в рамках GraphQL Foundation. Код использует разрешительную лицензию MIT.
  2. GraphQL Playground. GraphQL Playground — популярная интегрированная среда разработки для изучения API-интерфейсов GraphQL. Он был создан Prisma и построен поверх GraphiQL.
  3. GraphQLEditor: GraphQLEditor упрощает понимание схем GraphQL.

Три лучших клиента GraphQL:

  1. Клиент Apollo. Клиент Apollo — это полнофункциональный кэширующий клиент GraphQL с интеграцией для React, Angular и т. д. Это позволяет вам легко создавать компоненты пользовательского интерфейса, которые извлекают данные через GraphQL.
  2. Relay. Relay — это платформа JavaScript для создания приложений React, управляемых данными.
  3. Urql: urql — это клиент GraphQL, предоставляющий набор помощников для нескольких фреймворков. Он создан с широкими возможностями настройки и универсальности, поэтому вы можете использовать его от начала работы над своим первым проектом GraphQL до создания сложных приложений и экспериментов с клиентами G6raphQL.

Заключение:

  • GraphQL — это открытый исходный код, язык запросов для API.
  • GraphQL не ограничен языками программирования или базами данных. Реализация GraphQL доступна для всех известных языков программирования.
  • GrapQL работает на одной конечной точке.
  • Запрос GraphQL выполняется за один сетевой вызов.
  • GraphQL решает проблему неполной выборки и избыточной выборки.
  • GraphQL — это управляемая клиентом технология прикладного уровня. GraphQL не зависит от транспортного уровня. GraphQL работает с любым протоколом.
  • GraphQL имеет три концепции: 1) запрос 2) схема 3) преобразователь
  • GraphQL поддерживает три операции: 1) запрос 2) мутация 3) подписка

Если вы нашли это полезным, поставьте лайк и поделитесь своими мыслями в комментариях.

Спасибо, что дочитали до конца. Пожалуйста, следите за автором и этой публикацией. Посетите Stackademic, чтобы узнать больше о том, как мы демократизируем бесплатное обучение программированию по всему миру.

Спасибо за ваше время и интерес к чтению.