- PVSM.RU - https://www.pvsm.ru -
Новый стандарт получения данных GraphQL стал популярен совсем недавно. Сейчас активно обсуждается развитие этой технологии, появляются все новые инструменты. Одно из достоинств GraphQL – он дает команде разработчиков универсальный язык для описания того, какие данные доступны в API. Но в каких терминах обсуждать сам язык запросов и технологию в целом?
Спецификация GraphQL [1] содержит почти исчерпывающий набор терминов по всем аспектам GraphQL. Но спецификация довольно объемна. В этой статье мы на конкретных примерах узнаем наиболее важные понятия и термины, которых достаточно для обсуждения GraphQL на уровне специалиста.
Примечание – Эта статья не лучший выбор для изучения GraphQL с нуля. Сначала рекомендуется ознакомиться с материалами на сайте graphql.org [2], попробовать GraphQL в превосходном курсе Изучаем Apollo [3] и затем вернуться к статье, чтобы погрузиться в язык технических терминов.
Часто запросом называют все, что уходит на сервер GraphQL. С этим связана некоторая путаница. Что является задачей для сервера, о выполнении которой его просят? Это может быть запрос данных (query), мутация (mutation) или подписка (subscription). Слово «запрос» прочно ассоциируется с сетевым запросом в понимании HTTP и транспортного уровня. Поэтому начать следует с нескольких общих понятий:
Из чего состоит простейшая операция? Для примера возьмем очень простой документ GraphQL.
Рис. Составные части простого запроса.
Здесь показаны основные конструкции GraphQL, с помощью которых описываются запрашиваемые данные.
Приведенный выше запрос является несколько сокращенной формой GraphQL, позволяющей выразить потребность в данных максимально лаконично. Но операция GraphQL может включать еще три дополнительные части. Они используются, когда необходимо выполнить иное действие, чем запрос данных, или отправить динамически сформированные переменные.
В следующем примере показаны все эти части.
Рис. Более детальный запрос и его составные части.
Переменные передаются отдельно от текста запроса в формате, принятом на транспортном уровне. В современных реализациях GraphQL обычно используется JSON. Вот как может выглядеть объект с переменными для показанного ранее запроса:
Рис. Пример объекта с переменными.
Как видно, ключ совпадает с названием, указанным в описании переменных. Значение взято из перечислимого типа Episode
.
Еще одно базовое понятие не часто упоминается, но важно при обсуждении технических аспектов GraphQL – чем является то, что заключено в фигурные скобки?
Термин выборка (selection set) постоянно встречается в спецификации GraphQL. Именно с ним связана рекурсивная природа GraphQL, в которой возможны вложенные запросы.
Int
и String
не допускается указывать выборку.Фрагменты приносят еще больше возможностей в GraphQL. Вместе с тем приходя новые понятия.
Фрагменты не особо полезны вне операций. Возможны два способа вставки фрагментов, как показано ниже.
Рис. Два типа фрагментов в запросе.
…
перед названием фрагмента. Это называется разверткой. Она может присутствовать в выборке, которая применяется к тому же типу что и фрагмент.С помощью директив реализуются дополнительные функции сервера GraphQL. Директивы не влияют на результирующие значения, но могут влиять на состав возвращаемых данных и, возможно, на то, как они получены. Директивы можно встретить почти в любом месте запроса, но в данной статье упоминаются только директивы skip и include, которые определены в текущей спецификации GraphQL.
Рис. Показанные конструкции вряд ли встречаются в одном запрос, но их удобно разом продемонстрировать в таком виде.
На рисунке – не связанные между собой примеры того, где можно использовать директивы skip
и include
. Они задают условия исполняемому модулю GraphQL игнорировать поля и не включать их значения в результат. Синтаксис директив открытый, и с их помощью разные реализации GraphQL могут добавлять новые возможности, не сильно усложняя разбор и выполнение запросов.
Важное достоинство GraphQL – наличие универсального языка, с помощью которого можно описывать получение данных. Теперь у вас есть джентельменский набор терминов для обсуждения GraphQL, например в рамках продолжающейся дискуссии о подписках GraphQL [5].
В этой статье мы коснулись лишь части спецификации GraphQL, которая посвящена языку запросов. В следующих статьях мы, возможно, рассмотрим термины, в которых описывается схема GraphQL.
Хотите использовать технолоии GraphQL в повседневной работе? У нас есть различные вакансии [6] на frontend, backend и open source!
Автор: teux
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/api/261811
Ссылки в тексте:
[1] Спецификация GraphQL: https://facebook.github.io/graphql/#sec-Language
[2] материалами на сайте graphql.org: http://graphql.org/learn/
[3] Изучаем Apollo: https://www.learnapollo.com/introduction/get-started/
[4] Apollo Optics: http://www.apollodata.com/optics/
[5] дискуссии о подписках GraphQL: https://dev-blog.apollodata.com/the-next-step-for-realtime-data-in-graphql-b564b72eb07b
[6] вакансии: https://www.meteor.io/jobs/
[7] Источник: https://habrahabr.ru/post/335050/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.