Graphql 阿波罗小型项目联合会

Graphql 阿波罗小型项目联合会,graphql,apollo-server,apollo-federation,Graphql,Apollo Server,Apollo Federation,我是graphQL、Apollo等的新手。很快,我将开发一个低成本的应用程序,其中包含3个(rest api)数据源,只有1个用户创建(主要)用户类型。计划使用无服务器功能作为主机。我一直在阅读模式拼接、联盟和模块,但找不到一个好的答案来解释为什么我应该在这个小项目中使用阿波罗联盟。据我所知,您需要多台apollo服务器,因此与单片apollo服务器相比,部署/服务器成本更高 一个简化的例子: 服务器1: type User { id: ID! firstname: Strin

我是graphQL、Apollo等的新手。很快,我将开发一个低成本的应用程序,其中包含3个(rest api)数据源,只有1个用户创建(主要)用户类型。计划使用无服务器功能作为主机。我一直在阅读模式拼接、联盟和模块,但找不到一个好的答案来解释为什么我应该在这个小项目中使用阿波罗联盟。据我所知,您需要多台apollo服务器,因此与单片apollo服务器相比,部署/服务器成本更高

一个简化的例子:

服务器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 federation或不推荐使用的模式缝合。graphql模块是一个好的解决方案还是另一个插件?

如果您只有一个用户模式,那么使用apollo federation不是一个好主意。单台阿波罗服务器就足够了。您可以让一台服务器与多个数据源通信。阿波罗联盟基本上是一个新版本的缝合。(不推荐使用缝合)模式缝合和Apollo federation都用于微型服务

例如,如果您正在构建一个电子商务后端。您可以让服务器处理与用户类型相关的查询和变化(登录、注册、用户信息等)。您还可以为订单、产品、库存等提供其他服务

通常,每个服务一个域(架构)

关于扩展类型,您展示的示例并不理想。 lastname和email可能应该在用户服务中声明

您可以在以下场景之一中扩展用户类型:

  • 例如,如果您在另一个架构中引用用户类型
  • 扩展类型User@key(字段:“id”){ id:id! 订单:[订单! }


    您的意图只是分割或模块化您的模式吗?我还不确定。我认为模块看起来会更干净。也许问题应该是:我应该使用什么技术从不同的来源构建我的graphql模式。
    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.
    
    Then in your order service, you can add a resolver that returns all the orders according to user's `id`