Ruby中GraphQL类型的字段定义中的感叹号的目的是什么?

时间:2018-12-04 14:36:01

标签: ruby-on-rails ruby graphql

我正在跟踪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

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

2 个答案:

答案 0 :(得分:2)

这是必填(不可为空)字段。的实现:

  

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

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

似乎已被关键字语法取代:

field :handle, String, null: false

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

答案 1 :(得分:1)

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

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

如果用于列表中,其含义稍有不同。

[Int]! :列表不能为NULL。如果传递“ null”,则可接受“ [1、2,null]”,这将是一个错误。 [Int!]:列表的内容不能为NULL。它将接受“空”列表,但“ [1、2,空]”将导致错误。