4. 构建架构
3m

概述

现在该将我们学到的关于 的知识付诸实践了。

在本课中,我们将

  • 添加我们的 依赖项
  • 定义我们的架构

添加架构依赖项

要开始使用我们的架构,我们需要引入 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 中。

build.gradle
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
}

这些包负责我们让项目运行起来所需要的全部 连接。DGS 会自动扫描我们的项目以查找架构文件(具体来说,它会在项目的 src/main/resources/schema 文件夹中查找,我们即将创建该文件夹),以及我们将很快定义的某些注释和函数。

任务!

但在它能为我们做任何事情之前,我们实际上需要定义一个架构!

构建架构

让我们导航到 resources 包,位于 src/main 中。在那里,我们会找到 schema 目录,该目录包含我们的架构文件: schema.graphqls

📂 src
┣ 📂 main
┃ ┣ 📂 java
┃ ┣ 📂 resources
┃ ┃ ┣ 📄 application.properties
┃ ┃ ┣ 📂 schema
┃ ┃ ┃ ┗ 📄 schema.graphqls

✏️ 让我们定义该架构

参考我们精选房源的模型,我们确定需要一些关于每个房源的数据。

A screenshot of Airlock, focused on the row of featured listings and their required fields

在本课程中,我们将跳过房源照片和整体评分,并解决模型的简化版本。

以下是我们将开始使用的基本

  • title
  • numOfBeds
  • costPerNight
  • closedForBookings

我们还需要一个 ,我们可以使用它来区分一个房源与另一个房源 - 我们将该字段命名为 id

有了我们的一组 ,让我们让 Listing 类型栩栩如生!

The Listing 类型

让我们在我们的 schema.graphqls 文件中定义 Listing 类型,并立即添加描述。

schema.graphqls
"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 类型现在已经完成,但我们需要一种方法来真正 询问 我们的 获取房源数据。为此,我们有一个单独的 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 的下一部分——编写实际返回一些数据的函数。在下一课中,我们将编写第一个数据提取器。

上一页

分享您关于本课程的疑问和评论

本课程目前处于

beta
.您的反馈有助于我们改进!如果您卡住或感到困惑,请告诉我们,我们会帮助您。所有评论都是公开的,必须遵循 Apollo 行为准则。请注意,已解决或处理过的评论可能会被删除。

您需要一个 GitHub 帐户才能在下面发布。还没有? 在我们的 Odyssey 论坛中发布。