Как правильно сархитектурить graphQL в микросервисах?

Всем привет!

Есть приложение (точнее оно в процессе разработки). Изначально стали по старинке пилить взаимодействие микросервисов через ресты и очереди. Потом вспомнилось, что это уже не модно (я про фронт) и существует довольно интересная штука, под названием graphQL.

Сейчас написаны всего 2 сервиса. К одному уже прикрутили реализацию через граф (lumen+lighthouse). А дальше что-то я не справился. По хорошему, хочу сделать один общий graphql-сервис, для обработки запросов с фронта. Как это сделать?

Почитал про федерации, поставил Apollo... Ничего если честно не понял. Как это должно работать? Типа есть N сервисов, у каждого своя схема и Аполло их как-то сам должен подтягивать? Или все схемы должны находиться на Аполло Сервере и иметь запросы к сервисам? Какие тогда запросы - рест? Странно как-то.
У меня после прочтения, было ожидание, что я поставлю аполло и он сам всё сделает. В итоге с оф документации у меня получилось что отдельно есть Аполло со своей схемой и отдельно сервисы со своими схемами....

Мб я вообще не в ту степь копаю, и Аполло тут не при чем.
  • Вопрос задан
  • 211 просмотров
Решения вопроса 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Не надо так делать. Graphql это только gateway. Использовать его как интерфейс к базе данных, даже через бизнес-логику это такое себе решение. Хотя можно, конечно, кто же спорит. Федерации это удобно, но на масштабе проще застрелиться, чем заниматься этим. Сам aplollo ничего не сделает за вас - это фреймворк, не больше) ну и большое комьюнити с готовыми модулями
Ответ написан
vekov
@vekov Автор вопроса
Иван Шумов, возможно дал дельный совет, но всё же я решил разобраться с федерациями. Нашёл готовый гейтвей nautilus, который на мой взгляд, идеально решает задачу.
То есть по факту у нас сейчас 3 сервиса, и один общий гейтвей, который ретранслирует расширенный API, автоматически собирая его с других сервисов.
Возможно, пока не столкнулся с проблемами, но на данный момент получил именно то, чего хотел.
Насчёт "Не надо так делать. Graphql это только gateway. Использовать его как интерфейс к базе данных, даже через бизнес-логику это такое себе решение. " - на данный момент не могу полностью согласиться. Получается очень удобно расширять схемы и достаточно независимо (в плане разработчиков - каждый меняет свой граф, а не общий).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы