【问题标题】:Using GraphQL Fragment on multiple types在多种类型上使用 GraphQL Fragment
【发布时间】:2018-08-03 01:27:12
【问题描述】:

如果我的 GraphQL 架构中有一组对多种类型通用的字段,有没有办法做这样的事情?

type Address {
  line1: String
  city: String
  state: String 
  zip: String
}

fragment NameAndAddress on Person, Business {
  name: String
  address: Address
}

type Business {
   ...NameAndAddress
   hours: String
}

type Customer {
   ...NameAndAddress
   customerSince: Date
}

【问题讨论】:

    标签: graphql apollo


    【解决方案1】:

    片段仅在发出请求时在客户端使用——它们不能在您的架构中使用。 GraphQL 不支持类型继承或任何其他可以减少必须为不同类型写出相同字段的冗余的机制。

    如果您使用apollo-server,则构成架构的类型定义只是一个字符串,因此您可以通过模板文字实现您正在寻找的功能:

    const nameAndAddress = `
      name: String
      address: Address
    `
    
    const typeDefs = `
      type Business {
         ${nameAndAddress}
         hours: String
      }
    
      type Customer {
         ${nameAndAddress}
         customerSince: Date
      }
    `
    

    另外,也有一些库,例如 graphql-s2s,允许您使用类型继承。

    【讨论】:

    • 我发现 GraphQL 不支持这很奇怪。一个类型及其对应的输入有很多共享字段就是这种情况。使用字符串插值意味着我不能只使用普通的.graphql 文件。这也意味着另一种语言不能使用相同的.graphql 文件。似乎 GraphQL 真的应该支持这一点。
    • 没有类型继承很奇怪。
    【解决方案2】:

    不知道在这个提问时间它是否不可用,但我想interfaces 应该满足您的需求

    【讨论】:

    • 接口只能在模式中使用,不能在发出请求时使用。
    猜你喜欢
    • 2018-12-18
    • 2018-11-21
    • 2020-12-11
    • 1970-01-01
    • 2019-06-27
    • 2020-10-15
    • 2019-03-25
    • 2018-01-30
    • 2020-11-09
    相关资源
    最近更新 更多