使用 Kotlin 构建 GraphQL API:面向初学者的分步教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

GraphQL API 与 Kotlin 简介

GraphQL 是由 Facebook 开发的一种 API 查询语言,它允许客户端仅请求他们真正需要的数据。与每个端点返回固定数据结构的 REST 不同,GraphQL 提供了灵活性和控制力。Kotlin 作为一种现代的 JVM 静态类型语言,凭借其简洁性和安全性,非常适合构建此类 API。在本教程中,我们将使用 graphql-kotlin 库和 Spring Boot,逐步创建一个简单的基于 Kotlin 的 GraphQL 服务器。

到本文结束时,您将学会:

  • 使用 Gradle 配置 Kotlin 项目
  • 定义 GraphQL 模式(类型、查询、变更)
  • 实现用于处理查询的解析器
  • 通过 GraphQL Playground 测试 API


步骤 1:配置项目与依赖项

首先,我们将使用 Gradle 创建一个新的 Kotlin 项目。我们将使用 Spring Boot 来简化配置,并使用 graphql-kotlin-spring-server 来集成 GraphQL。

创建基础项目

创建项目目录和 build.gradle.kts 文件:

plugins {    id("org.springframework.boot") version "3.2.0"    id("io.spring.dependency-management") version "1.1.4"    kotlin("jvm") version "1.9.21"    kotlin("plugin.spring") version "1.9.21"}

group = "com.example"version = "0.0.1-SNAPSHOT"

java { sourceCompatibility = JavaVersion.VERSION_17}

repositories { mavenCentral()}

dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.1") implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.1") testImplementation("org.springframework.boot:spring-boot-starter-test")}

tasks.withType { kotlinOptions { freeCompilerArgs += "-Xjsr305=strict" jvmTarget = "17" }}

然后,在 src/main/kotlin/com/example/Application.kt 中创建主应用程序类:

package com.example

import org.springframework.boot.autoconfigure.SpringBootApplicationimport org.springframework.boot.runApplication

@SpringBootApplicationclass Application

fun main(args: Array<String>) { runApplication<Application>(*args)}


步骤 2:定义数据模型与 GraphQL 模式

GraphQL 使用强类型。让我们定义一个简单的数据模型——书籍(Book)和作者(Author)。

创建数据类

创建文件 src/main/kotlin/com/example/model/Book.kt:

package com.example.model

data class Book( val id: String, val title: String, val author: Author, val year: Int)

data class Author( val id: String, val name: String, val nationality: String)

graphql-kotlin 库将基于这些 data 类自动生成 GraphQL 类型。每个字段都将成为模式中的一个字段。

查询解析器

现在,创建一个提供数据的服务。创建 src/main/kotlin/com/example/service/BookService.kt:

package com.example.service

import com.example.model.Authorimport com.example.model.Bookimport org.springframework.stereotype.Service

@Serviceclass BookService { private val books = mutableListOf( Book("1", "战争与和平", Author("a1", "列夫·托尔斯泰", "俄罗斯"), 1869), Book("2", "罪与罚", Author("a2", "费奥多尔·陀思妥耶夫斯基", "俄罗斯"), 1866), Book("3", "1984", Author("a3", "乔治·奥威尔", "英国"), 1949) )

fun getAllBooks(): List<Book> = books fun getBookById(id: String): Book? = books.find { it

博客

书籍推荐