GraphQL描述性突变成功消息

时间:2017-09-28 01:16:48

标签: graphql graphql-js express-graphql

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

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

  2. 如果我决定这样做,graphql-js中是否有标准的方法来执行此操作?

  3. 例如,是否可以取回类似的内容:

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

1 个答案:

答案 0 :(得分:3)

不这样做的原因

现在有相当数量的客户端代码依赖于返回结果的形状。如果你要付出相当大的努力来实现你的想法,你需要分叉那些,以便从你的改变中受益。

坚持语言规范的理由,就像今天一样

与此同时,你想要达到的目标是(如果我理解你的话)在当前的规范中完全可以实现。

解决陈述问题的有效方法

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

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