我是graphQL,阿波罗等的新手。不久我将开发一个低成本的应用程序,它有3 (rest-api)数据源,只有一个用户可以创建(主要是)一个用户类型。计划使用无服务器功能作为宿主。我一直在阅读关于模式拼接、联邦和模块的文章,但是对于为什么我应该在这个小项目中使用阿波罗联邦,我找不到一个很好的答案。据我所知,您需要多台阿波罗服务器,而且与单一的阿波罗服务器相比,它的部署/无服务器成本更高。
一个简化的例子:
服务器1:
type User {
id: ID!
firstname: String
}
服务器2:
extend type User @key(fields: "id") {
lastname: String
}
服务器3:
extend type User @key(fields: "id") {
email: String
}
你能建议我还是用阿波罗联邦或者不推荐的模式拼接。graphql-模块可以是一个好的解决方案还是另一个插件?
发布于 2020-04-09 00:59:15
如果您只有一个用户模式,那么使用阿波罗联邦并不是一个好主意。单台阿波罗服务器就足够了。您可以让一台服务器与多个数据源进行通信。阿波罗联盟基本上是缝纫的新版本。(缝纫是不推荐的)模式拼接和阿波罗联邦都是为微型服务。
例如,如果您正在构建电子商务后端。您可以让服务器处理与用户类型相关的查询和突变(登录、注册、用户信息等)。您将有其他服务的订单,产品,库存等。
通常,每个服务只有一个域(架构)。
关于扩展类型,您展示的示例并不理想。lastname和email可能应该在用户服务中声明。
您将在下列方案中扩展用户类型:
如果您在另一个模式中引用用户类型,例如,
type Order {
id:ID!
products: [Product!]!
user: User! //the user which did the order
}
2. If you want to add a field to the User schema.
For example, you might want to relate all the orders made by a certain user.
扩展类型User @key(字段:“ID”){ id: ID!命令:秩序!}
Then in your order service, you can add a resolver that returns all the orders according to user's `id`
https://stackoverflow.com/questions/61049877
复制相似问题