Учебное пособие по GraphQL для начинающих: что такое, возможности и пример

Что такое GraphQL?

GraphQL — это серверная технология прикладного уровня, разработанная Facebook для выполнения запросов к существующим данным. GraphQL может оптимизировать вызовы RESTful API. Он предоставляет декларативный способ получения и обновления ваших данных. GraphQL помогает загружать данные с сервера на клиент. Это позволяет программистам выбирать типы запросов, которые они хотят делать.

Зачем использовать GraphQL?

Ниже приведены причины использования GraphQL:

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

Приложения GraphQL

Вот важные применения GraphQL:

  • Он предоставляет Relay и другие клиентские платформы.
  • GraphQL поможет вам улучшить производительность мобильного приложения.
  • Это может уменьшить проблему чрезмерной выборки, снизить нагрузку на облачную службу на стороне сервера и уменьшить использование сети на стороне клиента.
  • Его можно использовать, когда клиентскому приложению необходимо указать, какие поля необходимы в длинном формате запроса.
  • GraphQL можно полностью использовать, когда вам нужно добавить функциональность к старому или существующему API.
  • Он используется, когда вам нужно упростить сложный API.
  • Смешивайте и смешивайте шаблон фасада, который обычно используется в объектно-ориентированном программировании.
  • Когда вам нужно агрегировать данные из более чем одного места в один удобный API.
  • Вы можете использовать GraphQL как абстракцию существующего API, чтобы указать структуру ответа в зависимости от потребностей пользователя.

Что вам нужно изучить, прежде чем изучать GraphQl?

Это руководство по GraphQL основано на экспресс и NodeJs. Таким образом, вы можете очень легко изучить GraphQL, имея базовое понимание NodeJS.

Ключевые компоненты GraphQL

Теперь в этом руководстве по GraphQL давайте изучим ключевые компоненты GraphQL:

Ключевые компоненты GraphQL
Ключевые компоненты GraphQL

Как показано на рисунке выше, существует три ключевых компонента GraphQL: 1) запрос, 2) преобразователь и 3) схема.

запрос

Запрос — это запрос API, сделанный приложением клиентского компьютера. Он поддерживает дополнения и указывает на массивы. Запрос используется для чтения или получения значений.

Части запроса:

Ниже приведены важные части запроса.

  1. поле:

Поле просто указывает, что мы запрашиваем у сервера конкретную информацию. Ниже приведен пример поля GraphQL в запросе GraphQL.

query {
    team {
        id name
    }
}

"data": {
    "team":[ {
        "id": 1, 
        "name": "Avengers"
    }
    ,
    …
]
}
}

В приведенном выше примере GraphQL мы запрашиваем у сервера поле Team и его подполя, такие как id и name. Сервер GraphQL возвращает запрошенные нами данные.

  1. аргументы

In ОТДЫХмы можем передать только один набор аргументов в виде сегментов URL и параметров запроса. Типичный вызов REST для получения определенного профиля будет выглядеть следующим образом:

GET /api'team?id=2 Content-Type: application JSON
 {
    "id": 2, 
    "name": "Justice League."
}

Решить

Резолверы предоставляют инструкции по преобразованию операции GraphQL в данные. Они разрешают запрос к данным, определяя функции преобразователя.

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

Схема

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

Возможности GraphQL

Вот важные особенности GraphQL:

  • Он предоставляет декларативный язык запросов, что не является обязательным.
  • Она иерархична и ориентирована на продукт.
  • GraphQL строго типизирован. Это означает, что запросы выполняются в контексте конкретной системы.
  • Запросы в GraphQL кодируются на клиенте, а не на сервере.
  • Он обладает всеми функциями прикладного уровня модели OSI.

Клиенты GraphQL

Клиент GraphQL — это код, который отправляет запросы POST к соответствующему серверу GraphQL. Вы можете напрямую запросить API GraphQL, но лучше всего использовать выделенную клиентскую библиотеку с помощью Relay.

Эти JavaБиблиотека скриптов разработана Facebook для создания приложений React с помощью GraphQL. Клиентами GraphQL могут быть CMS, такие как Drupal, одностраничные приложения, мобильные приложения и т. д.

GraphQL-серверы

Серверы GraphQL — это реализация спецификации GraphQL на стороне сервера. Он отображает ваши данные в виде GraphQL API, который ваша клиентская программа может запросить. база данных.

GraphQL-шлюзы

Шлюз — это шаблон микросервиса, в котором вы можете создать отдельный сервис, который будет работать с другими серверными сервисами. Он предлагает работоспособную документацию и удобный способ сбора данных из нескольких источников с помощью одного запроса.

Что такое переменная в GraphQL?

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

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

  1. Замените статическое значение в запросе именем переменной.
  2. Объявите имя переменной как одну из переменных, принимаемых запросом GraphQL.
  3. Передайте значение в словаре переменных, специфичном для транспорта.

Вот как это выглядит все вместе:

