Учебник GraphQL: как использовать поля, фрагменты и многое другое

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

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

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

Вот что мы рассмотрим сегодня:

  • Что такое GraphQL?
  • Строительные блоки Graph QL
  • Промежуточные концепции GraphQL
  • Что нужно узнать дальше

Что такое GraphQL

GraphQL — это язык запросов для API, которые включают серверную среду выполнения для выполнения запросов. GraphQL используется вместе с серверным программным обеспечением с открытым исходным кодом, таким как Node, Express или Apollo.

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

REST API хранит объекты по определенным URL-адресам, но GraphQL имеет созданный пользователем Система type , которая действует как шаблон, определяя набор полей , который будет иметь каждый объект этого типа. Вы можете создать множество объектов одного типа, каждый со своими собственными значениями для определенных полей.

Это похоже на отношения между классами и объектами в языках ООП, таких как Java..

  • Schema
  • Схема
  • Схема
  • Запрос
  • Запрос
 {data: {User: {name: "Jane Doe"}}} 

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

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

Нравится статья? Прокрутите вниз, чтобы подписаться на нашу бесплатную новостную рассылку, выходящую два раза в месяц.

Строительные блоки GraphQL

Основными строительными блоками GraphQL являются схема и запросы .

Схема :

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

  type Book {id: ID title: String Published: Date author: Author} type Author {id: ID  name: String book: [Book]}  

Запросы :

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

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

  type Query {book (id: ID): Автор книги (id: ID): Author}  

Запросы также могут быть сложными, например запрос имени и биография, и названия всех написанных ими книг.

 {  book (id: 100) {title isbn date author {name bio books {name}}}} 

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

Поля

Поле — это, по сути, объектно-зависимый атрибут, содержащий значение. Родительский тип объекта определяет, какие поля должен иметь объект. Каждое поле установлено в определении для хранения определенных типов данных, таких как String или Enum .

Давайте посмотрим на пример:

 type User {id: String!  электронная почта: String!  name: String} 

Здесь у нас есть тип User , который мы использовать в качестве шаблона для представления отдельных пользователей. Каждый объект типа User будет иметь три поля: id , email и name .

