graphql 查询或突变能否返回标量值

Posted

技术标签:

【中文标题】graphql 查询或突变能否返回标量值【英文标题】:Can a graphql query or mutation return a scalar value 【发布时间】:2019-03-30 22:30:27 【问题描述】:

从语法上讲,您可以在模式中定义查询或突变,以便它返回一个类型。 但是,操作定义(即客户端调用的查询或突变)必须有一个 SelectionSet,所以我必须这样做:

mutation X  field 

所以我的变异或查询的结果必须是一个带有字段的对象,它不能是一个标量。 这是正确的吗?感觉就像我应该能够返回一个标量。通过 HTTP 发送时,结果总是包装在一个信封中,因此无论哪种方式,结果都是有效的 JSON(简单的标量不是严格有效的 JSON)。

我的阅读正确吗?

【问题讨论】:

【参考方案1】:

您实际上可以返回一个标量,例如 BooleanString

type Mutation 
  hello(who: String!): String

发出这个查询

mutation foo 
  hello("peter")

结果应该是这样的

data.hello // string

用graphql-yoga + graphql-playground对此进行了测试:

【讨论】:

用什么?当我尝试时,GraphiQL 不喜欢这种语法,而且规范显然不允许这样做。我怀疑服务器实现确实允许这样做,但在规范中,操作的定义是它后面跟着 SelectionSet 和 not SelectionSet(opt) 我正在玩 graphql-yoga 和“graphql playground”,示例工作...... 是的,GraphiQL 似乎也喜欢它,但 spec 似乎表明它无效。因为我想返回标量,所以我将把现实置于规范之上! @TomQuarendon 根据规范,上面的示例是有效的。突变名称后跟一个包含 hello 字段的选择集。 在 GraphQL Schema 的请求结果中没有找到关于标量类型的语句,但是这个例子:spec.graphql.org/June2018/#example-50137 好像被认为是从查询中返回一个字符串。

以上是关于graphql 查询或突变能否返回标量值的主要内容,如果未能解决你的问题,请参考以下文章

既不是突变也不是查询的 Apollo/GraphQL 动作

我必须在带有 Sequelize 的 GraphQL 突变中返回啥?

GraphQL 查询/突变的响应

如何从 graphQL apollo 突变或查询上的 cookie 更新授权标头

React-Apollo-GraphQL 通用查询和突变

React GraphQL 突变返回无效输入