【问题标题】:What is the purpose of exclamation marks in field definitions for GraphQL types in Ruby?Ruby 中 GraphQL 类型的字段定义中感叹号的目的是什么?
【发布时间】:2019-05-06 00:25:56
【问题描述】:

我正在关注this guide 学习带有Ruby后端的GraphQL,在“查询返回链接”部分,有以下代码:

# defines a new GraphQL type
Types::LinkType = GraphQL::ObjectType.define do
  # this type is named `Link`
  name 'Link'

  # it has the following fields
  field :id, !types.ID
  field :url, !types.String
  field :description, !types.String
end

我知道感叹号只是一个“非”运​​算符,但有人可以在这里解释一下它的用途吗?

【问题讨论】:

    标签: ruby-on-rails ruby graphql


    【解决方案1】:

    这是一个必填(不可为空)字段。实施:

    字符串!表示该字段不可为空,这意味着 GraphQL 服务承诺在您查询该字段时始终为您提供一个值。在类型语言中,我们将用感叹号表示。

    https://graphql.org/learn/schema/#object-types-and-fields

    好像被关键字语法取代了:

    field :handle, String, null: false
    

    http://graphql-ruby.org/type_definitions/objects.html

    【讨论】:

    • 那么感叹号在类型之前还是之后没有关系吗?阅读本文档,所有不可为空的值都由它跟随,而不是在它之前:GraphQL Ruby - Non-Null Types - 而在this documentation 中,它用于在类型之前,但没有解释......?
    • 在 Ruby graphql DSL 中,它位于类型之前,因为它使用了重载运算符 - !(types.String)。它在 graphql 模式定义中映射到 types.String!。它 types.String! 被使用,它会被视为类型名称的一部分:String!
    • 太好了,谢谢!在您的帮助下,我找到了this documentation,它指出它现在已被删除,以避免与内置逻辑运算符产生歧义。
    • 当然可以! :)
    【解决方案2】:

    “!” GraphQL 中的标记指定该字段不可为空。在您的示例中,id、url、description 字段都不能为 NULL。

    field :id, !types.ID
    field :url, !types.String
    field :description, !types.String
    

    如果在列表中使用,它的含义会略有不同。

    [整数]! :列表不能为NULL。如果您传递“null”,那将是一个错误,而“[1, 2, null]”是可以接受的。 [Int!] : 列表内容不能为 NULL。它将接受“null”列表,但“[1, 2, null]”会导致错误。

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2020-01-09
      • 1970-01-01
      • 2011-12-22
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      相关资源
      最近更新 更多