GraphQL - это язык запросов для общения между клиентом и сервером. Он отличается от базового RestAPI полным указанием нужных полей, которые нам нужно вернуть с сервера.
Apollo - это платформа, которая позволяет удобно работать с GraphQL
Виды запросов
Для осуществления запросов на сервер, нам потребуется написать:
Schema - схема данных, которые находятся на сервере (грубо говоря - интерфейсы)
Query - запрос на сервер, который вернёт определённые данные
И уже response - это сам ответ от сервера
Mutation уже позволяет какие-либо данные добавить, обновить или перезаписать (аналог post/put запросов)
Конкретно тут вызвана мутация, по которой мы отправляем на сервер id и name определённого персонажа и просим вернуть его id и name
И третий вид запросов - Subscription (подписки) - клиент слушает изменения в БД в режиме реального времени
Реализация
Сервер
Устанавливаем зависимости
Далее нам нужно будет описать схему наших сущностей на сервере
Как выглядит описание сущностей:
Мы описываем объекты User и Post (через [Post] указываем вложенность от другой сущности)
Описываем возможные инпуты, которые придут к нам на сервер (через ! указываем обязательность поля)
Определяем мутации и запросы в схеме
schema.js
Затем реализовать сервер, на котором у нас будет эндпоинт с graphql
В него нам нужно будет передать rootValue (методы, которые будут работать с описанными запросами GraphQL) и нашу схему
index.js
Клиент
Устанавливаем граф и клиент аполло для более удобного взаимодействия с сервером
Тут мы уже должны использовать Apollo клиент, который будет общаться с graphql сервером, кэшировать и провайдить данные
index.js
Опишем схемы для запросов данных
query / user.js
Опишем схемы для изменения данных
mutations / user.js
И далее используем клиент на нашем вебе
Для отправки запросов мы должны воспользоваться хуками:
useQuery, в который мы первым аргументом передаём схему запроса, а вторым пропсы
useMutation, в который мы передаём наши мутации и на выходе получаем функцию-триггер запроса