Как получить данные между микросервисами Graphql с общей базой данных?

#node.js #mongodb #mongoose #graphql #microservices

#node.js #mongodb #мангуст #graphql #микросервисы

Вопрос:

В разгар разработки Graphql API для нашего приложения мы решили использовать архитектуру микросервисов и приняли решение, что у нас должен быть другой API для платежей (который также будет Graphql API), чтобы мы могли начать с разделения нашего приложения. Мы используем MongoDB для нашей базы данных с Mongoose. Проблема, с которой мы сталкиваемся на данный момент, заключается в том, что для работы с платежами нам нужно было бы получить пользовательские данные, но в нашем платежном API нет моделей Mongoose, с помощью которых мы могли бы запрашивать пользовательские данные. Нам интересно, каков наилучший подход к решению этой проблемы. Копируем ли мы модели, которые нам нужно запросить, из первого API? Что мы здесь делаем не так? Является ли неправильным вообще иметь общую базу данных в архитектуре микросервисов?

Ответ №1:

Вся идея GraphQL заключается в том, чтобы иметь единую конечную точку. Это снижает сложность для «интерфейсных» разработчиков (потребителей API).

Итак, у вас будет служба конечных точек GraphQL, которая управляет доступом к базе данных.

Обычно «микросервисы» имеют свои собственные базы данных.

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

Но если вы подключаетесь к системе с помощью GraphQL API, то вы создаете единую конечную точку.

Чтобы иметь эти дискретные микросервисы, как вы описываете, вы обычно делаете их REST или gRPC для потребителя.