StandUp «Путь в IT» с Павлом Волей
Кнопка закрыть топ-бар
ГлавнаяБлогЧто такое GraphQL и в чем его достоинства
Website,Development,,Www,Application,Coding,,Technology,Create,Online,Cyberspace,Software
1 224
Время чтения: 13 минут

Что такое GraphQL и в чем его достоинства

Сохранить статью:
Сохранить статью:
В статье рассказывается:     
  1. Особенности GraphQL
  2. Основные достоинства языка
  3. Ситуации, когда может пригодиться GraphQL
  4. Часто задаваемые вопросы про GraphQL

Ответ на вопрос, что такое Graphql, может показаться достаточно сложным, особенно для новичков в сфере обработки данных. Но если разобраться более-менее подробно, то все окажется не таким уж и страшным.

Graphql – это эффективная альтернатива REST, более «продвинутый» язык для разработки программных интерфейсов приложений. И, надо сказать, со своими задачами он справляется очень хорошо.

Особенности GraphQL

Прежде чем рассматривать особенности, разберемся, что такое GraphQL. Данный язык программирования создали разработчики Facebook в 2012 году. Изначально GraphQL разрабатывался для внутренних нужд компании. Тремя годами позже анонсировался его выпуск в открытый доступ. Начиная с 7 ноября 2018 года работа над языком ведется компанией GraphQL Foundation. Особенно популярным среди программистов язык стал после получения статуса open source.

Особенности GraphQL
Особенности GraphQL

Подавляющее большинство интернет-пользователей знает о существовании Facebook. Многим также знакомы такие сервисы, как Airbnb, GitHub, Pinterest и Shopify. Все эти продукты разрабатывались средствами GraphQL.

Этот язык запросов предназначен для работы с базами данных и для доступа к этим данным приложениями на стороне клиента. Ключевым понятием GraphQL является схема — особая сущность, позволяющая управлять БД. Клиентское приложение благодаря этому может создавать, считывать, обновлять и удалять данные. Таким образом, обеспечиваются 4 главные функции для работы с БД, обозначаемые как CRUD (create, read, update, delete).

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

Использование слова «Graph» в названии этого языка способно запутать новичков, не знакомых с программированием на данном языке. Может показаться, что здесь потребуется работа с графовыми БД. Вторая часть названия — QL — расшифровывается как «query language» («язык запросов»). Значит ли это, что мы имеем дело с абсолютно новым языком программирования?

Новичкам тут особо беспокоиться не о чем. В реализованной технологии лишь улучшены GET и POST запросы. Сам GraphQL предлагает некоторые новые концепции, связанные с организацией данных и с взаимодействием с этими данными. Но несмотря на такой новаторский подход язык работает с классическими HTTP-запросами.

Все запросы в этом языке могут относиться к двум группам. Первая группа включает в себя запросы на чтение данных (reading). С точки зрения терминологии GraphQL они называются просто query. Запросы из второй группы изменяют данные — создают, обновляют или удаляют их (соответственно, create, update и delete). В структуре языка GraphQL это так называемые «мутации» (mutations).

Обе разновидности запросов передаются на URL сервера GraphQL в виде GET или POST.

Основные достоинства языка

Высокая точность выборки

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

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

Высокая точность выборки
Высокая точность выборки

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

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

На один запрос множественная выборка

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

Например, требуются сведения о музыкальной группе — ее название, идентификатор в базе и названия композиций. Традиционным способом нужно было бы отправить минимум 2 запроса соответственно к двум точкам — /artists и /tracks. GraphQL же предлагает реализовать это одной мощной функцией. Эффективность этой возможности сложно переоценить, особенно в рамках работы с декларативными структурами API.

Депрекация на уровне поля

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

Рассмотрим это на примере. Допустим, имеется API с адресом api.domain.com/resources/1. Предполагается, что в ближайшее время в структуре ресурсов произойдут изменения. Значит, необходима версия API, которая в таком случае зафиксируется по адресу api.domain.com/resources/2.

В свою очередь, предыдущий вариант автоматически устаревает. Некоторое время он еще будет активным, пока все пользователи окончательно не перейдут на новую версию. Ресурсы прежнего варианта также будут считаться устаревшими. Их запрос выдаст неожиданные результаты, включая уведомления о более старой версии.

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

Итак, вместо создания новых версий API реализуется постепенная его эволюция. Сама структура этого API при этом остается неизменной.

Совместимость с современными приложениями

Создание современных приложений подразумевает комплексный подход — разрабатывается серверная часть, которая в свою очередь обменивается данными с клиентскими приложениями. Таким образом, для работы всевозможных веб-приложений, мобильных программ, смарт-устройств может потребоваться всего одно бэкенд-приложение. Такая технология позволяет наиболее эффективно использовать данные.

