

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# GraphQL 字段
<a name="graphql-fields"></a>

字段位于类型范围内，并保存从 GraphQL 服务中请求的值。它们与其他编程语言中的变量非常相似。例如，以下是一个 `Person` 对象类型：

```
type Person {                                  
   name: String                                  
   age: Int
}
```

此处的字段为 `name` 和 `age`，分别保存 `String` 和 `Int` 值。可以将像上面所示的对象字段作为查询和变更字段（操作）中的输入。例如，请参阅下面的 `Query`：

```
type Query {                                   
  people: [Person]
}
```

`people` 字段从数据来源中请求所有 `Person` 实例。在 GraphQL 服务器中添加或检索 `Person` 时，您可以要求数据采用您的类型和字段的格式，即，架构中的数据结构决定了如何在响应中设置其结构：

```
}
  "data": {
    "people": [
      {
        "name": "John Smith",
        "age": "50"
      },
      {
        "name": "Andrew Miller",
        "age": "60"
      },
      .
      .
      .
    ]
  }
}
```

字段在设置数据结构方面发挥着重要作用。下面介绍了几个额外的属性，可以将其应用于字段以进行更多自定义。

## Lists
<a name="list-components"></a>

列表返回指定类型的所有项目。可以使用方括号 `[]` 将列表添加到字段类型中：

```
type Person { 
  name: String
  age: Int
}
type Query {                                   
  people: [Person]
}
```

在 `Query` 中，`Person` 两侧的方括号表示您希望以数组形式从数据来源返回所有 `Person` 实例。在响应中，每个 `Person` 的 `name` 和 `age` 值作为单个分隔列表返回：

```
}
  "data": {
    "people": [
      {
        "name": "John Smith",         # Data of Person 1
        "age": "50"
      },
      {
        "name": "Andrew Miller",      # Data of Person 2
        "age": "60"
      },
      .                               # Data of Person N
      .
      .
    ]
  }
}
```

您不限于使用特殊对象类型。您还可以在常规对象类型的字段中使用列表。

## 非 Null 值
<a name="non-null-components"></a>

非 Null 值表示在响应中不能为 Null 的字段。您可以使用 `!` 符号将字段设置为非 Null：

```
type Person { 
  name: String!
  age: Int
}
type Query {                                   
  people: [Person]
}
```

`name` 字段不能明确为 Null。如果您要查询数据来源并为该字段提供 Null 输入，则会引发错误。

您可以组合使用列表和非 Null 值。比较以下查询：

```
type Query {                                   
  people: [Person!]      # Use case 1
}

.
.
.

type Query {                                   
  people: [Person]!      # Use case 2
}

.
.
.

type Query {                                   
  people: [Person!]!     # Use case 3
}
```

在使用案例 1 中，列表不能包含 Null 项目。在使用案例 2 中，列表本身不能设置为 Null。在使用案例 3 中，列表及其项目不能为 Null。不过，在任何案例中，您仍然可能会返回空列表。