突变中的 GraphQL 描述性成功消息

Posted

技术标签:

【中文标题】突变中的 GraphQL 描述性成功消息【英文标题】:GraphQL descriptive success messages in mutations 【发布时间】:2018-03-09 15:02:05 【问题描述】:

目前在 GraphQL JS 实现中,没有从突变返回描述性成功消息的标准方法,例如“用户创建成功”等。我的问题有 2 个部分:

    我的想法是从 API 返回成功消息是有益的。这样,消息可以在不同的客户端(例如 Web 和移动端)之间保持一致。客户端不必为每个 API 调用实现他们的自定义消息。但我不确定最佳做法是什么。从突变调用返回描述性成功消息是否有任何缺点(除了增加响应大小)?

    如果我决定这样做,graphql-js 中是否有标准方法可以做到这一点?

例如,是否有可能取回如下内容:


  data: 
    mutationName: var1:"val1"
  ,
  messages: 
    mutationName:"User created successfully"
  

【问题讨论】:

【参考方案1】:

不这样做的原因

现在有相当多的客户端代码取决于返回结果的形状。如果您要实施您的想法,则需要付出大量努力才能从您的更改中受益。

坚持现在的语言规范的原因

同时,您想要实现的目标(如果我理解正确的话)在当前规范内完全可以实现。

对所述问题的有效解决方案

为什么不这样做(我们将使突变成为用户创造):

schema 
  mutation: Mutation
  query: Query


type Mutation 
   newUser(params: NewUserInput): NewUserResult


input NewUserInput 
  # ...


type NewUserResult 
  successMessage(languageCode: LanguageCode): String
  newUser: User


# need to define Query, NewUserInput, User

这允许您在系统需要时返回成功消息,而无需更改 GraphQL 语言的规范。

如果你真的必须...

(来源:graphql errors and status messages in graphql-js)

至少在express-graphql中,有一种方法可以将extensions传递给它:https://github.com/graphql/express-graphql/blob/master/src/index.js#L89

【讨论】:

感谢您的回答。这不会使现有客户端无效,因为响应的形状不会改变 - 通过添加额外的“消息”字段来增强它。我想到了与您类似的解决方案,但我们对此并不满意,因为这意味着为每种类型创建一个新类型。我们最终使用了 formatResponse 选项。一旦它准备好并经过测试,我会在这里分享。

以上是关于突变中的 GraphQL 描述性成功消息的主要内容,如果未能解决你的问题,请参考以下文章

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

通过 AWS AppSync 中的突变更新 GraphQL 数据时出错

GraphQL - 突变响应后的自定义错误消息

GraphQL 对突变的速率限制

AWS Amplify + Graphql + Dynamodb:突变时出现 ConditionalCheckFailedException 错误

如何使用 graphql 更新集合中的所有记录