首页 文章

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

提问于
浏览
3

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

  • 成功,返回 Post .

  • 失败,抛出错误(我使用apollo-errors处理此问题) .

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

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

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

1 回答

  • 4

    我的所有突变都返回一个包装有效负载类型而不是单个值类型(例如 Post ),我也不会发生真正的系统错误 - 如果是用户输入的结果或是其他预期的情况,我将其模型化为返回类型 .

    返回包装有效负载通常被认为是最佳实践,因为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
    }
    

相关问题