我在尝试扩展我的 API 以包含 GraphQL 端点时遇到了问题。我正在开发的应用程序是一种带有Messages
. 消息可以包含类型的注释Message
。如果消息是评论,则它的父类型为Message
。简化后,架构如下所示:
type Message {
id: String
content: String
comments: [Message]
parent: Message
}
type RootQuery {
message(id: String): Message
messages: [Message]
}
这个模式的问题是它允许这样的查询:
{
messages {
comments {
parent {
comments {
parent {
comments {
parent {
id
content
}
}
}
}
}
}
}
}
请记住,我可能希望允许任意深度嵌套评论。在这种情况下,应该允许以下查询:
{
messages {
comments {
comments {
comments {
id
content
}
}
}
}
}
所以,我的问题是:我应该向不知道其父级的 API 引入一种新类型 - 评论 - 吗?或者有没有其他方法可以限制这种不受欢迎的行为?
另外,评论类型的使用会禁止我fragment messageFields on Message
在查询中使用语法吗?也许现在是向模式引入接口的时候了?
如果我引入类型 Comment 的解决方案建议(我没有尝试过):
interface Message {
id: String
content: String
comments: [Message]
}
type DefaultMessage : Message {
id: String
content: String
comments: [Comment]
parent: Message
}
type Comment : Message {
id: String
content: String
comments: [Message]
}
type RootQuery {
message(id: String): Message
messages: [Message]
}