让我们想象一下我有一个createPost
插入新帖子的突变。在典型的应用程序中,该突变可以:
- 成功,返回一个
Post
.
- 失败,抛出错误(我使用阿波罗错误 https://github.com/thebigredgeek/apollo-errors来处理这个)。
我想要实现的是一个中间场景,其中突变成功(返回Post
); but also以某种方式向用户返回警告(例如Your post is similar to post XYZ
或类似)。
实现这个的一个好的 GraphQL 模式是什么?添加一个warning
场到Post
类型似乎有点奇怪,但话又说回来,我不知道如何返回两个Post
and a Warning
在同一个突变中?有任何想法吗?
(请注意,我使用此场景作为示例,我对返回额外突变后数据的一般模式感兴趣,而不是专门查找类似的帖子)
我的所有突变都返回包装有效负载类型而不是单个值类型(例如Post
在你的情况下),我也不会抛出 GraphQL,除非它是一个真正的系统错误 - 如果它是用户输入的结果或者是其他预期的情况,我会将其建模为返回类型。
返回包装有效负载通常被认为是最佳实践,因为 a) 您的突变应该返回入口点一切b) 它使您能够轻松地在以后向返回类型添加新字段。
请记住,突变本质上是一个函数,它接受一些输入数据和当前图,并返回一个新图。从类似 REST 的 CRUD 操作的角度来思考通常是错误的。
type CreatePostError = {
// Whatever you want
}
type CreatePostSuccess = {
post: Post!
warning: String
}
union CreatePostPayload = CreatePostSuccess | CreatePostError
mutation {
// Other mutations
createPost(/* args /*): CreatePostPayload
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)