阿波罗小型项目联合会
Apollo federation for small projects
我是 graphQL、Apollo 等的新手。很快我将开发一个低成本的应用程序,它有 3 个(rest-api)数据源并且只有 1 个消费者来创建(主要)用户类型。计划使用无服务器功能作为托管。我一直在阅读关于模式拼接、联合和模块的内容,但找不到关于为什么我应该在这个小项目中使用 Apollo 联合的好的答案。据我了解,与单一的 Apollo 服务器相比,您需要多个 apollo 服务器并且 deploy/serverless 成本更高。
一个简单的例子:
服务器 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
}
您是否建议我仍然使用 Apollo 联邦或已弃用的模式拼接。 graphql-modules 是一个好的解决方案还是另一个插件?
如果您只有一个用户模式,那么使用 apollo 联合不是一个好主意。单个 Apollo 服务器就足够了。您可以让一台服务器与多个数据源通信。 Apollo federation 基本上是一个新版本的拼接。 (拼接已弃用)模式拼接和 Apollo 联合都是针对微服务的。
例如,如果您正在构建电子商务后端。您可以让服务器处理与用户类型相关的查询和变更(登录、注册、用户信息等)。您将有订单、产品、库存等其他服务
通常,每个服务一个域(模式)。
关于扩展类型,你举的例子并不理想。
姓氏和电子邮件应该在用户服务中声明。
您将在以下情况之一中扩展用户类型:
- 如果您在另一个架构中引用用户类型,例如
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(fields:"id") {
编号:编号!
命令:[命令!]!
}
Then in your order service, you can add a resolver that returns all the orders according to user's `id`
我是 graphQL、Apollo 等的新手。很快我将开发一个低成本的应用程序,它有 3 个(rest-api)数据源并且只有 1 个消费者来创建(主要)用户类型。计划使用无服务器功能作为托管。我一直在阅读关于模式拼接、联合和模块的内容,但找不到关于为什么我应该在这个小项目中使用 Apollo 联合的好的答案。据我了解,与单一的 Apollo 服务器相比,您需要多个 apollo 服务器并且 deploy/serverless 成本更高。
一个简单的例子:
服务器 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
}
您是否建议我仍然使用 Apollo 联邦或已弃用的模式拼接。 graphql-modules 是一个好的解决方案还是另一个插件?
如果您只有一个用户模式,那么使用 apollo 联合不是一个好主意。单个 Apollo 服务器就足够了。您可以让一台服务器与多个数据源通信。 Apollo federation 基本上是一个新版本的拼接。 (拼接已弃用)模式拼接和 Apollo 联合都是针对微服务的。
例如,如果您正在构建电子商务后端。您可以让服务器处理与用户类型相关的查询和变更(登录、注册、用户信息等)。您将有订单、产品、库存等其他服务
通常,每个服务一个域(模式)。
关于扩展类型,你举的例子并不理想。 姓氏和电子邮件应该在用户服务中声明。
您将在以下情况之一中扩展用户类型:
- 如果您在另一个架构中引用用户类型,例如
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(fields:"id") { 编号:编号! 命令:[命令!]! }
Then in your order service, you can add a resolver that returns all the orders according to user's `id`