代码之家  ›  专栏  ›  技术社区  ›  Sacha

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

  •  9
  • Sacha  · 技术社区  · 8 年前

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

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

    我想实现的是一个中间场景,其中变异成功(返回 邮递 );但是 而且 以某种方式向用户返回警告(例如。 Your post is similar to post XYZ 或类似)。

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

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

    1 回复  |  直到 8 年前
        1
  •  8
  •   Andrew Ingram    8 年前

    我的所有突变都返回一个包装负载类型,而不是一个单一的值类型(例如。 Post 在您的情况下),我也不会抛出GraphQL,除非它是一个真正的系统错误——如果这是用户输入的结果,或者是其他预期的情况,我将其建模为返回类型。

    返回包装负载通常被认为是最佳实践,因为a)您的突变应该返回 每件事 在可能已更改的图中(不仅仅是新帖子)和b),它使您能够在以后向返回类型添加新字段。

    记住,突变本质上是一个函数,它接收一些输入数据和当前图形,并返回一个新的图形。It's generally a mistake to think in terms of REST-like CRUD operations.

    type CreatePostError = {
        // Whatever you want
    }
    
    type CreatePostSuccess = {
        post: Post!
        warning: String
    }
    
    union CreatePostPayload = CreatePostSuccess | CreatePostError
    
    mutation {
        // Other mutations
        createPost(/* args /*): CreatePostPayload
    }
    
    推荐文章