По мере расширения и диверсификации цифрового ландшафта GraphQL и микросервисы меняют наш подход к разработке веб-приложений. В этой статье рассматриваются преимущества, проблемы и синергия GraphQL и микросервисов в современной веб-разработке. Он предлагает ценную информацию как для опытных разработчиков, так и для новичков, изучающих API и сервис-ориентированные архитектуры.

Что такое GraphQL?

При создании приложений разработчикам нужен способ получения данных со своих серверов. Этот процесс формирует основу любого приложения, управляемого данными. GraphQL предназначен для упрощения этой задачи, выступая в качестве мощного инструмента, который разработчики используют для запроса определенных данных с серверов.

Представьте, что вы планируете поход в супермаркет. Перед тем, как отправиться в путь, вы составляете подробный список покупок, в котором указываете все, что вам нужно. Список экономит ваше время, не позволяет вам забыть какой-либо предмет и гарантирует, что вы не принесете домой ненужные предметы. GraphQL, разработанный Facebook, обеспечивает те же преимущества, когда речь идет о получении данных с серверов.

До появления GraphQL разработчики в основном использовали REST API. Использование REST API для извлечения сложных данных сродни многократным походам в супермаркет за каждым типом необходимых вам товаров — один поход за фруктами, другой за овощами и третий за молочными продуктами. Такой подход может занять много времени и быть неэффективным.

Но с GraphQL вы просто сообщаете ему, что вам нужно (может быть, имя пользователя, его последние сообщения и количество лайков для каждого сообщения), и GraphQL получает все это сразу. Это то, что мы называем единым циклом запроса-ответа. Это может помочь сделать приложения быстрее и эффективнее. GraphQL не только избавляет вас от многократных запросов, но и гарантирует, что вы получите именно то, что просите, и ничего более. Это позволяет избежать проблемы избыточной выборки, когда вы можете запросить больше данных, чем вам действительно нужно.

Что такое микросервисы?

Архитектура микросервисов, часто называемая просто «микросервисами», представляет собой особый метод разработки программных приложений в виде независимо развертываемых сервисов. Чтобы проиллюстрировать это, давайте рассмотрим платформу электронной коммерции. В архитектуре микросервисов эта платформа не будет единым монолитным приложением. Вместо этого он будет состоять из нескольких автономных сервисов, каждый из которых будет выполнять определенную функцию. Может быть служба для аутентификации пользователей, другая для управления запасами, еще одна для обработки платежей и так далее.

Каждый из этих микросервисов работает независимо и взаимодействует с другими через четко определенные API, часто с использованием облегченных протоколов, таких как HTTP/REST, или очередей обмена сообщениями для асинхронных задач. Обычно они организуются с учетом бизнес-возможностей и могут быть независимо развернуты с помощью полностью автоматизированного механизма развертывания. Это означает, что их можно обновлять, тестировать, развертывать и масштабировать независимо друг от друга.

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

Как Graphql и микросервисы работают вместе?

Представьте ваше приложение в виде сложного торгового центра. Каждый магазин в этом торговом центре — это микросервис, а продукты, которые они продают, — это данные, предоставленные этими сервисами. Например, один микросервис может обрабатывать аутентификацию пользователей, как служба безопасности в торговом центре, а другой управляет данными о продуктах, как в универмаге.

Подобно магазину со своим инвентарем, каждый микросервис предоставляет схему GraphQL, которая описывает данные, которые он может предоставить, и операции, которые он поддерживает. Эта схема определяет «продукты», которые может предложить каждый «магазин» — «инвентарь» доступных полей данных и «методы» для их чтения или изменения.

Теперь представьте посетителя торгового центра (клиента) со списком покупок — он хочет проверить статус своей учетной записи (служба аутентификации пользователя) и получить подробную информацию об определенном продукте (служба данных о продукте). Без эффективной системы им пришлось бы посещать каждый магазин отдельно и потенциально иметь дело с ненужными деталями — например, с подходом REST API.

Здесь в дело вступает GraphQL, действующий как личный помощник по покупкам. Клиент передает свой список покупок в GraphQL в виде запроса. В этом запросе они указывают точные данные, которые им нужны, например, статус их учетной записи и конкретные сведения о продукте.

