GraphQL и архитектура конструирование
Я пытаюсь понять, где GraphQL является наиболее подходящим для использования в архитектуре микрослужб.
существует некоторая дискуссия о наличии только 1 схемы GraphQL, которая работает как шлюз API, проксирующий запрос к целевым микросервисам и принуждающий их к ответу. Микросервисы по-прежнему будут использовать протокол REST / Thrift для передачи мыслей.
другой подход заключается в том, чтобы иметь несколько схем GraphQL по одной на микросервис. Имея меньший API Сервер шлюза, который направляет запрос в целевой микросервис со всей информацией запроса + запрос GraphQL.
1-й подход
имея 1 схему GraphQL в качестве шлюза API будет иметь обратную сторону, где каждый раз, когда вы меняете свой вход/выход контракта микросервиса, мы должны изменить схему GraphQL соответственно на стороне шлюза API.
2-й подход
при использовании нескольких схем GraphQL для каждого микрослужб, смысл в пути, потому что GraphQL обеспечивает определение схемы, и потребителя нужно уважать ввода/вывода данных из микрослужб.
вопросы
где вы находите GraphQL подходящую для проектирования конструирование архитектура?
Как бы вы разработали шлюз API с возможной реализацией GraphQL?
5 ответов:
определенно подход №1.
Если ваши клиенты разговаривают с несколькими службами GraphQL (как в подходе №2), полностью побеждает цель использования GraphQL в первую очередь, которая заключается в предоставлении схемы над вашим весь данные приложения, чтобы позволить получить его в одном круговом пути.
имеющего ничего общего архитектура может показаться разумным с точки зрения микросервисов, но для клиентского кода это абсолютный кошмар, потому что каждый раз, когда вы меняете один из ваших микросервисов, вы должны обновить все ваших клиентов. Вы определенно пожалеете об этом.
GraphQL и микрослужб идеально подходят, потому что GraphQL скрывает тот факт, что у вас есть архитектура конструирование от клиентов. С точки зрения бэкэнда вы хотите разделить все на микросервисы, но с точки зрения интерфейса вы хотели бы, чтобы все ваши данные поступали из одного API. Использование GraphQL - это лучший способ, который я знаю, позволяет вам делать и то, и другое. Это позволяет разделить бэкэнд на микросервисы, обеспечивая при этом единый API для всех ваших приложений и позволяя объединять данные из разных служб.
Если вы не хотите использовать REST для своих микросервисов, вы можете, конечно, иметь каждый из них имеет свой собственный API GraphQL, но вы все равно должны иметь шлюз API. Причина, по которой люди используют шлюзы API, заключается в том, чтобы сделать его более управляемым для вызова микросервисов из клиента приложения, а не потому, что он хорошо вписывается в шаблон микросервисов.
смотрите статью здесь, который говорит, как и почему подход №1 работает лучше. Также посмотрите на изображение ниже, взятое из статьи, которую я упомянул:
одним из основных преимуществ наличия всего за одной конечной точкой является то, что данные могут быть направлены более эффективно, чем если бы каждый запрос имел свою собственную службу. Хотя это часто рекламируемое значение GraphQL, снижение сложности и ползучести обслуживания, результирующая структура данных также позволяет владение данными должно быть предельно четко определено и четко очерчено.
еще одним преимуществом принятия GraphQL является тот факт, что вы можете принципиально утверждать больший контроль над процессом загрузки данных. Поскольку процесс для загрузчиков данных идет в свою собственную конечную точку, вы можете либо выполнить запрос частично, полностью или с оговорками, и тем самым управлять чрезвычайно детальным способом передачи данных.
в следующей статье объясняются эти два преимущества вместе с другими очень хорошо:https://nordicapis.com/7-unique-benefits-of-using-graphql-in-microservices/
для подхода #2, на самом деле это так, как я выбираю, потому что это намного проще, чем поддерживать раздражающий шлюз API вручную. Таким образом, вы можете развивать свои услуги самостоятельно. Сделать жизнь намного проще: P
есть несколько замечательных инструментов для объединения схем в одну, например graphql-weaver и Аполлона graphql-tools, я использую
graphql-weaver
, Он прост в использовании и отлично работает.
поскольку архитектура микросервиса не имеет надлежащего определения, для этого стиля нет конкретной модели, но большинство из них будет поставляться с несколькими заметными characteristics.In в случае архитектуры микросервисов каждая служба может быть разбита на отдельные небольшие компоненты, которые могут быть индивидуально настроены и развернуты без ущерба для целостности приложения. Это означает, что вы можете просто изменить несколько служб, не переходя на повторное развертывание приложений через custom разработка приложений для микросервисов.
подробнее о микрослужб, я думаю, GraphQL может работать идеально в архитектуре бессерверную. Я не использую GraphQL, но у меня есть мой собственный аналогичный проект. Я использую его как агрегатор который вызывает и концентрирует много функций в один результат. Я думаю, что вы могли бы применить тот же шаблон для GraphQL.