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

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

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

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

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

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

【问题讨论】:

    标签: graphql graphql-js express-graphql


    【解决方案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 选项。一旦它准备好并经过测试,我会在这里分享。
    猜你喜欢
    • 2016-02-06
    • 2011-02-12
    • 2020-05-05
    • 2018-09-26
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多