Что такое GraphQL?

Что такое GraphQL?

GraphQL стандартизированный «API Gateway». Транспорт данных клиент-сервер может выполнятся с помощью любого протокола (http, ssh, ws, cli, etc.).

Более детально:

GraphQL — это стандарт, декларирования структуры данных и методов получения данных, который размещается дополнительным слоем между клиентом и сервером.

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

Простой пример запроса пользователя:

Клиентская часть указывает, что данные он хочет получить, используя декларативную, графоподобную структуру, похожей на формат JSON.

Клиент запрашивает три поля (name, email и age). Так же он может запрашивать как одно поле, к примеру name, так и произвольное количество, смотря что определенно в типе user на GraphQL в серверной части.

GraphQL облегчает агрегацию данных из нескольких источников.

Пример простой клиент-серверной архитектуры.


У каждого клиентского приложения есть сервер. Трансляция данных выглядит просто,
не важно, какой именно протокол передачи данных для этого используется. В случае http посылается запрос и получается ответ.

GraphQL является прослойкой между клиентом и сервером, (пример расположения в структуре),

Если добавить еще один сервис, можно увидеть, что все проходит через него

Сервисы для него могут быть написанными на разных языках программирования, взаимодействовать с разными базами данных, Sql или NoSql, могут иметь разные API. Но работать при такой архитектуре становиться довольно сложно, а добавление каждого нового сервиса требует много ресурсов.

GraphQL стандартизированный «API Gateway». Транспорт данных клиент-сервер может выполнятся с помощью любого протокола (http, ssh, ws, cli, etc.).

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

Система типов

GraphQL использует систему типов для описания данных.


В GraphQL поля могут быть представлены как базовыми, так и пользовательскими типами. В данном примере поле user представлено пользовательским типом User. У типа User описан набор полей, которые представлены базовыми типами.

Таким образом и реализуется графо-подобная структура неопределенного уровня вложенности. 

Сравнение GraphQL API и REST API

 

  • Зависимость от протокола передачи данных.
    GraphQL не зависит от протокола передачи данных, может использовать любой (http, ws, ssh, cli, etc.)
    REST базируется на http протоколе, и зависит от него.
  • Единая точка входа. ( Entry point )
    В GraphQL для работы с данными мы всегда обращаемся к единой точке входа — GraphQL серверу. Изменяя структуру, поля, параметры запроса мы работаем с разными данными.
    В REST API каждый путь (route) представляет собой отдельную точку входа.
  • Возможность возвращать разные форматы данных.
    GraphQL может возвращать только JSON формат.
    REST в данном случае более гибкий. REST API может возвращать данные в различных форматах — JSON, XML и т.д., это зависит от заголовков http запроса, и от самой имплементации API.
  • Декларация, документация, инструменты разработки
    GraphQL дает возможность написания документации непосредственно в коде (inline documentation).

    В GraphQL может описать любой созданный тип, для этого при создании типа нужно в поле «description» описать, для чего данный тип нужен. Данную документацию могут подгружать различные утилиты, IDE, что очень упрощает работу с GraphQL.

    В GraphQL из коробки имеет свой IDE, который работает в браузере и называется GraphiQL.

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

    GraphiQL можно включить через конфигурацию GraphQL, с помощью настройки graphiql = true и перейдя по пути <имя домена>/graphiql. Либо же можно использовать одно из расширений для браузера, которые имеют практически одинаковую функциональность но разный UI.

    REST не имеет подобной функциональности, но есть возможность её реализовать используя SWAGGER.

  • Возможность формировать структуру и объем данных на клиенте

    Основная особенность GraphQL, формат и структура данных определяется на стороне клиента. В REST формат и структура данных жестко определены на сервере.

  • Передача аргументов в запрос


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

    В REST каждый путь представлен как отдельная точка входа, в таком случае передать аргументы можно только для всего запроса.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *