突变中的 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 描述性成功消息的主要内容,如果未能解决你的问题,请参考以下文章
通过 AWS AppSync 中的突变更新 GraphQL 数据时出错
AWS Amplify + Graphql + Dynamodb:突变时出现 ConditionalCheckFailedException 错误