让我们假设我有一个createPost
突变插入一个新帖子。在典型的应用程序中,该突变可以是:
Post
。我想要实现的是一个中间场景,其中突变成功(返回Post
);但是也以某种方式向用户发出警告(例如Your post is similar to post XYZ
或类似情况)。
实现这个的好GraphQL模式是什么?将warning
字段添加到Post
类型似乎有点奇怪,但是我又不知道如何在同一个变异中同时返回Post
和Warning
?有什么想法吗?
(请注意,我使用此场景作为示例,我对返回额外的突变后数据的一般模式感兴趣,而不是专门找到类似的帖子)
答案 0 :(得分:5)
我的所有突变都返回一个包装有效负载类型而不是单个值类型(例如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
}