📄 GraphQL 架构
一个 架构 就像一个 契约 在服务器和客户端之间。它定义了 GraphQL API 可以和不可以做什么,以及客户端如何请求或更改数据。它是一个抽象层,为使用者提供灵活性,同时隐藏后端实现细节。
在我们开始定义架构之前,让我们快速了解一下 GraphQL 的 架构定义语言,或者 SDL。
如果你已经熟悉 SDL,可以自由地跳到下一课。
本质上,一个架构是 对象类型 的集合,其中包含 字段。每个 字段 都有它自己的类型。字段的类型可以是 标量 (例如 Int
或 String
),也可以是 另一个对象类型。例如,Track
对象类型 在我们的架构中将有一个 author
字段,类型为 Author
。
我们使用 type
关键字声明类型,后面跟着类型名称(PascalCase 是最佳实践),然后打开括号来包含其包含的 字段:
type SpaceCat {# Fields go here}
字段 通过其名称(camelCase)、冒号以及字段的类型(标量 或对象)来声明。一个字段还可以包含一个列表,用方括号表示:
type SpaceCat {age: Intmissions: [Mission]}
与 Javascript 对象(看起来很相似)不同,字段 不用逗号分隔。此外,我们可以指定每个字段值是可空还是不可空。如果字段不应该为空,我们在其类型后面添加一个感叹号:
定义一个 SpaceCat
类型,包含以下字段:name
类型为 String
(非空)、age
类型为 Int
、missions
类型为 List
的 Mission
好的,在我们开始编写架构之前,最后一点:描述。
良好的做法是 记录 你的架构,就像注释代码一样有用。这使得你的队友(和未来的你)更容易理解发生了什么。它还允许像 GraphOS Studio Explorer 这样的工具在 API 使用者需要时,指导他们了解他们可以使用你的 API 做些什么。
为此,SDL 允许你通过在类型和 字段 上方直接编写字符串(用引号括起来)来添加描述。
"I'm a regular description"
三个“双引号”允许你添加换行符,以便更清晰地格式化较长的注释。
"""I'm a block descriptionwith a line break"""
为 SpaceCat
类型添加块描述(三个“双引号”),并为 name
字段添加普通描述。
涵盖了最后一点,我们完成了快速复习。让我们构建我们的架构!
分享你关于本课的问题和评论
你的反馈帮助我们改进!如果你卡住了或感到困惑,请告诉我们,我们会帮助你。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已解决的评论可能会被删除。
你需要一个 GitHub 帐户才能在下面发布。没有帐户? 请在我们的 Odyssey 论坛中发布。