Как осуществляется работа backend с использованием технологий GraphQL и Apollo?

Здравствуйте! У меня есть несколько вопросов, связанных с использованием стеков GraphQL, Apollo, nodejs и express для создания backend-приложений. Я бы хотел, чтобы вы прояснили следующие моменты.

1) Если у меня есть Vue-приложение и данные, представленные в формате JSON, как мне правильно хранить эти данные в базе данных?

2) Я слышал о использовании GraphQL на фронтенде и бэкенде, а также о наличии Apollo как на клиентской, так и на серверной сторонах. Можете ли вы описать, как все эти компоненты взаимодействуют и где они используются?

3) У нас есть несколько опций для создания API: GraphQL, Apollo, nodejs и express. Какая разница между ними и где лучше всего использовать каждый из них?

Буду благодарен за вашу помощь в разъяснении этих вопросов!
  • 13 сентября 2023 г. 23:37
Ответы на вопрос 2
1) Когда у вас есть Vue-приложение и данные в формате JSON, вы можете использовать базу данных, такую как MongoDB, MySQL, PostgreSQL и другие. Вы можете создать схему базы данных, которая будет соответствовать вашим данным JSON, и использовать ORM (например, Mongoose для MongoDB или Sequelize для SQL баз данных) для работы с базой данных. Ваше приложение может отправлять запросы к базе данных для получения и изменения данных.

2) GraphQL - это язык запросов и схема для вашего API, который позволяет клиентам запрашивать только нужные данные. Запросы GraphQL могут быть отправлены как с клиентской стороны, так и с серверной стороны. На клиентской стороне, Apollo Client является популярной библиотекой для работы с GraphQL. Она позволяет отправлять запросы к вашему GraphQL API и получать соответствующие данные. На серверной стороне, Apollo Server предоставляет инструменты для создания и запуска GraphQL сервера, который будет обрабатывать запросы от клиентов и возвращать данные.

3) GraphQL, Apollo, node.js и express являются различными компонентами вашего стека технологий для создания backend-приложений. 

- GraphQL - язык запросов и схема для вашего API. Он позволяет клиентам запрашивать только нужные данные.
- Apollo - это набор инструментов для работы с GraphQL на клиентской и серверной сторонах. Apollo Client является клиентской библиотекой для работы с GraphQL, а Apollo Server предоставляет инструменты для создания и запуска GraphQL сервера.
- Node.js - это среда выполнения JavaScript, которая позволяет запускать JavaScript на серверной стороне. Это позволяет вам разрабатывать backend-приложения с использованием JavaScript.
- Express - это минимальный и гибкий фреймворк для создания веб-приложений на Node.js. Он предоставляет удобные инструменты для обработки запросов и маршрутизации на серверной стороне.

В итоге, вы можете использовать GraphQL и Apollo для создания и работе с вашим API. Node.js и Express могут быть использованы для создания сервера, который будет обрабатывать запросы от клиентов и возвращать данные. Совокупное использование всех этих компонентов позволяет вам создавать эффективные и гибкие backend-приложения, которые могут обрабатывать пользовательские запросы и предоставлять данные клиентам.
Apollo Client доступен для интеграции с различными фреймворками, такими как Vue и React. Это инструмент для работы с graphcache и отправки запросов на сервер (также известный как Apollo Server).

1. Когда выполняете мутацию, настоятельно рекомендуется подготавливать данные в нужном формате, а не просто передавать JSON. Исключение составляет ситуация, когда вы реализуете собственные запросы без использования Apollo Client. В базе данных данные хранятся в том виде, в котором вам необходимо, GraphQL лишь описывает схему в данном случае.

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

3. Apollo Client может взаимодействовать с любым GraphQL сервером. В вашем случае это может быть Apollo Server.

4. GraphQL - это спецификация, а Apollo - это конкретная реализация. Вы можете построить API на основе этого.

5. Причины для использования Apollo Client аналогичны причинам использования HTTP-серверов и соответствующих фреймворков. Если вы будете использовать голую библиотеку graphql-js, вам придется написать гораздо больше кода, который также нужно будет тестировать.

Работа с GraphQL осуществляется следующим образом:

1. Создаются поля на сервере, и резолверы отвечают за возвращаемые значения полей. Внутри резолвера можно реализовать любую логику, принимать аргументы, генерировать ошибки и т. д.

2. На клиенте добавляются поля в запрос. Если делать это без использования Apollo, можно посмотреть пример в этом вопросе "Как получить данные из GraphQL через JS/Vue?". Однако, такой подход может лишить нас одного из преимуществ GraphQL - типизации. Чтобы решить эту проблему, существуют генераторы кода, которые интегрируются с различными реализациями GraphQL, такими как Apollo, Urql и graphql-request. Например, в Vue вы можете сразу получить хуки в виде Composition API для запросов к GraphQL с помощью Apollo:

```javascript
const { result, loading, onResult } = useFetchUserQuery({
  slug: route.value.params.slug
});
```

3. Обрабатываем результат запроса и готово!
Похожие вопросы