schema 是用 SDL(Schema Definition Language)编写的 GraphQL API 类型化契约。它声明每个类型、每个字段,以及特殊的根类型——Query(读)、Mutation(写),以及可选的 Subscription(实时)。服务器会拒绝任何不符合 schema 的请求。
Int、Float、String、Boolean 和 ID。你也可以定义像 DateTime 这样的自定义标量。scalar DateTime # 一个自定义标量
type User { # 一个对象类型
id: ID! # ! 表示非空(永远存在)
name: String!
createdAt: DateTime!
posts: [Post!]! # 一个 Post 对象列表,非空列表且元素非空
}
type Post {
id: ID!
title: String!
author: User! # 指回 User -> 一个关系
}
type Query { # 根类型:读取的入口点
user(id: ID!): User # 一个带参数的字段;返回一个 User(可空)
}
! 标记非空;[Post!]! 是一个非空列表,且其元素也非空。参数(id: ID!)让字段可被参数化。
schema 是唯一的事实来源——它驱动校验、自动生成文档以及客户端代码生成。正确读懂 ! 和列表类型是常见的初级筛查点,而可空性(nullability)的取舍决定了客户端如何处理错误。