GraphQL часто обсуждают либо как замену REST, либо как серебряную пулю для фронтенда. На практике он полезен там, где клиенту важно гибко собирать данные из нескольких сущностей и не тянуть лишнее из API.
Ниже коротко разберем, что именно предлагает GraphQL, чем он отличается от REST и с каких частей удобнее начинать знакомство, чтобы не изучать технологию в отрыве от реальной задачи.
Что такое GraphQL
GraphQL - это язык запросов для API, а также среда для выполнения этих запросов с существующими данными. Он даёт клиентам (браузерам) возможность запросить у сервера только то, что нужно, и возвращает только запрошенные данные.
Идея возникла во время мобильного бума — GraphQL создавался, чтобы устранить недостатки, с которыми сталкивались разработчики мобильных приложений Facebook при работе с REST API.
Запрос данных в GraphQL vs REST
В типичной реализации REST клиент собирает данные путем доступа к нескольким конечным точкам; т.е. сначала нужно вызвать конечную точку, чтобы получить исходные пользовательские данные, а затем выполнить отдельный вызов, чтобы получить все его свойства. GraphQL обрабатывает это по-другому. Спецификация того, что может быть запрошено, лежит на стороне клиента, и при запросе конкретных данных, GraphQL сервер будет отвечать только запрошенными данными.
Язык определения схемы - Schema Definition Language (SDL)
Схема — ядро любого GraphQL-проекта. Она определяет все операции, доступные клиенту: какие типы существуют, какие поля можно запросить и как они связаны между собой. GraphQL описывает схему через универсальный синтаксис — язык определения схемы (SDL). Основой схемы служат типы объектов: они описывают сущности, которые можно получить с сервера. Например:
type Movie {
title: String
Director: Director
}
type Director {
name: String
movies: [Movie]
}Query - это базовая операция fetch в GraphQL для запроса данных с сервера GraphQL.
type Query {
getMovies: [Movie]
getDirectors: [Director]
}Mutation - это одна из основных операций GraphQL, позволяющая манипулировать данными (создавать, изменять или удалять):
type Mutation {
addMovie(title: String, director: String): Movie
}Если ты хочешь узнать больше о SDL, официальный сайт GraphQL - то, что тебе нужно.
Первые шаги с GraphQL
Чтобы узнать больше о GraphQL, - то лучше всего попробовать его самому. GraphQL Editor - отличный вариант для рассмотрения. Этот инструмент пригодится тебе, когда начнешь изучать GraphQL, поскольку ты сможешь работать со своей схемой GraphQL в визуальном интерфейсе (конечно, можешь написать и код). GraphQL Editor предоставляет множество полезных функций, которые помогут тебе убедиться, что твой GraphQL API хорошо разработан.
Для новичков в GraphQL есть встроенный интерактивный учебник. Нажми на эту ссылку, и ты будешь перенаправлен на интерактивный учебник GraphQL.
GraphQL Editor предоставляет более простое:
- Создание схемы - GraphQL Editor - это среда для разработки GraphQL, где ты можешь создать прототип своей схемы с визуальными узлами и проверить её. Параллельно создается традиционный код, поэтому ты можешь сделать это обоими способами.
- Управление. - Редактор обеспечивает автоматизацию твоего проекта GraphQL; ты можешь импортировать уже существующую производственную схему, редактировать ее и генерировать фальшивый бэкэнд. Таким образом, можно протестировать новые функции даже без полностью работающего бэкенда!
- Библиотеки автозаполнения для твоего интерфейса. Если
JavaScript / TypeScriptвходит в число предпочитаемых тобой языков, ты можешь экспортировать библиотеки автозаполнения для своего проекта, основанные наgraphql-zeus. - Совместная работа. Визуальное представление схемы улучшает взаимодействие между разработчиками и людьми с бизнес-ролями в команде.
Итог
GraphQL имеет смысл там, где клиенту действительно нужна гибкая форма выборки данных и где цена поддержки схемы оправдана. Если же у тебя простой API и понятные ресурсы, REST часто остается более прямым выбором. Лучший следующий шаг после этой статьи - взять маленькую сущность, описать для нее схему и посмотреть, какую сложность GraphQL убирает именно в твоем случае.