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

Sac*_*cha 4 apollo graphql

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

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

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

实现此目的的一个好的GraphQL模式是什么?warningPost类型中添加字段似乎有点怪异,但是我又不确定如何在相同的突变中同时返回a Post和a Warning?有任何想法吗?

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

And*_*ram 6

我所有的变异都返回一个包装的有效载荷类型,而不是单个值类型(例如,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
}
Run Code Online (Sandbox Code Playgroud)

  • 这很有道理,并且从周围询问似乎确实是共识的最佳实践。谢谢! (2认同)