GraphQL:如何在成功突变后发出警告?

时间:2018-04-17 02:15:11

标签: graphql apollo

让我们假设我有一个createPost突变插入一个新帖子。在典型的应用程序中,该突变可以是:

  • 成功,返回Post
  • 失败,抛出错误(我使用apollo-errors来处理此问题)。

我想要实现的是一个中间场景,其中突变成功(返回Post);但是以某种方式向用户发出警告(例如Your post is similar to post XYZ或类似情况)。

实现这个的好GraphQL模式是什么?将warning字段添加到Post类型似乎有点奇怪,但是我又不知道如何在同一个变异中同时返回PostWarning ?有什么想法吗?

(请注意,我使用此场景作为示例,我对返回额外的突变后数据的一般模式感兴趣,而不是专门找到类似的帖子)

1 个答案:

答案 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
}