Что такое 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 ничем не будет отличаться благодаря универсальному синтаксису.