📄 GraphQL 模式
一个 模式类似于 合同在服务器和客户端之间。它定义 GraphQL API 可以做什么和不能做什么,以及客户端如何请求或更改数据。这是一个抽象层,为消费者提供灵活性,同时隐藏后端实施细节。
在我们开始定义模式之前,让我们快速浏览一下 GraphQL的 模式定义语言,或 SDL。
如果你已经熟悉 SDL,随时可以继续下一课。
本质上,模式是一系列包含 对象类型的 字段。每个 字段都有自己的类型。字段的类型可以是 标量(例如 Int
或 String
),也可以是 另一个对象类型。例如, Track
对象类型在我们的模式中会有一个 author
字段类型为 Author
。
我们使用 type
关键字来声明类型,后跟类型的名称(帕斯卡命名法是最佳实践),然后打开方括号来容纳其包含的 字段:
type SpaceCat {# Fields go here}
字段通过其名称(驼峰命名法)、冒号,然后是字段类型(标量或对象)来声明。一个字段还可以包含一个列表,用方括号表示:
type SpaceCat {age: Intmissions: [Mission]}
与 JavaScript 对象(看起来很相似) 不同, 字段不用逗号分隔。此外,我们可以指示每个字段值是否可空或不可空。如果一个字段永远不为 null,我们就在其类型后面添加一个感叹号:
定义一个具有下列字段的 SpaceCat
类型:类型为 String
的 name
(非 null)、类型为 Int
的 age
、类型为 List
的 Mission
的 missions
好了,在我们开始编写模式之前最后一件事: 描述。
记录架构是个好习惯,就跟注释代码有益一样。这样可以让你与团队成员(以及未来的自己)更轻松明了地了解正在发生的情况。并且也能让 Apollo Studio Explorer 等工具指导 API 使用者了解他们何时何地可以用你的 API 实现目标。
为了做到这一点,SDL允许你向类型和字段添加描述,只需直接在其上面编写字符串(放在引号中)即可。
"I'm a regular description"
三重“双引号”允许你添加换行符,以便更清晰地格式化较长的注释。
"""I'm a block descriptionwith a line break"""
为 SpaceCat
类型添加块描述(三重“双引号”),并为 name
字段添加常规描述。
有了最后的这点内容,我们就完成了快速回顾。来构建我们的架构!
分享你对此课程的问题和评论
你的反馈有助于我们改进!如果你遇到问题或困惑,欢迎告知我们,我们会助你一臂之力。所有评论都是公开的,且必须遵循 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。
你将需要一个 GitHub 帐户才能在下方发布。还没有帐户? 那就到我们的 Odyssey 论坛中发布吧。