本文展示了跨多个动物群实例缝制的架构,从而从不同的数据源创建了统一的GraphQl API。我们还将探索将动物区系与其他GraphQL服务相结合。
了解模式缝线
架构缝线是一种从多个基础GraphQl API构建单个GraphQl API的技术。
为什么要使用模式缝线?
大规模应用通常采用微服务用于模块化。但是,客户端应用程序经常需要来自多个来源的数据。统一的GraphQl API提供了一个干净的接口,但是构建单片服务器可能会出现问题。 Fauna的每个数据库的本机GraphQl是理想的,但是多个数据库需要连接到多个实例,从而创建紧密的耦合。模式缝合通过将多个GraphQl服务组合到单个统一的模式中来解决此问题。本文涵盖:
合并多个动物群实例
让我们将多个FAUNA数据库实例(例如, Product
, Inventory
, Review
)组合到单个GraphQL服务中。每个数据库都有自己的GraphQl API(子图)。我们的目标是用于客户端应用程序的统一图,以查询所有来源的数据。
该统一的图将是我们的网关服务。我们将使用node.js构建它。
项目设置:创建一个node.js项目:
mkdir my-gateway CD My-Gateway NPM Init-是的
安装依赖项:
npm i express-express-graphql graphql @graphql-tools/schema @graphql-tools/stitch @graphql-tools/wrap cross-fetch-save -save-save-save-save
基本GraphQl Server(gateway.js):从简单的Express GraphQl Server开始:
// Gateway.js(初始版本) // ...(Express Server设置)...
(此初始代码将是类似于原始示例的裸孔服务器,但省略了简洁的专注于缝合方面。)
FAUNA数据库设置:创建三个FAUNA数据库( Product
, Inventory
, Review
)并生成管理密钥。为每个数据库定义GraphQL模式(如原始示例所示)。
Gateway Service Enhancement(Gateway.js):使用@graphql-tools/stitch
实现模式缝制。本节将包括原始描述的makeRemoteExecutor
和makeGatewaySchema
功能,但具有改善的清晰度,并有可能重构以更好地可读性。主要改进将是:
缝制第三方API:将网关扩展到使用相同的makeRemoteExecutor
和stitchSchemas
方法包括第三方GraphQl API(例如SpaceX API)。
部署到AWS lambda:使用无服务器框架将网关部署到AWS lambda功能。安装必要的依赖项( serverless
, serverless-http
, body-parser
)。创建一个serverless.yaml
文件(如原始文件所示)。修改gateway.js
,与serverless-http
集成以进行适当的lambda功能处理。使用serverless deploy
部署。
结论
模式缝合为从多个数据源构建可扩展和可维护的GraphQL API提供了强大的解决方案。尽管本文使用Fauna和AWS Lambda,但这些原则广泛应用于其他GraphQL服务和无服务器平台。阿波罗联合会(Apollo Federation)等替代方法提供了类似的功能。
以上是跨多个数据源实现单个GraphQl的详细内容。更多信息请关注PHP中文网其他相关文章!