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

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

mutation X { field }

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

我的阅读正确吗?

【问题讨论】:

    标签: graphql


    【解决方案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 好像被认为是从查询中返回一个字符串。
    猜你喜欢
    • 2018-12-11
    • 2017-10-18
    • 2017-08-24
    • 2018-10-17
    • 2021-04-25
    • 2020-12-15
    • 2016-01-14
    • 2021-09-09
    • 2018-09-17
    相关资源
    最近更新 更多