小型项目的阿波罗联盟

Posted

技术标签:

【中文标题】小型项目的阿波罗联盟【英文标题】:Apollo federation for small projects 【发布时间】:2020-07-17 20:46:21 【问题描述】:

我是 graphQL、Apollo 等的新手。很快我将开发一个具有 3 个(rest-api)数据源和只有 1 个消费者来创建(主要)用户类型的低成本应用程序。计划使用无服务器功能作为托管。我一直在阅读有关模式拼接、联邦和模块的内容,但找不到一个很好的答案来解释为什么我应该在这个小项目中使用 Apollo 联邦。据我了解,您需要多个 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 联邦或已弃用的模式拼接。 graphql-modules 可以是一个好的解决方案还是其他插件?

【问题讨论】:

您的意图仅仅是拆分或模块化您的架构吗? 我还不确定。我认为模块看起来会更干净。也许问题应该是:我应该使用什么技术从不同的来源构建我的 graphql 模式。 【参考方案1】:

如果您只有一个用户模式,那么使用 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.

扩展类型用户@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(阿波罗)配置中心把现有项目的配置文件迁移到Apollo

源 GraphQL API:HTTP 错误 400 错误请求

重要时讯 | 迪拜政府启动KYC区块链联盟平台

简述战略联盟的简述工作分解结构(wbs)的作用?

商业分享:客户分散,流量低?不妨试试异业联盟