GraphQL 中的标准做法之一是使用 ID 标量作为任何记录的全局 ID。这是有道理的,但让我想知道如何最好地确保客户端在参数或突变中使用“正确”的 id,或者知道使用哪一个。
query {
Books(id: ID) {
id: ID!
name: Text!
pages: Int!
}
DVDs(id: ID) {
id: ID!
name: Text!
}
}
mutations {
removePageFromBook(id ID) {
sadBook: Book!
}
}
使用上面的模式,很明显我们不想removePageFromBook使用代表 DVD 的 ID 来调用,而只需要使用代表 Book 的 ID 来调用。
然而问题在于,这只是因为命名而变得清晰,这是在大多数其他 GraphQL 场景中可以避免的,并且与它的精神背道而驰。特别是当模式变大时,这变得越来越难以有效沟通。
那么有没有什么好的方法来处理这个问题呢?(如果有人试图从 DVD 中删除页面,最好返回 null 或错误)
(在我们目前的情况下,我们知道服务器上的 ID 'really' 代表什么类型 ala base64("book:123"))