query HeroNameAndFriends($episode: Episode) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}
{
  "episode": "JEDI"
}
{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        {
          "name": "Luke Skywalker"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}

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

Что такое мутация?

Мутация — это способ изменить набор данных в GraphQL. Он изменяет данные в хранилище данных и возвращает значение. Мутации помогают вставлять, обновлять или удалять данные. Обычно мутации определяются как часть схемы.

Что следует учитывать при разработке мутаций GraphQL

Вот важные моменты при разработке GraphQL:

  • Нейминг: Прежде всего, вам нужно назвать глагол мутации. Затем существительное или «объект», если применимо. Используйте CamelCase при именовании мутаций.
  • Специфичность: Вы должны сделать мутацию максимально специфичной. Мутации должны представлять семантические действия, предпринимаемые пользователем.
  • Входной объект: Используйте один уникальный обязательный тип входного объекта в качестве аргумента для выполнения мутации на клиенте.
  • Уникальный тип полезной нагрузки: Вы должны использовать уникальный тип полезных данных для каждой мутации. Вы также можете добавить выходные данные мутации в виде поля для этого конкретного типа полезных данных.
  • Вложенность: Используйте вложение в свою мутацию везде, где это имеет смысл. Это позволяет вам полностью использовать GraphQL API.

Разница между GraphQL и REST

В следующей таблице показаны важные различия между GraphQL и REST.

GraphQL ОТДЫХ
Он следует архитектуре, управляемой клиентом. Он соответствует архитектуре, управляемой сервером.
GraphQL можно организовать в виде схемы. REST может быть организован с точки зрения конечных точек.
GraphQL — растущее сообщество. REST — очень большое сообщество.
Скорость разработки в GraphQL высокая. Скорость разработки в REST низкая.
Кривая обучения GraphQL сложна. Кривая обучения REST умеренная.
Личность отделена от того, как вы ее получаете. Конечная точка, которую вы вызываете в REST, является идентификатором конкретного объекта.
В GraphQL сервер определяет доступные ресурсы. Форма и размер ресурса определяются сервером в REST.
GraphQL обеспечивает высокую согласованность на всех платформах. Трудно добиться единообразия на всех платформах.

Недостатки GraphQL

Вот недостатки GraphQL:

  • Молодая экосистема
  • Недостаток ресурсов на серверной части.
  • Отсутствует шаблон дизайна для сложного приложения.
  • Проблемы с производительностью сложных запросов.
  • Излишество для небольших приложений
  • GraphQL не зависит от методов HTTP-кэширования, позволяющих хранить содержимое запроса.
  • GraphQL не понимает файлы. Следовательно, функция загрузки файлов в него не включена.
  • Используя GraphQL, будьте готовы пройти много предварительной подготовки, например, изучить язык определения схемы.

Приложения и инструменты с открытым исходным кодом, используемые GraphQL

Важными приложениями и инструментами с открытым исходным кодом, используемыми GraphQL, являются следующие:

  • Гэтсби: Gastby — это приложение на базе GraphQL, которое может использовать данные, полученные из более чем одного источника GraphQL API. Вы можете использовать его для разработки статического и клиентского приложения React.
  • ГрафиQL: Это идентификатор, который интегрируется с браузером, а также взаимодействует с API GraphQL. Некоторые из функций, которые включает GraphiQL, — это мутации, запросы данных и запросы автозаполнения.
  • Площадка для GraphQL: Это мощная IDE со встроенным редактором для обработки мутаций, проверки, запросов GraphQl, подписок и т. д. Разработчик может использовать эту IDE для визуализации структуры схемы.
  • Prisma: Prisma — это уровень абстракции базы данных, который превращает ваши базы данных в API-интерфейсы GraphQL с помощью операций CRUD (создание, чтение, обновление и удаление).
  • Немного: Это инструмент и платформа с открытым исходным кодом, которая преобразует повторно используемый код в компоненты. Разработчики могут использовать их для обмена и разработки различных проектов.

Итого

  • GraphQL — это серверная технология прикладного уровня, разработанная Facebook для выполнения запросов к существующим данным.
  • Вы можете использовать GraphQL для получения данных с помощью одного вызова API.
  • GraphQL поможет вам улучшить производительность мобильного приложения.
  • Важными компонентами запроса GraphQL являются: 1) Запрос, 2) Резолвер, 3) Схема.
  • GraphQL строго типизирован. Это означает, что запросы выполняются в контексте конкретной системы.
  • Клиент GraphQL — это код, который отправляет запросы POST к соответствующему серверу GraphQL.
  • Серверы GraphQL — это реализация спецификации GraphQL на стороне сервера.
  • Шлюз — это шаблон микросервиса, в котором вы можете создать отдельный сервис, который будет работать с другими серверными сервисами.
  • В GraphQL есть один хороший способ факторизации динамических значений запроса.
  • Мутация — это способ изменить набор данных в GraphQL.
  • Важными моментами при разработке GraphQL являются: 1) Именование, 2) Специфичность, 3) Уникальный тип полезной нагрузки входного объекта и 4) Вложенность.
  • GraphQL может быть организован в виде схемы, тогда как REST может быть организован в виде конечных точек.
  • Недостатком GraphQL является отсутствие ресурсов на серверной части.