Как работает backend на примере стеков graphQL и Apollo, nodejs, express?
Добрый вечер! В сети очень мало информации на примере, помогающие установить связь между стеками GraphQL, Apollo, nodejs, express. У меня проблема в понимании того, как строится backend приложение, его шаги. Ниже я приведу несколько вопросов, показывающие в чём проблема.
1) Предположим, что есть Vue приложение. Данные подготовлены в формате JSON. Что делать дальше? Как это храниться в базе данных?
2) GraphQL это язык запросов, но на нём можно создавать и API.... Как это понять? Я считал, что он работает с готовым API, а он его ещё и создаёт?
3) Использование GraphQL на фронтенде и на бэкенде, есть Apollo на клиенте и на сервере... Как это всё понять? Где, что и когда используется, прошу краткое описание!
4) API можно сделать GraphQL, Apollo, nodejs, express... И при чём всё это может быть использовано самим GraphQL. Какая разница, где же всё таки делать?
5) Цитата из статьи: "Сервер GraphQL формирует основной компонент на стороне сервера и позволяет анализировать запросы, поступающие от клиентских приложений GraphQL. Apollo Server – наиболее часто используемая реализация спецификации GraphQL." ВОПРОС - Зачем нужен Apollo Server если есть GraphQL сервер?
P.S. Прошу объяснить, как строится приложение? К примеру... Отправная точка: Сделали код на фронте. далее, исходя из структуры проекта, создаём JSON Файл... далее, по шагам 1) Нужно создать сервер, для того, чтобы ......... 2) У нас есть данные, нужно связать клиента и сервера при помощи API, которое можно создать....... 3) .....
Давайте по порядку разберем ваши вопросы:
1) Если у вас есть данные в формате JSON и вы хотите их хранить в базе данных, то самый простой способ - это использовать базу данных, которая поддерживает JSON, например PostgreSQL с расширением JSONB. Вы можете сохранить JSON-данные в столбце с типом данных JSONB и индексировать поля внутри JSON для быстрого доступа к данным. Также можно использовать ORM (Object-Relational Mapping), такой как Sequelize или TypeORM, для работы с JSON в базе данных.
2) GraphQL - это язык запросов и спецификация, которая позволяет клиентским приложениям запрашивать только необходимые данные с сервера. Однако, GraphQL также может использоваться в качестве API-сервера, который обрабатывает запросы от клиентов, возвращает запрошенные данные или выполняет мутации для изменения данных. Таким образом, GraphQL может использоваться как язык запросов, так и как средство создания API.(я сам часто смотрю в сторону Graph))
3) Apollo - это набор библиотек для работы с GraphQL на клиентской и серверной стороне. Apollo Client - это библиотека для работы с GraphQL на стороне клиента, которая предоставляет инструменты для выполнения запросов к серверу GraphQL и управления данными в приложении. Apollo Server - это библиотека для работы с GraphQL на стороне сервера, которая позволяет создавать GraphQL API и обрабатывает запросы от клиентского приложения. Apollo Server и Apollo Client - это часто используемые инструменты для работы с GraphQL.
4) API-сервер на основе GraphQL может быть реализован с использованием различных инструментов, таких как GraphQL.js, Apollo Server, Express.js или других. GraphQL сам по себе является спецификацией языка запросов, а Apollo Server и другие инструменты предоставляют реализацию этой спецификации для создания API-сервера. Node.js и Express.js могут использоваться как основа для создания и обработки запросов API-сервера на базе GraphQL.
5) Apollo Server - это реализация спецификации GraphQL, которая предоставляет инструменты для разработки сервера GraphQL. Он обрабатывает запросы от клиентов, анализирует их и выполняет запросы к базе данных или другим источникам данных. Таким образом, Apollo Server является часто используемым инструментом для создания сервера GraphQL, который предоставляет мощные возможности для работы с GraphQL-схемой и запросами.
Спасибо за ответ тем, кто написал! Они довольно исчерпывающие. Я попробовал зайти с другой стороны и пояснить в картинке, в чём застрял, в понимании чего... Прошу её посмотреть и если есть время рассказать...
1. Логика Vue компонента вызывает запрос
2. Apollo Client (или любой другой клиент, например urql или голый fetch) формирует запрос на основе запрошенных данных. А так же передаёт переменные запроса при их наличии
3. Запрос принимает http сервер, который передается фреймворку express, в свою очередь роутер вызывает middleware Apoollo Server'а
4. Apollo Server вызывает нужные резолверы для полей, формирует ответ и обрабатывает ошибки.
5. Apollo Client получает ответ, обновляет кэш и возвращает ответ Vue компоненту.
Здесь применимо абсолютно всё тоже самое как и для REST API. А теперь важные вещи на которые нужно обратить внимание:
— GraphQL требует соблюдение схемы
— GraphQL не зависит от транспорта, то что его часто отправляют через http не ограничивает им. Его например можно websocket слать или даже через UDP реализовав транспорт.
— GraphQL позволяет избежать overfetching и underfetching, в отличии от голого REST API.
— GraphQL это спецификация, а graphql-js это эталонная реализация, которую использует внутри Apollo что для клиента, что для сервера.
Ребята, составил более подробную просьбу. Дочитайте до конца пожалуйста!
Прошу помощи в написании небольшой инструкции по созданию бэкэнда для Vue приложения, за оплату!
Выбран определённый стек: GraphQL, Apollo, Nodejs, Express, нереалеционная база данных(данные в JSON формате)
Цель: Получить чёткое представление о направлении в создания бэкенд приложения.
Отправная точка – Vue приложение, созданное с помощью Nuxt. Базы данных нет
Задача:
- По возможности схематично изобразить как по шагам создаётся бэкенд приложение, с учётом выбранного стека.
- Когда и с какой технологии начинаем приступать и почему? Какие она решает задачи? Почему мы её используем?
К примеру, я собираю знания по GraphQL, по немного выстраивая картину. Проблема часто бывает в том, что знания разрознены, а базы не хватает, чтобы провести связь о между ними. https://prnt.sc/lF4wyWXP6E-h
Проблема в том, что ещё существует путаница(сейчас уже меньше но…) с пониманием GraphQL клиент, GraphQL сервер, Apollo клиент, Apollo сервер. Зачем нужен Apollo?
Или, пишут что сервер можно развернуть как на NodeJS, так и на Express Apollo, GraphQL. Так где же его разворачивать? То же самое с созданием API. Я работал с готовыми API, созданием не занимался…. И так же пишут, что API можно создать с любой вышеперечисленной технологией. Так с помощью чего всё таки создавать? Материал по созданию JSON структуры приложения.
Как я вижу вашу итог вашей помощи. Речь не идёт, что я рассчитываю обучиться этим технологиям с вашей помощью. Нет! Речь о инструкции к действию. То есть, ваша, пусть краткое объяснение, должно помочь мне самому пойти дальше в бэкенд. Если ваше объяснение будет сопровождаться полезными ссылками, то это только плюс!