В статье рассказывается:
- Особенности GraphQL
- Основные достоинства языка
- Ситуации, когда может пригодиться GraphQL
- Часто задаваемые вопросы про GraphQL
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Ответ на вопрос, что такое Graphql, может показаться достаточно сложным, особенно для новичков в сфере обработки данных. Но если разобраться более-менее подробно, то все окажется не таким уж и страшным.
Graphql – это эффективная альтернатива REST, более «продвинутый» язык для разработки программных интерфейсов приложений. И, надо сказать, со своими задачами он справляется очень хорошо.
Особенности GraphQL
Прежде чем рассматривать особенности, разберемся, что такое GraphQL. Данный язык программирования создали разработчики Facebook в 2012 году. Изначально GraphQL разрабатывался для внутренних нужд компании. Тремя годами позже анонсировался его выпуск в открытый доступ. Начиная с 7 ноября 2018 года работа над языком ведется компанией GraphQL Foundation. Особенно популярным среди программистов язык стал после получения статуса open source.
Подавляющее большинство интернет-пользователей знает о существовании Facebook. Многим также знакомы такие сервисы, как Airbnb, GitHub, Pinterest и Shopify. Все эти продукты разрабатывались средствами GraphQL.
Этот язык запросов предназначен для работы с базами данных и для доступа к этим данным приложениями на стороне клиента. Ключевым понятием GraphQL является схема — особая сущность, позволяющая управлять БД. Клиентское приложение благодаря этому может создавать, считывать, обновлять и удалять данные. Таким образом, обеспечиваются 4 главные функции для работы с БД, обозначаемые как CRUD (create, read, update, delete).
Использование слова «Graph» в названии этого языка способно запутать новичков, не знакомых с программированием на данном языке. Может показаться, что здесь потребуется работа с графовыми БД. Вторая часть названия — QL — расшифровывается как «query language» («язык запросов»). Значит ли это, что мы имеем дело с абсолютно новым языком программирования?
Новичкам тут особо беспокоиться не о чем. В реализованной технологии лишь улучшены GET и POST запросы. Сам GraphQL предлагает некоторые новые концепции, связанные с организацией данных и с взаимодействием с этими данными. Но несмотря на такой новаторский подход язык работает с классическими HTTP-запросами.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Все запросы в этом языке могут относиться к двум группам. Первая группа включает в себя запросы на чтение данных (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.
В свою очередь, предыдущий вариант автоматически устаревает. Некоторое время он еще будет активным, пока все пользователи окончательно не перейдут на новую версию. Ресурсы прежнего варианта также будут считаться устаревшими. Их запрос выдаст неожиданные результаты, включая уведомления о более старой версии.
Итак, вместо создания новых версий API реализуется постепенная его эволюция. Сама структура этого API при этом остается неизменной.
Совместимость с современными приложениями
Создание современных приложений подразумевает комплексный подход — разрабатывается серверная часть, которая в свою очередь обменивается данными с клиентскими приложениями. Таким образом, для работы всевозможных веб-приложений, мобильных программ, смарт-устройств может потребоваться всего одно бэкенд-приложение. Такая технология позволяет наиболее эффективно использовать данные.
Язык GraphQL также следует этой современной тенденции, взаимодействуя с серверной частью приложений и выполняя все клиентские задачи. В частности удовлетворяются такие требования клиентов, как создание вложенных отношений, выборка определенных данных, оптимизация сети и т. д. Необходимость выделения отдельного API под каждый конкретный случай при этом отпадает.
Скачать файлЧаще всего при разработке серверной части формируются несколько микросервисов. Каждый из них предназначен для выполнения конкретных функций. Это легко осуществляется с помощью особой возможности GraphQL, называемой сшивкой схем. Данная технология собирает из нескольких схем одну общую.
Рассмотренная функция GraphQL дает возможность придерживаться современного стиля программирования. Используя GraphQL запросы для слияния нескольких схем в одну глобальную, разработчики открывают доступ к ресурсам для множества клиентских приложений.
Ситуации, когда может пригодиться GraphQL
Любая новая технология внедряется с какой-то определенной целью. И создание нового языка GraphQL — не исключение. Но ответить однозначно, для чего конкретно создавался этот язык, нельзя.
Во всяком случае простого ответа на этот вопрос не существует. Действительно, те же функции вполне способна решать уже зарекомендовавшая себя технология REST. В крайнем случае можно было бы просто напрямую взаимодействовать с базой данных. И все же постараемся сформулировать главные доводы в пользу выбора инструментов GraphQL.
- Стремление к минимизации количества клиентских запросов
Львиную долю работы многих приложений занимает выполнение большого числа довольно сложных HTTP-запросов. Причем, выполнять их приходится очень часто. Технология GraphQL основывается на том же принципе взаимодействия через запросы. Однако при правильном использовании возможностей языка количество этих запросов с клиентской стороны значительно сокращается (вплоть до одного единственного).
на обучение «Инженер-программист» до 01 декабря
Эта технология подойдет создателям многопользовательских приложений, а также сервисов, обрабатывающих очень большие массивы данных. Использование GraphQL в этих случаях заметно повлияет на производительность программ-клиентов.
- Отказ от денормализации данных только лишь для оптимизации работы над пользовательским интерфейсом
Так называемая ловушка денормализации часто возникает в приложениях, работающих с большими базами реляционных данных. Считается, что это вполне стандартная ситуация, хотя и далеко не идеальная. Она пагубно влияет на производительность приложений.
Использование вложенных запросов GraphQL существенно снижает необходимость в денормализации данных.
- Наличие множества источников информации, с которыми работают несколько приложений
Частично эта задача решается традиционными средствами REST API. Однако запросы клиентской части по-прежнему остаются единообразными, что создает определенную проблему. Например, имеется крупный проект, включающий в себя несколько приложений-клиентов (в том числе мобильных) и API для разработчиков. В стандартных условиях для каждого клиента понадобилось бы создавать отдельный инструмент выполнения запросов.
В итоге это приведет к необходимости постоянной поддержки нескольких реализаций 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.
- Безопасно ли предлагать клиентским приложениям любые нужные им данные?
Программисты разрабатывают собственные распознаватели. Поэтому любые вопросы безопасности они также могут решать на данном уровне.
Например, существует параметр «limit», ответственный за предельное количество запрашиваемых клиентом документов. Если позволять клиентской стороне использовать этот параметр, необходимо также обеспечивать контроль над этим значением, чтобы избегать отказов в обслуживании при многочисленных запросах рассматриваемых документов.
- Что необходимо для начала работы?
Обязательными являются два компонента: сервер, обрабатывающий запросы к API, и клиентская часть для подключения к конечным точкам.
Читайте также!
Итак, мы объяснили простыми словами, что такое GraphQL. Конечно, эта технология потребует предварительного изучения, поскольку она так или иначе связана со многими сферами программирования. Важно уделить внимание концепции, чтобы принять решение, стоит использовать данный инструмент в работе или нет. На практике же все большее число представителей бизнеса переходит на GraphQL. И в ближайшее время данная технология вполне может стать одной из основных в веб-разработке.
Ищете самую востребованную и высокооплачиваемую профессию? Станьте DevOps-инженером с нуля. Присоединяйтесь к нашему курсу, где вы освоите все необходимые навыки для работы в индустрии разработки программного обеспечения. Получите практический опыт в автоматизации процессов, контейнеризации, управлении конфигурациями. Научитесь автоматизировать процессы разработки и внедрения ПО, организовать непрерывную интеграцию и доставку (CI/CD), работать с облачными сервисами, Docker и Kubernetes. Запишись сейчас и открой двери в мир возможностей DevOps.