3. 模式定义语言(SDL)
3m
你当前正在使用此课程的较旧版本。 查看课程变更日志.

📄 GraphQL 模式

一个 模式类似于 在服务器和客户端之间。它定义 API 可以做什么和不能做什么,以及客户端如何请求或更改数据。这是一个抽象层,为消费者提供灵活性,同时隐藏后端实施细节。

在我们开始定义模式之前,让我们快速浏览一下 模式定义语言,或

如果你已经熟悉 ,随时可以继续下一课。

本质上,模式是一系列包含 对象类型字段。每个 都有自己的类型。字段的类型可以是 标量(例如 IntString),也可以是 另一个对象类型。例如, Track 在我们的模式中会有一个 author 类型为 Author

我们使用 type关键字来声明类型,后跟类型的名称(帕斯卡命名法是最佳实践),然后打开方括号来容纳其包含的

type SpaceCat {
# Fields go here
}

通过其名称(驼峰命名法)、冒号,然后是字段类型(或对象)来声明。一个字段还可以包含一个列表,用方括号表示:

type SpaceCat {
age: Int
missions: [Mission]
}

与 JavaScript 对象(看起来很相似) 不同, 不用逗号分隔。此外,我们可以指示每个字段值是否可空或不可空。如果一个字段永远不为 null,我们就在其类型后面添加一个感叹号:

A doodle showing the SpaceCat type and its fields: name, age and missions
下列哪些是有效的字段类型?
编码挑战!

定义一个具有下列字段的 SpaceCat 类型:类型为 Stringname (非 null)、类型为 Intage、类型为 ListMissionmissions

好了,在我们开始编写模式之前最后一件事: 描述

记录架构是个好习惯,就跟注释代码有益一样。这样可以让你与团队成员(以及未来的自己)更轻松明了地了解正在发生的情况。并且也能让 Apollo Studio Explorer 等工具指导 API 使用者了解他们何时何地可以用你的 API 实现目标。

为了做到这一点,允许你向类型和添加描述,只需直接在其上面编写字符串(放在引号中)即可。

"I'm a regular description"

三重“双引号”允许你添加换行符,以便更清晰地格式化较长的注释。

"""
I'm a block description
with a line break
"""
A doodle of the SpaceCat type with its description and fields
编码挑战!

SpaceCat 类型添加块描述(三重“双引号”),并为 name 字段添加常规描述。

有了最后的这点内容,我们就完成了快速回顾。来构建我们的架构!

上一步

分享你对此课程的问题和评论

你的反馈有助于我们改进!如果你遇到问题或困惑,欢迎告知我们,我们会助你一臂之力。所有评论都是公开的,且必须遵循 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。

你将需要一个 GitHub 帐户才能在下方发布。还没有帐户? 那就到我们的 Odyssey 论坛中发布吧。