GraphQL принимает этот запрос, который включает в себя точные требования к данным, и, подобно помощнику с картой торгового центра и инвентарными списками магазинов, точно знает, куда идти, чтобы выполнить запрос. GraphQL взаимодействует напрямую с необходимыми микросервисами — в «офисе безопасности» для получения статуса учетной записи и в «универмаге» для получения подробной информации о продукте.

После получения необходимых данных от каждой микрослужбы GraphQL затем объединяет данные в один ответ, который соответствует структуре исходного запроса. Клиент получает сводный ответ с именно теми данными, которые он запросил, полученными эффективным и организованным образом.

Хотя этот подход сочетает в себе преимущества микросервисов и GraphQL — разделение задач и масштабируемость с эффективной и гибкой выборкой данных — он также создает некоторые проблемы. К ним относятся управление координацией схемы между микрослужбами, обработка возможных простоев микрослужбы и оптимизация производительности для сложных запросов, охватывающих несколько служб. Эти проблемы, хотя и являются значительными, могут быть решены с использованием передовых методов и инструментов.

Синергия между GraphQL и микросервисами может привести к созданию высокоэффективных, масштабируемых и управляемых приложений, готовых обслуживать сложные потребности в данных, сохраняя при этом производительность и гибкость.

Начало работы с GraphQL и микросервисами

Несмотря на то, что в рамках этой статьи невозможно предоставить подробное руководство по настройке полнофункционального приложения с микросервисной архитектурой и GraphQL, мы все же можем дать вам хорошую отправную точку. В этом руководстве предполагается, что у вас есть базовые знания JavaScript и Node.js.

1. Настройка среды:

Прежде чем начать, убедитесь, что на вашем компьютере установлены Node.js и npm (диспетчер пакетов Node). Если нет, вы можете скачать и установить Node.js с официального сайта, который также поставляется с npm.

2. Инициализация нового проекта Node.js:

Откройте терминал и создайте новую папку для своего проекта. Перейдите в него и инициализируйте новый проект Node.js, набрав:

bashCopy code
mkdir graphql-microservices
cd graphql-microservices
npm init -y

3. Установка необходимых библиотек:

Нам нужно будет установить несколько библиотек для настройки сервера GraphQL:

  • express: Фреймворк веб-приложений для Node.js.
  • express-graphql: интеграция Express.js с GraphQL.
  • graphql: эталонная реализация JavaScript для GraphQL.

Установите их с помощью следующей команды:

bashCopy code
npm install express express-graphql graphql

4. Создание простого сервера GraphQL:

Теперь создайте новый файл с именем server.js и откройте его в текстовом редакторе. Мы настроим очень простой сервер GraphQL, используя Express.js и express-graphql:

javascriptCopy code
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');
// Define schema
let schema = buildSchema(`
  type Query {
    hello: String
  }
`);
// Define resolvers
let root = {
  hello: () => {
    return 'Hello world!';
  },
};
// Create an express server and a GraphQL endpoint
const app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true, // Set to false if you don't want graphiql enabled
}));
app.listen(4000, () => console.log('Express GraphQL Server Now Running on localhost:4000/graphql'));

Это запустит сервер GraphQL на localhost:4000/graphql и предоставит один запрос с именем hello, который возвращает строку Hello world!.

5. Создание микросервисов:

Хотя создание реальной микрослужбы выходит за рамки этого краткого руководства, вы можете начать с создания отдельных приложений Node.js, каждое из которых имеет свой собственный сервер express-graphql и выделенную функциональность.

Затем вы можете отправлять HTTP-запросы с вашего основного сервера GraphQL к этим микросервисам, когда вам нужно получить или изменить данные.

Для более сложных потребностей в данных вы можете изучить сшивание или федерацию схем GraphQL, которые представляют собой более продвинутые способы объединения нескольких схем GraphQL из разных сервисов в одну.

Заключение

Это очень простое введение, и вам предстоит еще многому научиться! Возможно, вы захотите изучить ресурсы по Node.js, Express, GraphQL и микросервисам, а также библиотеки и инструменты, такие как Apollo Server, Apollo Federation и Prisma.

Помните, что настройка архитектуры микросервисов может быть сложной и не обязательной для небольших и простых приложений. Однако для более крупных приложений с более сложными потребностями в данных сочетание GraphQL с архитектурой микросервисов может дать много преимуществ.

Спасибо, что дочитали до конца. Пожалуйста, следите за автором и этой публикацией. Посетите Stackademic, чтобы узнать больше о том, как мы демократизируем бесплатное обучение программированию по всему миру.