Поля также могут ссылаться на другие объекты для создания иерархий между различными типами объектов. Например, мы могли бы добавить поле friends к нашему User , которое содержит список, заполненный именами других пользователей.

  type User {id: String!  электронная почта: String!  name: String "friends": [{"name": "John Doe"}, {"name": "Jane Doe"}, {"name": "Guy Manson"}}  

! здесь означает, что это поле не может содержать значение null . Другими словами, каждый пользователь должен иметь id и адрес электронной почты , но name указывать необязательно.

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

Аргументы

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

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

Наиболее распространенное использование аргументов — фильтрация того объекта, который вы запрашиваете. внутри типа. Например, мы могли бы включить поле getUser в наш тип User , который принимает аргумент id . Поскольку у каждого пользователя есть определенный id , это позволит нам легко получить информацию о конкретном пользователе.

 {getName (id: "1010") {name}} 

Псевдонимы

GraphQL выдаст ошибку, если мы запросим одно и то же поле с разными аргументами. Представьте, что у нас есть объекты user и мы хотим отфильтровать их с помощью реализованного аргумента «subscriptionStatus».

 query getUsers {user (subscriptionStatus: SUBSCRIBED) {id email name} user (subscriptionStatus: UNSUBSCRIBED) {id email  name}} 

Это вызовет ошибку, поскольку более поздний запрос к пользователям type перезапишет предыдущий.

  message: «Поля« user »конфликтуют из-за разных аргументов. Используйте разные псевдонимы для полей, чтобы получить оба, если это было намеренно».   

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

Мы установим псевдоним подписчиков для пользовательских объектов с subscriptionStatus из ПОДПИСАНО:

 query getUsers {subscribers: user (subscriptionStatus: SUBSCRIBED) {id email name} 

Мы можем использовать псевдоним подписчики позже как ярлык для запроса этой подгруппы user , когда захотим. Псевдонимы — эффективный способ разделить более широкие типы на более конкретные группы, которые вы часто будете запрашивать вместе..

Продолжайте изучать GraphQL

Расширьте свой набор навыков с опытом работы с GraphQL и Nodejs. Мини-курсы Educative дают вам практический опыт роста как разработчика менее чем за 2 часа.

Запуск и работа с Node и GraphQL

Промежуточные концепции GraphQL

Фрагменты

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

Ниже мы переделаем наш предыдущий пример аргументов, но на этот раз замените идентичные поля нашим фрагментом AccountInfo .

  • Предыдущий
  • Предыдущий
  • Предыдущий
  • Фрагменты
  • Фрагменты
 query getUsers {подписчики: пользователь (subscriptionStatus: SUBSCRIBED) {id email name} nonSubscr  ibers: user (subscriptionStatus: UNSUBSCRIBED) {id email name} 

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

Переменные

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

Чтобы реализовать переменную, мы должны внести три изменения:

  • Заменить статический аргумент привязкой переменной, $ subscriptionStatus: Subscription
  • Объявить $ subscriptionStatus как одна из переменных, принимаемых запросом.
  • Pass Subscription: value в отдельном файле словаря переменных (обычно JSON)
GraphQL
VariableDictionary
 "subscriptionStatus": "SUBSCRIBED" 

Теперь мы можем изменить группу пользователей, которую мы анализируем по всей программе, просто изменив значение subscriptionStatus i. в словаре переменных.

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

Мутации

Хотя запросы позволяют получать данные, мутации позволяет создавать, обновлять или удалять данные на стороне сервера. Вы можете рассматривать мутации как GraphQL-эквивалент POST из REST API.

Чтобы реализовать мутацию, вам необходимо установить имя поля и аргументы, которые оно будет принимать. Представьте, что мы пытаемся добавить мутацию, которая позволяет нам создавать больше объектов User . Нам нужно создать запрос на изменение, который будет принимать всю необходимую информацию для создания учетной записи:

 mutation createUser (email: String !, password: String!) {createUser (email: $ email, password: $ password) {id email password} 

Сначала мы объявляем, что createUser будет мутацией и принимаем аргументы с именем электронная почта и пароль . Затем в строке 2 мы объявляем, что эти аргументы будут использоваться для заполнения отдельных полей email и password ниже.

Мутации существуют в диапазоне между мелкозернистым , что означает, что он редактирует только несколько определенных полей, и крупнозернистым , который редактирует целые типы.

Директивы

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

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

Два типа основных директив действуют как логические переключатели. Каждая директива активируется, если логическое значение истинно, чтобы избежать двойных отрицаний; include указывает, что поле отображается, когда логическое значение равно true , а skip указывает, что поле не отображается, когда логическое значение true .

  • @include (if: Boolean) Включайте это поле в результат, только если аргумент true .
  • @skip (if: Boolean) Пропустите это поле, если аргумент — true . Представьте, что мы хотим получить данные пользователя, но хотим включить адрес электронной почты, только если отмечен определенный параметр.
GraphQL
Словарь переменных
 "showEmail": true 

Что для дальнейшего изучения

Теперь, когда вы увидели все основные части GraphQL в действии, вы готовы изучить более сложные концепции, такие как преобразователи или объединение GraphQL с внутренним программным обеспечением.

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

Настройка собственного сервера GraphQL с помощью Nodejs — лучший способ попрактиковаться в своих навыках. Чтобы помочь вам в этом, компания Educative создала документ Работает с Node и GraphQL . Этот мини-курс выступает в качестве компактного ускоренного курса для ознакомления разработчиков JavaScript с реализациями GraphQL API.

К концу у вас будет практический опыт запуска и управления вашим собственным сервером GraphQL.

Удачного обучения!

Продолжить чтение об API и базах данных

  • Как использовать API: получать ежедневные изображения с помощью открытого API НАСА.
  • Что такое запрос к базе данных? Объяснение запросов SQL и NoSQL
  • MySQL Workbench Tutorial: полное руководство по инструменту RDBMS
Оцените статью
nanomode.ru
Добавить комментарий