API を拡張して GraphQL エンドポイントを含めようとしているときに、問題が発生しました。私が取り組んでいるアプリケーションは、Messages
. メッセージには、タイプのコメントを含めることができますMessage
。メッセージがコメントの場合、 type の親があり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
と、クエリで構文を使用できなくなりますか? おそらく、今こそスキーマにインターフェースを導入する時ではないでしょうか?
タイプ コメントを導入した場合の解決策の提案 (私はこれを試していません):
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]
}