概述
现在该将我们学到的关于SDL 的知识付诸实践了。
在本课中,我们将
- 添加我们的 GraphQL 架构 依赖项
- 定义我们的架构
添加架构依赖项
要开始使用我们的架构,我们需要引入 DGS 依赖项。DGS 为我们提供了几个有用的入门包,我们可以将它们无缝地集成到我们的基本 Spring Boot 项目中。
implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter'implementation(platform('com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:7.6.0'))
打开build.gradle
文件,并将以下代码行复制到 dependencies
中。
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.boot:spring-boot-starter-webflux'implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter'implementation(platform('com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:7.6.0'))// ... other dependencies}
这些包负责我们让项目运行起来所需要的全部 GraphQL 连接。DGS 会自动扫描我们的项目以查找架构文件(具体来说,它会在项目的 src/main/resources/schema
文件夹中查找,我们即将创建该文件夹),以及我们将很快定义的某些注释和函数。
但在它能为我们做任何事情之前,我们实际上需要定义一个架构!
构建架构
让我们导航到 resources
包,位于 src/main
中。在那里,我们会找到 schema
目录,该目录包含我们的架构文件: schema.graphqls
。
📂 src┣ 📂 main┃ ┣ 📂 java┃ ┣ 📂 resources┃ ┃ ┣ 📄 application.properties┃ ┃ ┣ 📂 schema┃ ┃ ┃ ┗ 📄 schema.graphqls
✏️ 让我们定义该架构
参考我们精选房源的模型,我们确定需要一些关于每个房源的数据。
在本课程中,我们将跳过房源照片和整体评分,并解决模型的简化版本。
以下是我们将开始使用的基本 字段:
title
numOfBeds
costPerNight
closedForBookings
我们还需要一个 字段,我们可以使用它来区分一个房源与另一个房源 - 我们将该字段命名为 id
。
有了我们的一组 字段,让我们让 Listing
类型栩栩如生!
The Listing
类型
让我们在我们的 schema.graphqls
文件中定义 Listing
类型,并立即添加描述。
"A particular intergalactic location available for booking"type Listing {# Fields go here}
现在,对于房源的 字段,我们将有:
id
类型为ID!
title
类型为String!
numOfBeds
类型为Int
costPerNight
类型为Float
closedForBookings
类型为Boolean
所以,我们最终应该得到一个看起来像这样的 Listing
类型:
"A particular intergalactic location available for booking"type Listing {id: ID!"The listing's title"title: String!"The number of beds available"numOfBeds: Int"The cost per night"costPerNight: Float"Indicates whether listing is closed for bookings (on hiatus)"closedForBookings: Boolean}
请务必注意每个 Listing
类型的 字段 的可空性!
The Listing
类型现在已经完成,但我们需要一种方法来真正 询问 我们的 GraphQL 服务器 获取房源数据。为此,我们有一个单独的 Query
类型。
The Query
类型
The Query
类型与任何其他 对象类型 一样定义:
type Query {# Fields go here}
该类型的 字段 是我们架构的其余部分的 入口点。这些是我们的客户端可以 查询 的顶级 字段。
现在,我们只对获取我们主页上的精选房源列表感兴趣。让我们将该 字段 命名为 featuredListings
,以使其尽可能描述性。我们希望这个 字段 返回一个 Listing
列表。我们还会添加一个不错的描述:
type Query {"A curated array of listings to feature on the homepage"featuredListings: [Listing!]!}
我们的架构现在已完全定义,可以支持我们的第一个功能!
关键要点
- 只需几个依赖项,DGS 就会自动搜索名为
schema
的目录中包含的schema.graphqls
文件。 - 我们使用
Query
类型来定义客户端可以 查询 的顶级 字段。这些字段是我们架构的入口点。
下一步
现在我们的基础模式已经准备好了,我们可以开始着手 API 的下一部分——编写实际返回一些数据的函数。在下一课中,我们将编写第一个数据提取器。
分享您关于本课程的疑问和评论
本课程目前处于
您需要一个 GitHub 帐户才能在下面发布。还没有? 在我们的 Odyssey 论坛中发布。