Совместимость с современными приложениями
Совместимость с современными приложениями

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

ТОП IT-профессий
2022 года с доходом
от 170 000 ₽
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Александр Сагун
Александр Сагун
Исполнительный директор Geekbrains
pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2022

pdf иконка

Подборка 50+ ресурсов об IT-сфере

pdf иконка

ТОП сервисов и приложений, на которые следует перейти уже сегодня

pdf иконка 3,7 MB
Уже скачали 11794 pdf иконка

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

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

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

Ситуации, когда может пригодиться GraphQL

Любая новая технология внедряется с какой-то определенной целью. И создание нового языка GraphQL — не исключение. Но ответить однозначно, для чего конкретно создавался этот язык, нельзя.

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

  • Стремление к минимизации количества клиентских запросов

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

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

  • Отказ от денормализации данных только лишь для оптимизации работы над пользовательским интерфейсом

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

Ситуации, когда может пригодиться GraphQL
Ситуации, когда может пригодиться GraphQL

Использование вложенных запросов GraphQL существенно снижает необходимость в денормализации данных.

  • Наличие множества источников информации, с которыми работают несколько приложений

Частично эта задача решается традиционными средствами REST API. Однако запросы клиентской части по-прежнему остаются единообразными, что создает определенную проблему. Например, имеется крупный проект, включающий в себя несколько приложений-клиентов (в том числе мобильных) и API для разработчиков. В стандартных условиях для каждого клиента понадобилось бы создавать отдельный инструмент выполнения запросов.

Зарегистрируйся на интенсив StandUp «Путь в IT»
с Павлом Волей
и получи подборку
полезных документов от Geekbrains
Павел Воля Павел Воля
Только до 26 мая
Бесплатно
Павел Воля
Tелеведущий и гуманитарий

Мы вместе с экспертами по построению карьеры подготовили документы, которые помогут не ошибиться с выбором и определить, какая профессия в IT подходит именно вам.

Благодаря этим гайдам 76% наших студентов смогли найти востребованную профессию своей мечты!

Скоро мы уберем их из открытого доступа, успейте скачать бесплатно:

pdf иконка

Женщины в IT: мифы и перспективы в карьере

pdf иконка

Как прокачать свою технику речи

pdf иконка

100 тыс. руб за 100 дней с новой профессией

Список из 6 востребованных профессий с заработком от 100 тыс. руб

pdf иконка

Критические ошибки, которые могут разрушить карьеру

Собрали 7 типичных ошибок, четвертую должен знать каждый!

pdf иконка

Гайд по профессиям в IT

5 профессий с данными о навыках и средней заработной плате

pdf иконка 4,7 MB
pdf иконка 107 MB
Уже скачали 12677 pdf иконка

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

Часто задаваемые вопросы про GraphQL

  • В чем сходство GraphQL и графовых БД?

Между ними на самом деле нет ничего общего. Может смутить приставка «Graph» в названии языка. В действительности она говорит об идее прохождения любого контента через граф API с использованием полей и подполей. Вторая часть названия (QL) отражает лишь принадлежность GraphQL к языкам запросов (query language).

  • Технологии REST вполне достаточно. Для чего тогда переходить на GraphQL?

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

  • Можно ли использовать GraphQL без каких-то библиотек?

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

  • Удобно ли работать в GraphQL при недоверии к сети Facebook?

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

  • Безопасно ли предлагать клиентским приложениям любые нужные им данные?

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

Часто задаваемые вопросы про GraphQL
Часто задаваемые вопросы про GraphQL

Например, существует параметр «limit», ответственный за предельное количество запрашиваемых клиентом документов. Если позволять клиентской стороне использовать этот параметр, необходимо также обеспечивать контроль над этим значением, чтобы избегать отказов в обслуживании при многочисленных запросах рассматриваемых документов.

  • Что необходимо для начала работы?

Обязательными являются два компонента: сервер, обрабатывающий запросы к API, и клиентская часть для подключения к конечным точкам.

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

Оцените статью
Рейтинг: 5
( голосов 1 )
Поделиться статьей
Добавить комментарий

Забрать
гарантированный
подарок
Забрать гарантированный
подарок
Скачать файл

Зарегистрируйся на интенсив StandUp «Путь в IT» с Павлом Волей и получи подборку полезных документов от Geekbrains

pdf-файл 302mb

Поздравляем!
Вы выиграли:

2-х дневный интенсив "Путь в IT"

Не пропустите сообщение!
Мы скоро свяжемся с вами!

Редирект для продолжения диалога