Kotlin上的GraphQL:库与工具完全指南
GraphQL是一种API查询语言,也是一个用于执行这些查询的运行时环境,可配合您现有的数据使用。它允许客户端精确请求所需的数据,因此成为REST的有力替代方案。在Kotlin生态系统中,有多个成熟的库可用于构建GraphQL服务端。本文将详细解析主要工具、它们的语法及使用示例。
为什么选择Kotlin开发GraphQL?
Kotlin作为运行在JVM上的静态类型语言,非常适合构建类型安全的GraphQL模式。Kotlin编译器有助于在编码阶段避免错误,而富有表现力的语法使代码清晰简洁。Kotlin中用于GraphQL的主要库包括:
- graphql-kotlin(来自Expedia Group)——最流行的库,与Spring Boot紧密集成。
- KGraphQL——另一种选择,注重简单配置和极简API。
- Apollo Kotlin——面向Android和KMP的客户端库,但也提供服务端能力。
graphql-kotlin库
graphql-kotlin是一组用于在Kotlin上构建GraphQL服务器的库。其主要方法是使用注解和data类自动生成模式。
安装
在build.gradle.kts中添加依赖:
dependencies { implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.0") implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.0")}示例:简单查询
定义data类和解析器:
import com.expediagroup.graphql.server.operations.Query
data class User(val id: Int, val name: String, val email: String)
class UserQuery : Query { fun getUser(id: Int): User { // 模拟从数据库获取 return User(id = id, name = "Alice", email = "alice@example.com") }}graphql-kotlin会自动生成模式。现在客户端可以执行查询:
query { getUser(id: 1) { name email }}响应将只包含请求的字段:
{ "data": { "getUser": { "name": "Alice", "email": "alice@example.com" } }}变更(数据修改)
变更使用Mutation接口:
import com.expediagroup.graphql.server.operations.Mutation
class UserMutation : Mutation { fun createUser(name: String, email: String): User { // 创建用户的逻辑 return User(id = 2, name = name, email = email) }}对应的查询:
mutation { createUser(name: "Bob", email: "bob@example.com") { id name }}KGraphQL库
KGraphQL提供更偏向DSL的方法,无需注解。模式通过编程方式构建。
安装
dependencies { implementation("com.apurebase:kgraphql:0.18.0") implementation("com.apurebase:kgraphql-ktor:0.18.0") // 用于Ktor}示例:定义模式
import com.apurebase.kgraphql.schema.dsl.SchemaBuilder
val schema = SchemaBuilder { query("hello") { resolver { -> "Hello, World!" } }
query("user") { resolver { id: Int -> User(id = id, name = "Charlie", email = "charlie@example.com") } }
mutation("createUser") { resolver { name: String, email: String -> User(id = 3, name = name, email = email) } }}然后连接到Web框架