【问题标题】:GraphQL: how can I throw a warning after a successful mutation?GraphQL:如何在突变成功后发出警告?
【发布时间】:2018-09-26 20:58:27
【问题描述】:

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

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

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

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

(请注意,我以这种情况为例,我对返回额外突变后数据的一般模式感兴趣,而不是专门找到类似的帖子)

【问题讨论】:

    标签: graphql apollo


    【解决方案1】:

    我所有的突变都返回一个包装有效负载类型而不是单个值类型(例如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
    }
    

    【讨论】:

    • 这很有意义,并且从四处询问看来确实是共识的最佳实践。谢谢!
    • 只要客户端请求警告,@AndrewIngram 就不会这样做。我发现这篇文章正在寻找一种可能返回一些警告消息的方法,例如即将被弃用的功能等。
    猜你喜欢
    • 2016-12-10
    • 2021-03-24
    • 1970-01-01
    • 2018-03-09
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多