Что такое GraphQL

В этой статье мы расскажем, что такое GraphQL, для чего он нужен и в чём его преимущества в сравнении с REST API. 

GraphQL: описание

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

Как у GraphQL, так и у REST API взаимодействие между клиентом и сервером происходит по протоколу HTTP. Самое главное отличие между ними заключается в том, что GraphQL позволяет при помощи одного запроса получить сразу все необходимые данные, даже если они находятся на разных конечных точках (серверах). В REST API для этого понадобилось бы отправлять отдельный запрос на каждый сервер. 

GraphQL удобен тем, что с помощью него можно получить данные из любого хранилища. Запрос отправляется в среду выполнения, а в ответ приходят уже готовые данные в формате JSON. Поэтому при помощи GraphQL можно получить данные как из базы данных MySQL, так и из Redis.

Чтобы GraphQL мог работать в разных средах исполнения, существует множество инструментов и библиотек. Например, если вам нужно использовать GraphQL совместно с React, можно использовать фреймворк Relay, у которого есть подробная GraphQL-Relay документация. Если нужна альтернатива, подойдёт платформа Apollo. Apollo-сервер хорош не только как самостоятельный GraphQL-сервер, но и как надстройка к серверу Node.js или к Vue-приложению.

Также есть много инструментов, которые позволяют работать с GraphQL на любом языке программирования (Python, JavaScript, Ruby, C++ и др.). Подобрать инструменты и библиотеки для работы можно на официальном сайте Graphql

Компоненты GraphQL

GraphQL состоит из 3 основных компонентов: 

  • queries ― запросы, при помощи которых клиент запрашивает данные с сервера;
  • resolvers ― распознаватели, при помощи которых GraphQL понимает, как и откуда взять запрошенные данные;
  • schema ― схема, которая описывает то, с какими типами данных работает и какие типы данных может вернуть GraphQL при ответе на запрос.

GraphQL Запросы (Queries)

Запросы в GraphQL отправляются от клиента к серверу. После обработки ответ возвращается в формате JSON. 

Пример простейшего запроса:

query {
  friends {
    name
    others {
      name
    }
  }
}

Ответ на запрос в формате JSON, который сервер GraphQL отправит клиенту:

{
   "data": {
     "friends": {
       "name": "Alex",
       "others": [
         {
           "name": "Mike"
         },
         {
           "name": "Jason"
         },
         {
           "name": "Jack"
         }
       ]
     }
   }
 }

Для создания и выполнения запросов можно использовать IDE (интегрированная среда разработки). GraphiQL ― это удобная браузерная IDE для создания и тестирования запросов. Попробуйте онлайн демо-версию на сайте GraphQL.

GraphQL Распознаватели (Resolvers)

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

Resolver возвращает тот тип данных, который определён в схеме.

GraphQL Схема (Schema)

Схема описывает то, с какими типами данных может работать GraphQL-сервер: какие данные он может принять и какие вернуть. Всего в GraphQL есть 4 типа данных:

  • Int ― целое 32-битное число,
  • Float ― числа с плавающей точкой,
  • String ― строка символов в кодировке UTF-8,
  • Boolean ― тип данных, который может принимать либо истинное (true), либо ложное (false) значение.

Эти типы данных описывают объекты. Объект и поля, которые его описывают, составляют объектный тип. В GraphQL объект будет выглядеть примерно так:

type user {
  id: ID
  name: String
  phone: String
  age: Int
}

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

Если вы не нашли ответ, спросите у нас!
Написать в поддержку