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

Цель этой статьи — рассказать что это, как и где используется GraphQL. Будет полезно тем, кто ничего не знает о данной технологии или хочет чуть больше понять, что имеют ввиду программисты, говоря об этой технологии.

Что такое GraphQL?

GraphQL — то язык запросов для API и среда для выполнения этих самых запросов с вашими существующими данными. Если проще, то GraphQL позволяет работать с большими объемами данных с помощью удобного синтаксиса и инструментов. Технология была разработана Facebook в 2012 году, а через три года она стала доступной общественности. В ноябре 2018 продукт передали в недавно созданную GraphQLFoundation, организованную по принципу некоммерческого Linux Foundation.

Основные преимущества GraphQL:

  • клиент может точно указать, какие данные ему нужны;
  • простая агрегация данных из нескольких источников;
  • система типов для описания данных.

Наглядный пример GraphQL

Например, когда у нас есть 1 источник информации, запрос / ответ со стороны клиент-сервер выглядит следующим образом:

простая клиент-сервер архитектура

источник: habr.com

В ситуации, когда будет обращение к нескольким серверам или сервисам на серверах, картинка приобретает следующий вид:

клиент-сервер запрос на несколько источнико

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

  • клиент запрашивает ресурсы у GraphQL сервера используя GraphQL запрос;
  • GraphQL анализирует запрос;
  • проходит по графу и выполняет для каждого поля определенную функцию;
  • после обработки всех данных, GraphQL сервер вернет ответ.

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

GraphQL: что это и зачем?

GraphQL API и REST API

GraphQL, как по мне, является следующим шагом в развитии «классического» REST API. Несколько ключевых отличий:

  1. Протокол передачи данных. GraphQL может использовать любой протокол для получения информации (http, ssh, cli и тд.), в то время как REST зависит от http.
  2. Единая точка входа. В GraphQL используется единая точка входа — GraphQL сервер. Изменяя структуру, поля, параметры запроса мы работаем с разными данными. В REST API каждый путь (route) представляет собой отдельную точку входа со своими параметрами и форматом данных.
  3. Документация. GraphQL работает с inline documentation, а это значит, можно описать тип данных сразу в процессе его создания. Различные IDE без проблем работают с подобным форматом.
  4. Формат и структура данных определяется на стороне клиента и позволяет гибко ее настроить. В REST API все ограничено на стороне сервере.
  5. Формат передачи данных. REST позволяет работать с различными форматами данных (json, xml и т. д.), в то время как GraphQL использует только json.

Более детальное сравнение REST API и GraphQL можно почитать на habr.com. Ссылка в конце статьи.

Когда лучше использовать GraphQL?

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

  1. необходимость в объединении данных из нескольких баз данных, сервисов или других источников;
  2. программисты, которые могут реализовать миграцию или разработку GraphQL;
  3. экономический эффект или существенный результат от перехода на новую технологию запросов.

Полезные источники

GraphQL: что это и зачем?
5 / Оценили: 4