Что такое GraphQL и в чем его преимущества?
Содержание
GraphQL – язык поисковых запросов (query language) компании Facebook. Он используется разными пользовательскими приложениями для обработки данных.
Базовыми функциями алгоритма является обновление данных, их чтение, создание и удаление. Благодаря техническим особенностям языка пользователь получает только нужную информацию конкретно по своему запросу, а компания не занимается обработкой лишних данных и тем самым сокращает свои расходы.
Свойства и особенности языка GraphQL
GraphQL представляет собой язык запросов, имеющий открытый исходный код. Этот технический алгоритм разработан программистами Facebook. Изначально планировалось, что он станет альтернативой REST и будет использоваться для разработки интерфейса разных приложений.
Схематически работа алгоритма выглядит так:
Обычно у вас есть несколько конечных точек, которые нужно объединить, чтобы прийти в конец маршрута. Но это слишком долго и сложно.
Но благодаря языку GraphQL у вас есть только одна конечная точка для всех маршрутов. Поэтому можно просто объединить все данные, чтобы прийти в эту точку намного быстрее.
GraphQL обладает несколькими важными преимуществами:
- вы сможете получить информацию конкретно в тех объемах, в которых и формировали запрос (т. е. по сравнению с REST в ответе не будет лишних данных – информационного «шума»);
- для запроса нужна только одна точка – в дополнительных версиях нет необходимости;
- язык стандартизированный, благодаря чему корректность запроса можно оценить уже на предварительном этапе, а значит можно создавать более мощные API по сравнению с REST;
- для разработки схем применяют собственный технический язык SDL, обладающий универсальным и вполне понятным синтаксисом;
- запросы можно комбинировать, что опять же удобно для пользователя.
Важнейшим плюсом GraphQL с точки зрения пользователей является отсутствие лишней информации. С одной стороны, её и так было немного. Но если представить огромный трафик Facebook, то в таких объемах количество лишней информации становится слишком большим.
Это неудобно клиентам и невыгодно для самой компании, которой приходится обслуживать несколько миллионов запросов в каждую секунду. Проще говоря – при таком масштабе большую роль играет даже те мелочи, которые только кажутся незначительной проблемой.
При этом GraphQLне позиционируется как полная противоположность REST. У обоих языков есть и общие характеристики:
- Единый интерфейс для обработки данных в удаленном режиме.
- Ответ на запрос в большинстве случаев приходит в формате JSON.
- Оба языка дают возможность разделать запросы на запись и чтение, что удобно для обработки данных.
Как работает GraphQL
GraphQL используется для обработки множества запросов, которые в конечном итоге сводятся к 2 видам:
- Первый – производится запрос на чтение сведений (на языке GraphQL это query). Они соответствуют букве R.
- Второй – запрашивается возможность изменения данных (mutation – т. е. мутации). Соответствуют буквам U, C и D.
Любой запрос направлен на получение определенной информации, хранящейся на сервере. Язык GraphQL предполагает новый синтаксис в построении запроса.
Примечательно, что этот объект не относится к JavaScript или JSON. Все запросы начинают с основы – «корневого запроса», а результат, который планируется получить в результате – это поле. В представленном ниже примере корневой запрос сформулирован на русском языке, а результатом является поле «flavors».
Для корректного построения ответа при запросе поля необходимо также определить вложенные поля, даже если в результате должен появиться лишь один объект. Эти поля перечисляют в скобках.
В результате может получиться, например, такой ответ:
В нем нет никаких лишних данных – именно здесь наглядно видно преимущество языка GraphQL перед REST.
Система типов
Алгоритмы для сервисов GraphQL пишутся на разных языках. Поэтому разработана универсальная языковая схема, поддерживающая несколько типов данных.
Объектные
Это базовый тип, который состоит из объекта и нескольких полей, содержащих его описание.
Скалярные
Это листья запроса. Они могут видоизменяться. Но в результате приводятся к конкретному скалярному типу, например, Float или ID. Наряду с базовыми скалярными типами в разных сервисах GraphQL можно создавать и другие типы. Также в алгоритм можно добавить модификатор, от которого зависит валидация полей. Оно обозначается восклицательным знаком – пример выглядит так:
Есть и другие модификаторы – например, List. Он обозначается квадратными скобками.
Для справки
Разные модификаторы применяются по отдельности и в комбинации на любых уровнях вложенности.
Аргументы
Это набор пары «ключ – значение» для определенного поля. Данные отправляют на сервер и определяют, как именно будут получены сведения для того или иного поля. В качестве аргументов выступают переменные и литералы. Они используются на полях любого уровня вложенности. Причем каждое из них нужно именовать.
Перечисления
Разновидность скалярного типа, который принимает не любые значения, а только те, что заданы конкретным набором.
Интерфейсы
Этот абстрактный тип состоит из несколько обязательных полей. Причем в них должны присутствовать типы, наследующие интерфейс – в противном случае будет ошибка валидации.
Есть и другой абстрактный тип без обязательных полей. Он используется в тех случаях, когда нужно задействовать семейство с типами, не имеющих общие поля. Эта функция используется, например, для сложной подписки.
Query
Еще один специальный тип – запрос на предоставление сведений. Он используется в обязательном порядке для всех GraphQL API. Например, так выгляди запрос на получение данных по всем фильмам:
Subscriptions
Среди всех типов этот появился позже остальных. Он отправляет данные пользователю, который «слушает» их онлайн. При этом ответ с сервера приходит не сразу, а только после получения определенных сигналов. По сути, это push-нотификации, работающие вместе с мутациями и query.
Мутации
Основные запросы приводят к получению конкретного ответа. В отличие от них, мутации нужны для внесения изменений, которые также наблюдаются достаточно часто. Их используют в виде основного алгоритма RPC. Для алгоритмизирования мутаций применяют несколько другой синтаксис. Но в целом он похож на тот, который использовался для формулирования запросов, как было показано выше.
Для описания мутации здесь используются переменные name, id и description. Корневая мутация прописывается с помощью слова mutation, после которого идет название этой мутации (имя) и совокупность переменных.
Важно понимать, что эти переменные включают в себя именно те параметры, которые пытается изменить пользователь. В описанном примере требуется изменить name, id и description, а в других случаях это могут быть иные запросы.
Как GraphQL используется для Ethereum
Язык GraphQL построен на основе идентификатора subgraph («подграфа»). Подграф представляет собой алгоритм, определяющий, какие именно данные взять из блокчейн. Причем в большинстве случаев интересны:
- спотовые контракты;
- как пользователи могут запрашивать эти данные.
На представленной ниже схеме представлено 4 подграфа, хотя на самом деле их может быть сотни и тысячи: каждый пользователь добавляет собственный subgraph.
Чтобы использовать подграф, его нужно заместить с помощью программного обеспечения, которое называется узлом графа. Пользователь может самостоятельно запустить этот узел и собственный подграф. И в этом случае вы несете ответственность за поддержание работоспособности узла в сети.
Таким образом, в будущем GraphQL станет обширной децентрализованной сетью, причем стать ее участником сможет любой желающий. Но на данном этапе необходимо просто использовать API, предоставленные графиком.
Важно!
Каждый участник может пользоваться вашим подграфом. Также вы можете передать его в управление компании, стоящей за протоколом графа, сэкономив собственное время.
Как создать первый запрос
Лучший способ начать работать с графиком – зайти на онлайн-площадку. В этом случае не нужно устанавливать какое-либо программное обеспечение – все действия выполняют онлайн на сайте. Инструкция достаточно простая:
- Перейти в раздел Explorer.
- Найти раздел «Uniswap V2».
- Перед вами появится игровая площадка GraphQL, в левой части которой находится текст с запросом.
- Если нажать на сиреневую кнопку, можно увидеть результат запроса.
- В правой части располагается схема с разными запросами. Можно воспользоваться одним из них и создать собственный запрос. Например, нажать на объект «Пары» (Pair).
- В результате появится список с полями: слева (белым цветом) указано имя поля, а справа (сиреневым) – тип поля. Для некоторых полей используют базовые типы, например, «id» или «BigDecimal». Для других – нестандартные, например, «Token».
- В поле слева необходимо указать название объекта (в данном случае «Pair») и прописать в фигурных скобках, какие именно поля будут использованы – например, token1 и token2.
- Вписать основные данные, как показано на рисунке.
- Теперь, если опять нажать на сиреневую кнопку для запуска запроса, можно увидеть результаты.
Затем запрос появится в реестре Uniswap V2.
Если кликнуть на него, можно увидеть файл, в котором описано, как построен этот подграф.
Таким образом, GraphQL – это переосмысление языка REST. Его без преувеличения можно назвать последним писком IT-моды: только в июне 2020 пользователи сделали более 1 млрд запросов. Поэтому для программистов и других участников открываются хорошие возможности ля профессионального развития и заработка.
Подписывайтесь на наш Telegram канал. Будьте в курсе новых статей.