假设我有一个页面构建器字段,其中引用了许多不同类型的内容块。
等...
根据我的阅读,不建议在数组中具有多种类型。
但是在这种情况下您还应该做什么?
是否可以在GraphQL中处理此问题?
是否有更好的数据结构方式?
答案 0 :(得分:1)
您可以将它们定义为联合(如果所有实现类型都共享公共字段,则可以定义为接口)
type Query {
blocks: [ ContentBlock! ]!
}
type Video {
url: String!
}
type Quote {
body: String!
author: String
}
type Advertisement {
src: String!
backgroundColor: String
}
union ContentBlock = Video | Quote | Advertisement
type Query {
blocks: [ ContentBlock! ]!
}
type Video implements ContentBlock {
id: ID!
url: String!
}
type Quote implements ContentBlock {
id: ID!
body: String!
author: String
}
type Advertisement implements ContentBlock {
id: ID!
src: String!
backgroundColor: String
}
interface ContentBlock {
id: ID!
}
{
ContentBlock: {
__resolveType (source) {
if (source.url) return 'Video'
if (source.src) return 'Advertisment'
if (source.author || source.body) return 'Quote'
}
}
}
{
blocks {
...on Video {
url
}
...on Quote {
body
author
}
...on Advertisement {
src
backgroundColor
}
}
}
答案 1 :(得分:0)
编辑:我并不认为接口内的列表中包含多种类型是不好的做法。您可以查看节点查询或在Github api https://developer.github.com/v4/query/
上进行搜索